Session : pip install flask-session 1 #导入指定的模块 2 from flask import Flask,session 3 from redis import Redis 4 from flask_session import Session 5 6 7 app = Flask(__name__) 8 9 如果使用默认的flask中的session就需要使用secret_key 10 Flask中的session 需要执行 session_interface - open_session 11 #app.secret_key = "asdasw3@fs4" 12 13 #配置使用redis作为session 14 app.config["SESSION_TYPE"] ="redis" 15 app.config["SESSION_REDIS"]=Redis(host="127.0.0.1",port=6379) 16 17 #把原先的默认flask使用的session机制替换为现在的配置机制 18 Session(app) 19 20 @app.route("/") 21 def index(): 22 session["user"] = "sdsdsadas2#" 23 return "123456" 24 25 if __name__ == '__main__': 26 app.run(debug=True) 此时flask_session 已经存储在redis中。不再存在于浏览器中
WTForms :(与Django中的Modelforms作用一样)
pip install WTForms
from flask import Flask, render_template,request from wtforms.fields import simple, core from wtforms import Form from wtforms import validators,widgets app = Flask(__name__) #登录表单 class LoginForm(Form): username = simple.StringField( label="用户名", description='请输入用户名', render_kw={"class":"my_login"}, validators=[validators.DataRequired(message='用户名不能为空')], id='user_name', widget=None ) password = simple.PasswordField( label="密码", description="请输入密码", validators=[validators.DataRequired(message="密码不能为空"), validators.Length(min=3,max=10,message="密码最大十个,最小3个"), ], widget=widgets.PasswordInput() ) #注册表单 class RegForm(Form): username = simple.StringField( label="用户名", # 标签标记 validators=[validators.DataRequired(message="用户名不能为空"), validators.Length(min=3,max=8,message="用户名不合法,最长8个,最小3个")], # 校验条件 可迭代条件 ) password = simple.PasswordField( label="密码", # 标签标记 validators=[validators.DataRequired(message="密码不能为空"), validators.Length(min=3, max=16, message="密码不合法,最长16个,最小3个"), ], ) repassword = simple.PasswordField( label="确认密码", # 标签标记 validators=[validators.EqualTo(fieldname="password",message="两次输入密码不一致")] ) gender = core.RadioField( label="性别", coerce=str, choices=( ("1","女"), ("2","男") ), default="1" ) hobby = core.SelectMultipleField( label="爱好", validators=[validators.Length(min=2,max=4,message="癖好有问题")], coerce=int, choices=( (1, "篮球"), (2, "足球"), (3, "排球"), (4, "兵乓球"), (5, "游泳") ), default=(1,3,5) ) @app.route("/login",methods=["GET","POST"]) def login(): if request.method == "GET": fm = LoginForm() return render_template("index.html",wtf=fm) else: new_fm = LoginForm(request.form) if new_fm.validate(): return new_fm.data.get("password") else: return render_template('index.html',wtf=new_fm) @app.route("/reg",methods=["GET","POST"]) def reg(): if request.method == "GET": rf = RegForm() return render_template("reg.html",rf = rf) else: rf = RegForm(request.form) if rf.validate(): # print(type(rf.data.get("gender")),rf.data.get("gender")) return rf.data.get("password") else: return render_template("reg.html", rf=rf) if __name__ == '__main__': app.run(debug=True)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="" method="post" novalidate> {{ wtf.username.label }} {{ wtf.username }} {{ wtf.username.errors.0 }} <p>{{ wtf.password.label }} {{ wtf.password }} {{ wtf.password.errors.0 }} </p> <input type="submit" value="登录"> </form> </body> </html>
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>Title</title> <meta name="viewport" content="width=device-width, initial-scale=1"> </head> <body> <form action="" method="post" novalidate> {% for field in rf %} <p>{{ field.label }}{{ field }}{{ field.errors.0 }}</p> {% endfor %} <input type="submit" value="注册"> </form> </body> </html>