flask(四)

1.Flask-Session

from flask import session,Flask
from flask_session import Session  #导入
from redis import Redis
app=Flask(__name__)
#1.session的配置
app.config["SESSION_TYPE"]="redis"
app.config["SESSION_REDIS"]=Redis(host="127.0.0.1",port=6379,db=6)

Session(app)  #2.定义使用该session的app

#3.存与取使用
@app.route('/let')
def let():
    session["user"]="shy"
    return 'ok'

@app.route("/get")
def get():
    print(session["user"])
    return 'okok'
app.run('0.0.0.0',5000,debug=True)

flask中的session需要执行session_interface-------open_session

 

注:字典的setfefault方法

dict.setdefault(key,default=None)
#如果键不存在于字典中,将会添加键并将值设为默认值。

 

2.WTForms(相当于Django的modelform)

登录页面

from wtforms.fields import simple,core
from wtforms import Form
from wtforms import validators
from flask import Flask,request,render_template

app=Flask(__name__)

class LoginForm(Form):
    username = simple.StringField(
        label="用户名",  # 标签标记
        validators=[validators.DataRequired(message='用户名不能为空'),validators.Length(min=3,max=5,message="过长或过短")],  # 不能为空
        # descripyion="ffff",  # 描述标记
        id="user_name",  # 标签id
        default=None,
        # widget=   #input输入框,已经被实例化了
        render_kw=None,
    )  # 实例化
    password = simple.PasswordField(
        label="密码",  # 标签标记
        validators=[
            validators.DataRequired(message='密码不能为空'),
            validators.Email(message="密码必须符合邮箱规则"),
        ],  # 不能为空
        # descripyion="",  # 描述标记
        id="password",  # 标签id
        # widget=   #input输入框,已经被实例化了
        render_kw=None,
    )

@app.route("/get",methods=['GET','POST'])
def index():
    print(111111111)
    if request.method == "GET":
        print(222)
        fm = LoginForm()
        print(33)
        return render_template("index.html", wtf=fm)
    else:
        print(55555)
        new_fm = LoginForm(request.form)
        print(new_fm)
        if new_fm.validate():
            return new_fm.data.get("username")
        else:
            return render_template("index.html", wtf=new_fm)
app.run('0.0.0.0',5000)

注册页面

from wtforms.fields import simple.core
from wtforms import Form
from wtforms import validators

class LogonForm(Form):
    username=simple.StringField(
        label="用户名",#标签标记
        validators=[validators.Daterequire(message='用户名不能为空')],#不能为空
        descripyion="",#描述标记
        id="user_name",#标签id
        #widget=   #input输入框,已经被实例化了
        render_kw=None,
    )#实例化
    password=simple.PasswordField(
        label="密码",#标签标记
        validators=[validators.Equalto(fieldname='password',message='密码两次输入不一致')],
        descripyion="",#描述标记
        id="user_name",#标签id
        #widget=   #input输入框,已经被实例化了
        render_kw=None,
    )
    repassword=simple.PasswordField(
        label="再次输入密码",#标签标记
        validators=[
            validators.Daterequire(message='密码不能为空'),
            validators.Email(message="密码必须符合邮箱规则"),
            ],#不能为空
        descripyion="",#描述标记
        id="user_name",#标签id
        #widget=   #input输入框,已经被实例化了
        render_kw=None,
    )
    gender=core.RadioField(
        label='性别',
        coerce=int,
        choices=(
            (1,''),
            (2,'')
        ),
        defaule=1,
    )
    hobby=core.SelectMultipleField(
        label='爱好',
        coerce=int,#获取到的数据类型,如果改成str,choice和defaule也要改
        choices=(
            (1,'抽烟'),
            (2,'喝酒'),
            (3,'烫头'),
            (4,'撸串'),
        ),
        defaule=(1,2,3),
        validators=[validators.Length(min=2,max=4,message='爱好不能太多太少')]
    ),
 @app.route("/reg",method)
def   reg():
    if request.method=="GET":
        rf=LoginForm()
        return render_template("index.html",wtf=rf)
    else:
        rf=LoginForm(request.path)
        if rf.validate():
            return rf.data.get("username")
        else:
            return render_template("index.html",wtf=rf)

 

原文地址:https://www.cnblogs.com/shanghongyun/p/10275351.html