如何在Python Flask 中使用 Flask-Session?
烧瓶会议 –
- Flask-Session 是 Flask 的扩展,支持服务器端会话到您的应用程序。
- Session 是客户端登录到服务器和从服务器注销之间的时间。
- Session 中需要保存的数据存储在服务器上的临时目录中。
- Session 中的数据存储在cookie 的顶部并由服务器加密签名。
- 每个客户端都有自己的会话,他们自己的数据将存储在他们的会话中。
Session 的用途
- 登录时记住用户
- 存储用户特定的网站设置(主题)
- 将电子商务网站用户商品存储在购物车中
This article assumes you are familiar with flask basics. Checkout – Flask – (Creating first simple application) to learn how to make a simple web application in flask.
安装
使用以下命令安装扩展
$ easy_install Flask-Session
或者,如果您安装了 pip
$ pip install Flask-Session
在 Flask 中配置会话
- Session 实例不用于直接访问,您应该始终使用flask_session。
- Flask 的第一行(会话)是这样的,我们每个人作为用户都可以获得我们自己的会话版本。
Python3
from flask import Flask, render_template, redirect, request, session
from flask_session import Session
Python3
app = Flask(__name__)
app.config["SESSION_PERMANENT"] = False
app.config["SESSION_TYPE"] = "filesystem"
Session(app)
Python3
@app.route("/")
def index():
return render_template('index.html')
@app.route("/login", methods=["POST", "GET"])
def login():
return render_template("login.html")
Python3
@app.route("/login", methods=["POST", "GET"])
def login():
# if form is submited
if request.method == "POST":
# record the user name
session["name"] = request.form.get("name")
# redirect to the main page
return redirect("/")
return render_template("login.html")
Python3
@app.route("/")
def index():
# check if the users exist or not
if not session.get("name"):
# if not there in the session then redirect to the login page
return redirect("/login")
return render_template('index.html')
Python3
@app.route("/logout")
def logout():
session["name"] = None
return redirect("/")
Python3
from flask import Flask, render_template, redirect, request, session
# The Session instance is not used for direct access, you should always use flask.session
from flask_session import Session
app = Flask(__name__)
app.config["SESSION_PERMANENT"] = False
app.config["SESSION_TYPE"] = "filesystem"
Session(app)
@app.route("/")
def index():
if not session.get("name"):
return redirect("/login")
return render_template('index.html')
@app.route("/login", methods=["POST", "GET"])
def login():
if request.method == "POST":
session["name"] = request.form.get("name")
return redirect("/")
return render_template("login.html")
@app.route("/logout")
def logout():
session["name"] = None
return redirect("/")
if __name__ == "__main__":
app.run(debug=True)
HTML
{% extends "layout.html" %}
{% block y %}
{% if session.name %}
You are Register {{ session.name }} logout.
{% else %}
You are not Register. login.
{% endif %}
{% endblock %}
HTML
{% extends "layout.html" %}
{% block y %}
REGISTER
{% endblock %}
HTML
flask
{% block y %}{% endblock %}
这仅特定于 flask_session 库
- SESSION_PERMANENT = False –所以这个会话的默认时间限制是几分钟、几小时或几天,之后它将过期。
- SESSION_TYPE = “filesystem” –它将存储在硬盘驱动器(这些文件存储在配置目录中的 /flask_session 文件夹下。)或任何在线 ide 帐户中,它是使用数据库或其他类似东西的替代方法。
蟒蛇3
app = Flask(__name__)
app.config["SESSION_PERMANENT"] = False
app.config["SESSION_TYPE"] = "filesystem"
Session(app)
登录后记住用户
所以我们将开始制作两个基本页面 和他们的路线称为index.html和login.html
- login.html包含一个表单,用户可以在其中填写他们的姓名并提交
- index.html是主页面
蟒蛇3
@app.route("/")
def index():
return render_template('index.html')
@app.route("/login", methods=["POST", "GET"])
def login():
return render_template("login.html")
- 我们需要在他们提交表单时记录会话中的用户名
- 我们在Python中使用字典,其中“name”是键 = request.form.get(“name”) 是一个值
蟒蛇3
@app.route("/login", methods=["POST", "GET"])
def login():
# if form is submited
if request.method == "POST":
# record the user name
session["name"] = request.form.get("name")
# redirect to the main page
return redirect("/")
return render_template("login.html")
- 存储用户名后,我们需要在用户登陆索引页面时检查是否存在具有该用户名的会话。
- 如果用户名不存在,则重定向到登录页面。
蟒蛇3
@app.route("/")
def index():
# check if the users exist or not
if not session.get("name"):
# if not there in the session then redirect to the login page
return redirect("/login")
return render_template('index.html')
- 成功记住用户后,我们还需要一种注销用户的方法。
- 因此,每当用户单击注销时,将用户值更改为 none并将它们重定向到索引页面。
蟒蛇3
@app.route("/logout")
def logout():
session["name"] = None
return redirect("/")
完成项目——
蟒蛇3
from flask import Flask, render_template, redirect, request, session
# The Session instance is not used for direct access, you should always use flask.session
from flask_session import Session
app = Flask(__name__)
app.config["SESSION_PERMANENT"] = False
app.config["SESSION_TYPE"] = "filesystem"
Session(app)
@app.route("/")
def index():
if not session.get("name"):
return redirect("/login")
return render_template('index.html')
@app.route("/login", methods=["POST", "GET"])
def login():
if request.method == "POST":
session["name"] = request.form.get("name")
return redirect("/")
return render_template("login.html")
@app.route("/logout")
def logout():
session["name"] = None
return redirect("/")
if __name__ == "__main__":
app.run(debug=True)
索引.html
- 我们还可以使用session.name来超出session的值。
HTML
登录.html
HTML
{% extends "layout.html" %}
{% block y %}
REGISTER
{% endblock %}
布局.html
HTML
flask
{% block y %}{% endblock %}