您的位置:首页 > 运维架构 > 网站架构

使用flask+html实现网站的登录注册注销功能

2018-01-29 21:29 1081 查看
实现登录功能
@app.route('/login/',methods=['GET','POST'])
def login():
if request.method =='GET':
return render_template('login.html')
else:
callnumber = request.form.get('callnumber')
password = request.form.get('password')
username = request.form.get('callnumber')
telephone = User.query.filter(User.callnumber == callnumber,User.password == password).first()
user_name = User.query.filter(User.username == username,User.password == password).first()

if telephone:
session['user_id'] = telephone.id
session.permanent = True    #31天内都不需要登录
return redirect(url_for('index'))
elif user_name:
session['user_id'] = user_name.id
session.permanent = True
return redirect(url_for('index'))
else:
return '手机号码或者密码错误,请重新输入'
实现注册功能
@app.route('/regist/',methods=['GET','POST'])
def regist():
...省略

#验证手机号码是否注册过
user = User.query.filter(User.callnumber == callnumber).first()
if user:
return '该手机号码已经被注册,请更换手机号码'
else:
if password1 != password2:
return '两次密码不相等,请核对后再输入'
else:
...省略


写一个装饰器来实现登录限制
from functools import wraps
from flask import  session,redirect,url_for
def login_required(func):
@wraps(func)
 def wrapper(*args,**kwargs):
if session.get('user_id'):
return func(*args,**kwargs)
else:
return redirect(url_for('login'))
return wrapper

用一个上下文管理器来将用户登录的信息传给html

@app.context_processor
def my_context_processor():
user_id = session.get('user_id')
if user_id:
user = User.query.filter(User.id == user_id).first()
if user:
return {'user':user}
return {}

再将html部分修改如下:
{% if user %}
<li><a href="#">用户:{{ user.username }}</a></li>
<li><a href="{{ url_for('logout') }}">注销</a></li>
{% else %}
<li><a href="{{ url_for('login') }}">登录</a></li>
<li><a href="{{ url_for('regist') }}">注册</a></li>
{% endif %}
这样登录后导航条就会从登录注册变为用户名和注销。
上面我们将注销关联到了一个logout函数上:@app.route('/logout/')
def logout():
# session.pop('user_id')
# del session['user_id']
session.clear()
return redirect(url_for('login'))用户名那里下次可以写一个个人资料页面,这里先用#代替。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: