基于蓝图 CBV 模式的登录
使用蓝图并用 cbv 模式完成登录功能
登录成功后跳转到首页
将 session 保存在 liunx 上的 Redis 数据库
使用 before_request 验证是否是登陆用户
蓝图
- from flask import Blueprint,render_template,redirect,views,request,session
- user = Blueprint("user",__name__)
- class User(views.MethodView):
- def get(self):
- return render_template("login.html")
- def post(self):
- username = request.form.get("username")
- password = request.form.get("password")
- if username == "henry" and password == "123":
- session["username"] = username
- uname = session.get("username")
- print(uname)
- return redirect("home")
- else:
- return "username or password error"
- user.add_url_rule("/login",endpoint=None,view_func=User.as_view(name="login"))
程序入口
- from flask import Flask,request,redirect,session
- from flask_session import Session
- from Redis import Redis
- from user_login.login_blue import user
- App = Flask(__name__)
- App.register_blueprint(user)
- App.config["SESSION_TYPE"]="redis"
- App.config["SESSION_REDIS"]=Redis(host="192.168.61.138",port=6380,db=2,password="root")
- Session(App)
- @App.before_request # 相当于 django 的中间件
- def auth():
- # 白名单放行
- if request.path == "/login":
- return None
- # 判断是否是登录用户
- if session.get("username"):
- return None
- else:
- # 如果不是登录页面就会跳转到登录页面
- return redirect("login")
- @App.route("/home")
- def home():
- return "这是 homo 页面"
- if __name__ == '__main__':
- App.run()
登录演示
没有登录时访问 home 页面会跳转到登录页面, 让用户登录;
登录成功后会跳转到 home 页面, 登录成功后我们写入了 session 保持会话, 我们可以直接访问登录后的所有页面;
来源: https://www.cnblogs.com/songzhixue/p/11184939.html