Flask中的session与WTForms使用例子

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)
wtform_use.py
<!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>
login.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>
reg.html

猜你喜欢

转载自www.cnblogs.com/cou1d/p/12487122.html