Session处理实例—Flask网站制作(13)
Posted 光荣之路
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Session处理实例—Flask网站制作(13)相关的知识,希望对你有一定的参考价值。
新书
速递
吴老的java版《selenium webdriver 实战宝典》和python版《selenium Webdriver 3.0 自动化测试框架实战指南》出版了,代码拿来就能用。
文 | 远山近海
Flask网站制作框架
安装:pip install Flask
Session处理
通过例子学习之例2
路由文件:
# coding=utf-8
from flask import Flask,render_template,request,redirect,session,url_for
from flask_wtf import FlaskForm
import wtforms
from datetime import timedelta
app=Flask(__name__)
app.secret_key="1234"
class LoginForm(FlaskForm):
username = wtforms.StringField('用户名:')
password = wtforms.PasswordField('密码:')
@app.route("/",methods=["POST","GET"])
def login():
session.clear()
ins_LoginForm =LoginForm(request.form)
if request.method=="POST":
username =ins_LoginForm.username.data # 通过类的实例化来获取表单中的username值
password= ins_LoginForm.password.data
if username=="admin"and password=="123456":
session["admin"] =username
return render_template("public.html")
if username=="xiaoming"and password=="123456":
session["normal_user"] =username
return render_template("public.html")
session.permanent = True
app.permanent_session_lifetime= timedelta(minutes=1)
session.clear()
return render_template("login.html", form=ins_LoginForm)
@app.route("/public/")
def public():
if session=={}:
ins_LoginForm =LoginForm(request.form)
return redirect(url_for("login"))
if session.get("admin",None) isnot None:
return render_template("admin/AdminUser.html")
else:
return render_template("public.html")
@app.route("/AdminUser/")
def AdminUser():
if session=={}:
return redirect(url_for("login"))
else:
return render_template("admin/AdminUser.html")
if __name__ == '__main__':
app.debug = True
app.run(port=8081)
login() 视图函数
-
如果是管理员登录,则为session设置一个admin键,值为当前用户名,即admin -
login函数,如果是普通用户登录,则为session设置一个normal_user键,值为当前用户名,即xiaoming -
在return render_template中,并没有把session传递给login页面,因为前面说了,session是全局的,随时随地都可以直接引用,无需传递 -
设置了session的有效时间为一分钟,不作操作超过一分钟,则跳转至登录页面 -
在该函数里清空了session,即只要一登陆,就先清空session,防止普通用户和管理员在同一台机器上使用同一个浏览器后,普通用户获取到管理员的session
public() 视图函数
-
当进入函数时,先判断,如果session为空,说明该登录者不是系统里的用户,他是通过猜地址进来的,那么就直接让他的页面跳转至登录页面 -
如果session里的admin键的值不为空,则证明该用户是管理员,那么可点击管理员的可见链接跳转至AdminUser.html页面 -
否则,则证明该用户为普通用户,那么可点击普通用户的可见链接跳转至public.html页面,即当前页面
AdminUser() 视图函数
注意:
在这里,只要session不为空,就可判断其为管理员,因为在public()函数所对应的public.html模板中,已经设置了如果是管理员,则可见管理员链接,如果是普通用户,则不可见管理员链接,所有,只要能点击管理员链接进入管理员页面的,就一定是管理员。
模板文件:
base.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>session练习</title>
</head>
<body>
session练习
               
{% if session['admin'] %}
你好:{{session['admin']}}
{% elif session['normal_user'] %}
你好:{{session['normal_user']}}
{% else %}
未登录
{% endif %}
     
{% if session!={} %}
<a href="{{url_for('login')}}">退出</a>
{% endif %}
<br><br><br>
{% block content %}
{% endblock %}
</body>
</html>
-
设置问候语,通过session取到用户名,展示在页面上 -
如果session的admin键不存在,normal_user键也不存在,则显示未登录
login.html
{% extends 'base.html' %}
{% block content %}
<form method="POST">
{{form.username.label}}
{{form.username}}<br><br>
{{form.password.label}}
{{form.password}}<br><br>
<input type="submit" value="登录"><br><br>
</form>
</body>
</html>
{% endblock %}
public.html
{% extends 'base.html' %}
{% block content %}
<body>
<h3>这里是公共页面</h3>
{% if session.get("admin")%}
<a href="{{url_for('AdminUser')}}">进入管理员页面</a>
{% else %}
<a href="{{url_for('public')}}">点吧,点了还是这个页面</a>
{%endif%}
</body>
</html>
{% endblock %}
-
如果session.get("admin")值存在,就展示【进入管理员页面】链接,并让链接跳转至AdminUser.html页面 -
否则,就展示【点吧,点了还是这个页面】链接,并让链接还跳转至public.html页面
AdminUser.html
{% extends 'base.html' %}
{% block content %}
<body>
<h3>这里是管理员页面</h3>
</body>
</html>
{% endblock %}
以上是关于Session处理实例—Flask网站制作(13)的主要内容,如果未能解决你的问题,请参考以下文章
Flask之Flask-Session -- 2019-08-11 19:38:31