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=(("","女"),
("","男")
),
default="" )
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>
flask flask_session,WTForms的更多相关文章
- Flask插件wtforms、Flask文件上传和Echarts柱状图
一.wtforms 类比Django的Form组件Form组件的主要应用是帮助我们自动生成HTML代码和做一些表单数据的验证 flask的wtforms用法跟Form组件大同小异参考文章:https: ...
- flask 之cbv ,flash闪现,Flask_Session,WTForms - MoudelForm
1.CBV : from flask import views class LoginView(views.MethodView): def get(self): return def ...
- Flask的WTforms
一.简单介绍 WTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进行验证. 类似于Django中的modelform 安装: pip3 install wtforms 二.简 ...
- 85、flask之wtforms
本篇导航: wtforms组件的使用 自定义From组件 一.wtforms组件的使用 1.flask中的wtforms WTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进 ...
- flask之wtforms
本篇导航: wtforms组件的使用 自定义From组件 一.wtforms组件的使用 1.flask中的wtforms WTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进 ...
- Flask之wtforms源码分析
一.wtforms源码流程 1.实例化流程分析 # 源码流程 1. 执行type的 __call__ 方法,读取字段到静态字段 cls._unbound_fields 中: meta类读取到cls._ ...
- 【Flask】WTForms基本使用
# WTForms笔记:这个库一般有两个作用.第一个就是做表单验证,把用户提交上来的数据进行验证是否合法.第二个就是做模版渲染. ### 做表单验证:1. 自定义一个表单类,继承自wtforms.Fo ...
- 11,flask之--WTForms
WTForms是什么? 相当于django的ModelForm. 在网页中,为了和用户进行信息交互总是不得不出现一些表单.flask设计了WTForm表单库来使flask可以更加简便地管理操作表单数据 ...
- flask之wtforms 表单验证(一)
一 安装wtforms pip install wtforms 二 导入相关模块及对象 from wtforms import Form, widgets, validators from wtf ...
随机推荐
- 多线程状态与优先级、线程同步与Monitor类、死锁
一.线程状态 二.线程优先级 三.初步尝试多线程 class Program { static void Main(string[] args) { while (true) { MessagePri ...
- c/c++ 混合编程.so
CC = gccC++ = g++LINK = g++ LIBS = -lz -lm -lpcre#must add -fPIC optionCCFLAGS = $(COMPILER_FLAGS) - ...
- 创建testng.xml文件
简单介绍 运行TestNG测试脚本有两种方式:一种是直接通过IDE运行(例如使用eclipse中的“Run TestNG tests”),另一种是从命令行运行(通过使用xml配置文件).当我们想执行某 ...
- 让人又爱又恨的this
this是个神奇的东西, 既可以帮助我们把模拟的类实例化. 又可以在事件绑定里准确指向触发元素. 还可以帮助我们在对象方法中操作对象的其他属性或方法. 甚至可以在使用apply.call.bing.f ...
- Python process (进程)
进程 (process) 进程是对各种资源管理的集合,包含对各种资源的调用.内存的管理.网络接口的调用 进程要操作 CPU 必须先启动一个线程,启动一个进程的时候会自动创建一个线程,进程里的第一个线程 ...
- Moving x86 assembly to 64-bit (x86-64)
While 64-bit x86 processors have now been on the market for more than 5 years, software support is o ...
- D3力布图绘制--基本方法
本文主要结合案例记录使用D3.js绘制力布图的基本方法 样例显示 基本配置 this.force = d3.layout .force() .size([this.width, this.height ...
- spring 注解AOP
aspectAnnotation的切面信息,加到了AnnotationAwareAspectJAutoProxyCreator的advisorsCache属性里面去了. 解析annotationSe ...
- Algorithm: CRT、EX-CRT & Lucas、Ex-Lucas
中国剩余定理 中国剩余定理,Chinese Remainder Theorem,又称孙子定理,给出了一元线性同余方程组的有解判定条件,并用构造法给出了通解的具体形式. \[ \begin{aligne ...
- Ubuntu 16.04上anaconda安装和使用教程,安装jupyter扩展等 | anaconda tutorial on ubuntu 16.04
本文首发于个人博客https://kezunlin.me/post/23014ca5/,欢迎阅读最新内容! anaconda tutorial on ubuntu 16.04 Guide versio ...