验证登录
app.py
from flask import Flask, render_template, request
app = Flask(__name__)
@app.route('/login', methods=['GET', 'POST'])
def index():
if request.method == 'GET':
return render_template('login.html')
user = request.form.get('user')
pwd = request.form.get('pwd')
if user == 'laowang' and pwd == '123':
pass
else:
return render_template('login.html', msg='用户名或密码错误')
if __name__ == '__main__':
app.run()
- 如果登录成功, 什么都不做
- 如果密码或者用户名错误, 返回提示信息到前台
login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>用户登录程序</title>
</head>
<body>
<form method="post">
<input type="text" name="user">
<input type="password" name="pwd">
<input type="submit" value="提交"> {{msg}}
</form>
</body>
</html>
重定向
- 如果登录成功, 重定向到登录后的页面
- 使用
redirect
方法
from flask import Flask, render_template, request, redirect
app = Flask(__name__)
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'GET':
return render_template('login.html')
user = request.form.get('user')
pwd = request.form.get('pwd')
if user == 'laowang' and pwd == '123':
return redirect('/index')
else:
return render_template('login.html', msg='用户名或密码错误')
@app.route('/index')
def index():
return '欢迎登陆'
if __name__ == '__main__':
app.run()
现在有一个bug, 不登录也可以看到后台页面
把用户信息放入session
- 语法 :
session['名称'] = 数据
- flask的session默认放到浏览器的cookie里
- 放到浏览器的时候需要使用
secret_key
进行加密(签名) - 需要给
application
加密, 这里的app对象就是application
app.secret_key = '秘钥'
- 把
session
加密后放到cookie
里, 返回给用户浏览器
判断是否登录
- 使用 判断session是否存在
- session是特殊的字典, 使用get取值
session.get('user_info')
- session是特殊的字典, 使用get取值
from flask import Flask, render_template, request, redirect, session
app = Flask(__name__)
app.secret_key = 'asdfghjkl'
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'GET':
return render_template('login.html')
user = request.form.get('user')
pwd = request.form.get('pwd')
if user == 'laowang' and pwd == '123':
session['user_info'] = user
return redirect('/index')
else:
return render_template('login.html', msg='用户名或密码错误')
@app.route('/index')
def index():
user_info = session.get('user_info')
if not user_info:
return redirect('/login')
return '欢迎登陆'
if __name__ == '__main__':
app.run()
注销
- 把当前session删除
- 使用
del
方法
- 使用
@app.route('/logout')
def logout():
del session['user_info']
return redirect('/login')