怎么用flask+mysql来实现一个简单的用户注册和登陆效果的页面
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么用flask+mysql来实现一个简单的用户注册和登陆效果的页面相关的知识,希望对你有一定的参考价值。
用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')) 参考技术A 用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')) 参考技术B 一个简单的用户注册和登录的页面,就两个部分。
涉及到数据库,存储用户数据(注册),读出用户数据(登录验证)。搞清楚如何用python连接和操作数据库即可,还有了解sql数据库语句,sqlite和mysql差不多的,看几眼多试几下就了解了。
网站程序,前端如何发送表单(别告诉这你也不清楚?)后端获取用户发送的请求,和数据库中数据验证是否能够登录,然后登录后如何保存用户登录信息,就是使用的cookie,不过在flask中是session(其实session也是cookie,flask把它封装了下,成了加密的cookie)
总之如果你认真跟着官方的教程走过一遍。只是完成用户登录和注册的功能都不难的。虽然这些知识点都不烂,但是覆盖范围还比较广泛。数据库,前端的html,后端的程序框架,你对其中一项不太了解都会让你有种无法下手的感觉。
好吧。丢一段验证登录代码上来,因为flask的路由是通过绑定一个个函数来实现的,如果你要在给每个路由都添加一段验证登录的代码还是蛮麻烦的,不过通过装饰器这个功能实现起来还是蛮方便的。
。
flask框架--cookie,session
今天我又给大家分享一下怎么用flask框架来实现像淘宝购物车一样存储数据,并且把存储的数据删除,这个方法可以用两个方法都可以做成,一个是cookie,另一个是session。
session是依赖于cookie的,session一般用在敏感的重要的信息的存储,存储在服务端中的
cookie是把数据存储在客户端是为了辨别用户身份,进行会话跟踪而存储在用户本地的数据(通常经过加密)
我先写一下cookie的代码
用cookie完成的话先用make_response库,调用cookie依赖的request模块
from flask import Flask,make_response,request
先建立对象
app = Flask(__name__)
然后从配置文件加载配置
app.config.from_pyfile(‘config.ini‘)
@app.route(‘/‘)
def index():
return"这是首页"
存cookie的方法
@app.route(‘/setcookie‘)
def set_cookie():
resp = make_response(‘存储cookie‘)
使用方法set_cookie来存储key_value形式的数据
resp.set_cookie(‘productnamae‘,‘卫生纸‘)
调用cookie 的方法
@app.route(‘/getcookie‘)
def get_cookie():
通过request模块的cookies模块的get方法,指定key调用value
resp = request.cookies.get(‘productnameae‘)
return resp
删除模块
@app.route(‘delecookie‘)
def del_cookie():
通过make_response对象内置的delete_cookie方法,指定key调用value
resp = make_response(‘删除cookie‘)
resp.delete_cookie
return resp
#程序入口
if __name__=="__main__"
app.run()
session方法和cookie方法差不多~
不过在session方法的配置文件里 必须加入一个SECRET_KEY=‘sadfa’这个东西
前面的都一样我就不写了,我就从存储数据哪里开始写~
存储session的方法
@app.route(‘/set_session‘)
def set_session():
直接使用session对存储的内容赋值
session[‘username‘] = ‘你好‘
return ‘存储session成功‘
调用session的方法
@app.route(‘/get_session‘)
def get_session():
通过session直接对内容进行调用
se = session[‘username‘]
return se
删除session的方法
@app.route(‘/del_session‘)
def del_session():
通过session的pop方法来删除指定的key来删除value
session.pop(‘username‘)
return ‘删除成功‘
然后和上面的一样用程序入口运行一下程序就可以了
以上是关于怎么用flask+mysql来实现一个简单的用户注册和登陆效果的页面的主要内容,如果未能解决你的问题,请参考以下文章
flask-login怎么实现用多个model登录,如管理员表,用户表分开登录
如何用flask实现一个web应用来显示在mysql数据库中查询到的内容