📜  如何在Python Flask 中使用 Flask-Session?

📅  最后修改于: 2022-05-13 01:54:20.622000             🧑  作者: Mango

如何在Python Flask 中使用 Flask-Session?

烧瓶会议 –

  • Flask-Session 是 Flask 的扩展,支持服务器端会话到您的应用程序。
  • Session 是客户端登录到服务器和从服务器注销之间的时间
  • Session 中需要保存的数据存储在服务器上的临时目录中。
  • Session 中的数据存储在cookie 的顶部并由服务器加密签名。
  • 每个客户端都有自己的会话,他们自己的数据将存储在他们的会话中。

Session 的用途

  • 登录时记住用户
  • 存储用户特定的网站设置(主题)
  • 将电子商务网站用户商品存储在购物车中

安装

使用以下命令安装扩展

$ 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.htmllogin.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

{% extends "layout.html" %}
  
{% block y %}
  
   {% if session.name %}
      You are Register {{ session.name }} logout.
   {% else %}
      You are not Register. login.
   {% endif %}
  
{% endblock %}

登录.html

HTML

{% extends "layout.html" %}
  
{% block y %}
  
   

REGISTER

      
                 
   {% endblock %}

布局.html

HTML


  

    
        
         flask 
    
    
        {% block y %}{% endblock %}
    

输出 -

登录.html

索引.html

您还可以查看生成的会话