flask CBV
from flask import Flask, views, render_template, request app = Flask(__name__,template_folder='template') USER = {"username": "aaa", "password": "111"} class Login(views.MethodView): #注意导入的类 MethodView
#methods=["GET","POST"] 可有可无 def get(self): return render_template("login.html") def post(self): username = request.form.get("username") password = request.form.get("password") if username == USER["username"] and password == USER["password"]: return "登录成功" else: return render_template("login.html", error="用户名或者密码错误") app.add_url_rule("/login", view_func=Login.as_view(name="login")) #也可加上 endpoint=None if __name__ == '__main__': app.run("127.0.0.1", 5000)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="" method="post"> {{ error }} <br> 用 户:<input type="text" name="username"> <br> 密 码:<input type="password" name="password"> <br> <input type="submit" value="登录"> </form> </body> </html>
flask-session 综合测试
manage.py
注意 python 中安装flask-session 模块
Windows中 安装redis 数据库 启动数据库 连接数据库
from flask import Flask, request, session, redirect from redis import Redis from flask_session import Session from day89.server import login from day89.server import students from day89.server import detail from day89 import settings app = Flask(__name__) # 指定session 存储的数据库类型 app.config["SESSION_TYPE"] = "redis" # 配置数据库实例 app.config["SESSION_REDIS"] = Redis(host="127.0.0.1", port=6379, db=6) # 读取config配置 改写APP Session(app) # 加密钥 # app.secret_key = "xxx" app.config.from_object(settings.Debugsetting) # app.config.from_object(settings.Testingsetting) # 在进入视图函数之前进行验证 @app.before_request def is_login(): if request.path == "/login": return None if not session.get("user"): return redirect("/login") # 注册 app.register_blueprint(login.login) app.register_blueprint(students.students) app.register_blueprint(detail.detail) # 错误界面 @app.errorhandler(404) def error404(error_message): return "这个界面真没有!!!" if __name__ == '__main__': app.run()
setting.py
class Debugsetting(object): DEBUG=True SESSION_COOKIE_NAME="I am debug session" class Testingsetting(object): TESTING=True SESSION_COOKIE_NAME="I am testing session"
login.py
from flask import Blueprint, request, render_template, redirect, session,views login = Blueprint("login", __name__) USER = {"username": "aaa", "password": "111"} # r = redis.StrictRedis(host='127.0.0.1', port=6379, db=6) class Login(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 == USER["username"] and password == USER["password"]: session["user"]=username return redirect("/students") else: return render_template("login.html", error="用户名或者密码错误") login.add_url_rule("/login",view_func=Login.as_view(name="login")) # from flask import Blueprint, request, render_template, redirect, session # login = Blueprint("login", __name__) # # USER = {"username": "aaa", "password": "111"} # @login.route("/login", methods=["GET", "POST"]) # def login1(): # if request.method == "GET": # return render_template("login.html") # else: # username = request.form.get("username") # password = request.form.get("password") # if username == USER["username"] and password == USER["password"]: # session["user"] = username # return redirect("/students") # else: # return render_template("login.html", error="用户名或者密码错误")
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
from flask import Blueprint, render_template, views STUDENT_DICT = { 1: {'name': 'Old', 'age': 38, 'gender': '中'}, 2: {'name': 'Boy', 'age': 73, 'gender': '男'}, 3: {'name': 'EDU', 'age': 84, 'gender': '女'}, } students = Blueprint("students", __name__, ) class Students(views.MethodView): def get(self): return render_template("students.html", studentdict=STUDENT_DICT) students.add_url_rule("/students", view_func=Students.as_view(name="students")) # # from flask import Blueprint, render_template # # STUDENT_DICT = { # 1: {'name': 'Old', 'age': 38, 'gender': '中'}, # 2: {'name': 'Boy', 'age': 73, 'gender': '男'}, # 3: {'name': 'EDU', 'age': 84, 'gender': '女'}, # } # # students = Blueprint("students", __name__,) # # # @students.route("/students") # def students1(): # return render_template("students.html", studentdict=STUDENT_DICT)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
from flask import Blueprint, request, render_template, views detail = Blueprint("detail", __name__, ) STUDENT_DICT = { 1: {'name': 'Old', 'age': 38, 'gender': '中'}, 2: {'name': 'Boy', 'age': 73, 'gender': '男'}, 3: {'name': 'EDU', 'age': 84, 'gender': '女'}, } class Detail(views.MethodView): def get(self): id = request.args.get("id") studentdetail = STUDENT_DICT.get(int(id)) return render_template("detail.html", id=id, studentdetail=studentdetail) detail.add_url_rule("/detail", view_func=Detail.as_view(name="detail")) # from flask import Blueprint, request, render_template # # detail = Blueprint("detail", __name__, # ) # # STUDENT_DICT = { # 1: {'name': 'Old', 'age': 38, 'gender': '中'}, # 2: {'name': 'Boy', 'age': 73, 'gender': '男'}, # 3: {'name': 'EDU', 'age': 84, 'gender': '女'}, # } # # # @detail.route("/detail") # def detail1(): # id = request.args.get("id") # studentdetail = STUDENT_DICT.get(int(id)) # return render_template("detail.html", id=id, studentdetail=studentdetail)
html
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>login</title> </head> <body> <form action="" method="post"> {{ error }} <br> 用户名:<input type="text" name="username"> <br> 密码:<input type="password" name="password"> <br> <input type="submit" value="登录"> </form> </body> </html>
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> {{ studentdict }} <table border="1px"> <thead> <tr> <th>id</th> <th>name</th> <th>detail</th> </tr> </thead> <tbody> {% for id,student in studentdict.items() %} <tr> <td>{{ id }}</td> <td>{{ student.name }}</td> <td><a href="/detail?id={{ id }}">detail</a></td> </tr> {% endfor %} </tbody> </table> </body> </html>
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> {{ id }} {{ studentdetail }} <table border="1px"> <thead> <tr> <th>id</th> <th>name</th> <th>age</th> <th>gender</th> </tr> </thead> <tbody> <tr> <td>{{ id }}</td> <td>{{ studentdetail.name }}</td> <td>{{ studentdetail.age }}</td> <td>{% if studentdetail.gender !="男" and studentdetail.gender !="女" %} 女 {% else %} {{ studentdetail.gender }} {% endif %} </td> </tr> </tbody> </table> <br> <button><a href="/students">返回</a></button> </body> </html>