怎么用flask+mysql来实现一个简单的用户注册和登陆效果的页面

 我来答
育知同创教育
2016-02-02 · 百度知道合伙人官方认证企业
育知同创教育
1【专注:Python+人工智能|Java大数据|HTML5培训】 2【免费提供名师直播课堂、公开课及视频教程】 3【地址:北京市昌平区三旗百汇物美大卖场2层,微信公众号:yuzhitc】
向TA提问
展开全部

用flask+mysql实现用户的注册和登录:

一个简单的用户注册和登录的页面,就两个部分。

涉及到数据库,存储用户数据(注册),读出用户数据(登录验证)。搞清楚如何用python连接和操作数据库即可,还有了解sql数据库语句,sqlite和mysql差不多的,看几眼多试几下就了解了。

网站程序,前端如何发送表单,后端获取用户发送的请求,和数据库中数据验证是否能够登录,然后登录后如何保存用户登录信息,就是使用的cookie,不过在flask中是session(其实session也是cookie,flask把它封装了下,成了加密的cookie)。

举例如下:

from functools import wrapsdef authorize(fn):
    @wraps(fn)
    def wrapper(*args, **kwds):
        user = session.get('logged_in', None)
        if user:
            return fn(user=user)
        else:
            return redirect(url_for('signin',next=request.path))

    return wrapper@app.route('/home')@authorizedef home(**kwds):
    username = kwds['user']
    return render_template('index.html' ,username=username)#加密存储密码import osimport hashlibdef encrypt_password(password, salt=None):
    if not salt:
        salt = os.urandom(16).encode('hex') # length 32
    result = password
    for i in range(3):
        result = hashlib.sha256(password + salt).hexdigest()[::2] #length 32
    return result, salt#简单的错误处理class loginError(Exception):
    def __init__(self, value):
        self.value = value
    def __str__(self):
        return repr(self.value)# 注册登录(下面的代码没有实际运行过)# 连接数据库我是使用的是 mysql.connector # http://dev.mysql.com/downloads/connector/python/# 写法和常用的MySQL-python稍有所不同# 下面没有连接数据库的代码@app.route('/register/', methods=['GET','POST'])def request():
    if request.method == 'GET':
        return render_template("register.html")
    if request.method == 'POST':
        # 这里最好需要验证用户输入,我就不写了
        u = request.form['username']
        p,s = encrypt_password(request.form['password'])
        g.db.cursor.execute('INSERT INTO users (name,password,salt) VALUES (%s,%s,%s)',(u,p,s,)
        g.db.commit()
        return redirect(url_for('signin'))@app.route('/signin/', methods=['GET','POST'])def signin():
    if request.method == 'GET':
        referrer = request.args.get('next','/')
        return render_template("login.html",next=referrer)
    if request.method == 'POST':
        u = request.form['username']
        p = request.form['password']
        n = request.form['next']
        try:
            g.db.cursor.execute('SELECT `name` FROM users WHERE name = %s',(u,))
            if not g.db.cursor.fetchone():
                raise loginError(u'错误的用户名或者密码!')
            g.db.cursor.execute('SELECT `salt`,`password` FROM users WHERE name = %s',(u,))
            salt,password = g.db.cursor.fetchone()
            if encrypt_password(p,salt)[0] == password:
                session['logged_in'] = u
                return redirect(next)
            else:
                raise loginError(u'错误的用户名或者密码!')
        except loginError as e:
            return render_template('login.html', next=next,error=e.value)@app.route('/signout/', methods=['POST'])def signout():
    session.pop('logged_in', None)
    return redirect(url_for('home'))
匿名用户
推荐于2016-10-12
展开全部
  一个简单的用户注册和登录的页面,就两个部分。
  涉及到数据库,存储用户数据(注册),读出用户数据(登录验证)。搞清楚如何用python连接和操作数据库即可,还有了解sql数据库语句,sqlite和mysql差不多的,看几眼多试几下就了解了。
  网站程序,前端如何发送表单(别告诉这你也不清楚?)后端获取用户发送的请求,和数据库中数据验证是否能够登录,然后登录后如何保存用户登录信息,就是使用的cookie,不过在flask中是session(其实session也是cookie,flask把它封装了下,成了加密的cookie)
  总之如果你认真跟着官方的教程走过一遍。只是完成用户登录和注册的功能都不难的。虽然这些知识点都不烂,但是覆盖范围还比较广泛。数据库,前端的html,后端的程序框架,你对其中一项不太了解都会让你有种无法下手的感觉。
  好吧。丢一段验证登录代码上来,因为flask的路由是通过绑定一个个函数来实现的,如果你要在给每个路由都添加一段验证登录的代码还是蛮麻烦的,不过通过装饰器这个功能实现起来还是蛮方便的。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式