一.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的更多相关文章

  1. Flask插件wtforms、Flask文件上传和Echarts柱状图

    一.wtforms 类比Django的Form组件Form组件的主要应用是帮助我们自动生成HTML代码和做一些表单数据的验证 flask的wtforms用法跟Form组件大同小异参考文章:https: ...

  2. flask 之cbv ,flash闪现,Flask_Session,WTForms - MoudelForm

    1.CBV : from flask import views  class LoginView(views.MethodView):  def get(self):   return     def ...

  3. Flask的WTforms

    一.简单介绍 WTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进行验证. 类似于Django中的modelform 安装: pip3 install wtforms 二.简 ...

  4. 85、flask之wtforms

    本篇导航: wtforms组件的使用 自定义From组件 一.wtforms组件的使用 1.flask中的wtforms WTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进 ...

  5. flask之wtforms

    本篇导航: wtforms组件的使用 自定义From组件 一.wtforms组件的使用 1.flask中的wtforms WTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进 ...

  6. Flask之wtforms源码分析

    一.wtforms源码流程 1.实例化流程分析 # 源码流程 1. 执行type的 __call__ 方法,读取字段到静态字段 cls._unbound_fields 中: meta类读取到cls._ ...

  7. 【Flask】WTForms基本使用

    # WTForms笔记:这个库一般有两个作用.第一个就是做表单验证,把用户提交上来的数据进行验证是否合法.第二个就是做模版渲染. ### 做表单验证:1. 自定义一个表单类,继承自wtforms.Fo ...

  8. 11,flask之--WTForms

    WTForms是什么? 相当于django的ModelForm. 在网页中,为了和用户进行信息交互总是不得不出现一些表单.flask设计了WTForm表单库来使flask可以更加简便地管理操作表单数据 ...

  9. flask之wtforms 表单验证(一)

    一  安装wtforms pip install wtforms 二  导入相关模块及对象 from wtforms import Form, widgets, validators from wtf ...

随机推荐

  1. office 小技巧

    1. 数据匹配 VLOOKUP 例一:如图,将左表(sheet1)的e列关联到右表(sheet2),条件为: sheet2.字段名 = sheet1.D 公式:=VLOOKUP(sheet2!D2:D ...

  2. linux-zookeeper-kafka入门

    公告:版权所有,违者必究 1.zookeeper安装 前提:先安装jdk,zookeeper运行依赖于java环境. (1.)下载安装包 http://mirror.bit.edu.cn/apache ...

  3. [LOJ 2083][UOJ 219][BZOJ 4650][NOI 2016]优秀的拆分

    [LOJ 2083][UOJ 219][BZOJ 4650][NOI 2016]优秀的拆分 题意 给定一个字符串 \(S\), 求有多少种将 \(S\) 的子串拆分为形如 AABB 的拆分方案 \(| ...

  4. USACO19JAN Gold题解

    噩梦的回忆.. 上周日在机房打的模拟赛,结果十分惨烈,就最后一题yy出了正解结果玄学的只拿了80 考试结果:0+0+80=80 订正时对着T3打了2hours结果还是90 订正结果:100+100+9 ...

  5. Paper | Recovering Realistic Texture in Image Super-resolution by Deep Spatial Feature Transform

    目录 故事背景 空域特征转换 超分辨率网络 发表在2018年CVPR. 摘要 Despite that convolutional neural networks (CNN) have recentl ...

  6. windows上安装python和python开发工具

    一.python安装: 登录python官网,下载需要的安装包:https://www.python.org/downloads/windows/.,一般就下载 executable installe ...

  7. bayer2bmp

    #include <stdlib.h> #include <string.h> #include <getopt.h> #include <stdint.h& ...

  8. thinkPHP5 添加新模块

    1. 修改build.php文件 , 添加新模块 2. cmd 运行命令 php think build --config build.php

  9. 1+x 证书 Web 前端开发 JavaScript 专项练习

    官方QQ群 1+x 证书 Web 前端开发 JavaScript 专项练习 http://blog.zh66.club/index.php/archives/198/

  10. Unity C# CSV文件解析与加载(已更新移动端处理方式)

    在游戏开发过程中,经常要用到Excel编辑各类数据,如果可以直接用Excel支持的文件格式来读取数据,修改将非常便捷. Excel支持导出CSV类型的文件,这类文件不仅可以用Excel直接打开修改,即 ...