flask flask_session,WTForms

一.Flask_session

本质上,就是是cookie 下的session存储在redis中,方便快速取得session

from flask import Flask,session
from flask_session import Session
from redis import Redis

app=Flask(__name__)
#这两个是必须填写的,在session源码中,
‘‘‘
  if config[‘SESSION_TYPE‘] == ‘redis‘:
            session_interface = RedisSessionInterface(
                config[‘SESSION_REDIS‘], config[‘SESSION_KEY_PREFIX‘],
                config[‘SESSION_USE_SIGNER‘], config[‘SESSION_PERMANENT‘])
‘‘‘

app.config[‘SESSION_TYPE‘] = "redis"
app.config["SESSION_REDIS"]=Redis(host=‘127.0.0.1‘,port=6379,db=6)

Session(app)
@app.route("/")
def index():
    session["user"]="value"
    return "hello"
if __name__ == ‘__main__‘:
    app.run(debug=True)

#查看进入redis redis-cli
#选择db select db的序号
#存储在redis get session:c0cdc66b-3ef0-4d0c-8030-a37f14be7e5d

二.WTForms

本质上就是通过进行类的继承关系快速生成一张form表单,在前端通过后端发送的实例化对象点出他的属性

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

app=Flask(__name__)
‘‘‘
源码 进行覆盖
def __init__(self, label=None, validators=None, filters=tuple(),
             description=‘‘, id=None, default=None, widget=None,
             render_kw=None, _form=None, _name=None, _prefix=‘‘,
             _translations=None, _meta=None):
‘‘‘

class LoginForm(Form):
    username=simple.StringField(    #生成的input标签的name:username
        label="用户名",               #字段
        validators=[
            validators.DataRequired(message="用户不能为空"),
            validators.Length(min=3,max=12,message="不是长了就是断了")

        ],             #校验条件
        id="user_id",  #input标签的id
        default=None,  #默认值,当发生select时的默认选择
        widget=None,   # 默认组件(input type="text") 在StringField中已经被实例化了
        render_kw={"class":"my_login"}    #input标签下的类class=my_login

    )
    # 这里PasswordField是继承StringField的 区别在于PasswordField是密文的
    password=simple.PasswordField(

        label="密码",
        validators=[
            validators.DataRequired(message="用户不能为空"),
            validators.Length(min=3, max=12, message="不是长了就是断了"),
            validators.Email(message="密码必须符合邮箱规则")

        ],
        id="user_pwd",
        default=None,
        widget=None,
        render_kw={"class": "my_login"}

    )

class RegForm(Form):
    username=simple.StringField(
        label="用户名",
        validators=[
            validators.DataRequired(message="用户名不能为空"),
            validators.Length(min=3, max=8, message="用户名不是长了就是短了")
        ])
    password=simple.PasswordField(
            label="密码",
            validators=[
                validators.DataRequired(message="密码不能为空"),
                validators.Length(min=3, max=16, message="密码不是长了就是短了"),
                validators.Email(message="密码必须符合邮箱规则")
            ])

    repassword=simple.PasswordField(
            label="确认密码",
            validators=[validators.EqualTo(fieldname="password",message="未确认眼神")])

    gender=core.RadioField(  #单选 core下的RadioField
            label="性别",
            coerce=str,
            choices=(("1","女"),
                     ("2","男")
                     ),
            default="1"  

        )
    hobby=core.SelectMultipleField(    #多选 core下的SelectMultipleField
        label="爱好",
        validators=[validators.Length(min=2,max=4,message="癖好有问题")],
        coerce=int,
        choices=((1,"food"),(2,"eat"),(3,"swim"),(4,"joke"),(5,"love")
    ),
        default=(1,2,3)
        )

@app.route("/",methods=["GET","POST"])
def index():
    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("username")
        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():
            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 }}
    <p>
    <h2>{{ wtf.username.errors.0 }}</h2></p>
    <p>
        {{ wtf.password.label }}
        {{ wtf.password }}

    </p>
    <p>
    <h1>
        {{ wtf.password.errors.0 }}
    </h1>
    </p>
    <input type="submit" value="登录">

</form>
</body>
</html>

原文地址:https://www.cnblogs.com/zhangqing979797/p/10274319.html

时间: 2024-11-06 15:26:00

flask flask_session,WTForms的相关文章

Flask之wtforms源码分析

一.wtforms源码流程 1.实例化流程分析 1 # 源码流程 2 1. 执行type的 __call__ 方法,读取字段到静态字段 cls._unbound_fields 中: meta类读取到cls._wtforms_meta中 3 2. 执行构造方法 4 5 a. 循环cls._unbound_fields中的字段,并执行字段的bind方法,然后将返回值添加到 self._fields[name] 中. 6 即: 7 _fields = { 8 name: wtforms.fields.

85、flask之wtforms

本篇导航: wtforms组件的使用 自定义From组件 一.wtforms组件的使用 1.flask中的wtforms WTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进行验证. 安装: pip3 install wtforms 2.wtforms组件的使用之登录验证 1)图示 2)manage.py from flask import Flask,render_template,request,redirect from wtforms.fields import

Flask之WTForms

WTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进行验证. 安装: pip3 install wtforms 用户登录注册示例 1. 用户登录 当用户登录时候,需要对用户提交的用户名和密码进行多种格式校验.如: 用户不能为空:用户长度必须大于6: 密码不能为空:密码长度必须大于12:密码必须包含 字母.数字.特殊字符等(自定义正则): #!/usr/bin/env python # -*- coding:utf-8 -*- from flask import Flas

【Flask之WTForms】 -- 2019-08-08 18:01:54

原文: http://106.13.73.98/__/120/ 下载:pip install WTForms 第一步 Flask脚本: from flask import Flask, request, render_template, views from wtforms import Form, validators from wtforms.fields import simple, core app = Flask(__name__) # ------------------------

【Flask之WTForms】 -- 2019-08-08 20:39:48

原文: http://106.13.73.98/__/120/ 下载:pip install WTForms 第一步 Flask脚本: from flask import Flask, request, render_template, views from wtforms import Form, validators from wtforms.fields import simple, core app = Flask(__name__) # ------------------------

【Flask之WTForms】 &#223218;

原文: http://blog.gqylpy.com/gqy/345 下载:pip install WTForms 第一步 Flask脚本: from flask import Flask, request, render_template, views from wtforms import Form, validators from wtforms.fields import simple, core app = Flask(__name__) # ---------------------

WEB框架之Flask

Django:1个重武器,包含了web开发中常用的功能.组件的框架:(ORM.Session.Form.Admin.分页.中间件.信号.缓存.ContenType....): Tornado:2大特性就是异步非阻塞.原生支持WebSocket协议: Flask:功能和性能虽然不及Django和Tornado,但是Flask的第三方开源组件比丰富:http://flask.pocoo.org/extensions/ Bottle:比较简单: 总结: 都不是我写的!!!不论优劣,不同的工具而已: 小

Flask

Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后触发Flask框架,开发人员基于Flask框架提供的功能对请求进行相应的处理,并返回给用户,如果要返回给用户复杂的内容时,需要借助jinja2模板来实现对模板的处理,即:将模板和数据进行渲染,将渲染后的字符串返回给用户浏览器. "微"(micro) 并不表示你需要把整个 Web 应用塞进单

80、Flask用法简析

本篇导航: 基本使用 模板.请求和响应 Session 蓝图 其他 Flask插件 Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后触发Flask框架,开发人员基于Flask框架提供的功能对请求进行相应的处理,并返回给用户,如果要返回给用户复杂的内容时,需要借助jinja2模板来实现对模板的处理,即:将模板和数据进行渲染,将渲染后的字符串返回给用