FLASK 的Session和MoudelForm插件
falsk是小而精的框架,但是热度高,
所有很多爱好者提供了很多扩展插件
功能强大,美而不足的就是兼容稳定性有时候不太好,不过大部分还是很可以的
Flask-Session
flask内置session式写在浏览器上的,感觉和其他框架不太一样,
现在学习一个写在后台的session
现在我想写在redis中,怎么操作呢
先要下载包 : flask-session
from flask import Flask, render_template
from flask import views # 导入视图模块
from flask import session
from flask_session import Session # 导入Session类
from redis import Redis app = Flask(__name__, static_folder="static")
# # # # # # 配置 # # # # # # # #
red = Redis("127.0.0.1", , db=) # 实例化Redis连接 app.config["SESSION_TYPE"] = "redis" # key大写,value小写!!!
app.config["SESSION_REDIS"] = red # 指定连接是Redis实例,让session执行写入redis的方法 Session(app) # 添加配置 # FBV
@app.route('/')
def index():
session["key"] = "strong_key"
print(session) # <RedisSession {'_permanent': True, 'key': 'strong_key'}>
# 浏览器观察key是 session :8a1561f9-800c-4f03-be69-2ea336c39d39
# redis中 通过"session:8a1561f9-800c-4f03-be69-2ea336c39d39"获取到value是
# "\x80\x03}q\x00(X\n\x00\x00\x00_permanentq\x01\x88X\x03\x00\x00\x00keyq\x02X\n\x00\x00\x00strong_keyq\x03u."
return "this's index" # CBV
class LoginClass(views.MethodView): def get(self): return render_template("login.html") def post(self):
return "ok" app.add_url_rule("/login", view_func=LoginClass.as_view("login")) app.run(debug=True, host="127.0.0.1", port="")
seesion_py文件

源码大概意思

需要配置的

WTForms - MoudelForm
后端写页面render到前端的组件
学过django应该了解form组件
flask中的第三方库WTForms功能是类似的
开始写一个简单的登录注册吧。。
没有拆分,直接写在一个app上了
from flask import Flask, render_template, request
from flask import views # 导入视图模块
from wtforms.fields import simple, core
from wtforms import Form
from wtforms import validators app = Flask(__name__, static_folder="static") # # # # # # # # # # # # # # # # # # # #
# # # # # # MoudelFrom组件 # # # # #
# # # # # # # # # # # # # # # # # # # # class LoginForm(Form):
username = simple.StringField(
label="用户名",
validators=[
validators.DataRequired(message="不能为空"),
validators.Length(min=, max=, message="不能小于3位,不能大于5位")
],
render_kw={"class": "my_username"}
) password = simple.PasswordField(
label="密码",
validators=[
validators.DataRequired(message="不能为空"),
validators.length(min=, max=, message="密码必须是6位"),
validators.Regexp(regex="\d+", message="密码必须是数字")
],
render_kw={"class": "my_pwd"}
) # 注册页面的form
class RegForm(Form):
username = simple.StringField(
label="用户名",
validators=[
validators.DataRequired(message="不能为空"),
validators.Length(min=, max=, message="不能小于3位,不能大于6位")
],
# render_kw={""} 不写了默认class:这个字段(username)
) password = simple.PasswordField(
label="密码",
validators=[
validators.DataRequired(message="不能为空"),
validators.Length(min=, message="密码不能小于6"),
validators.Regexp(regex="\d+", message="密码必须位数字"),
],
render_kw={"class": "reg_pwd"}
) re_password = simple.PasswordField(
label="重复密码",
validators=[
validators.EqualTo(fieldname="password", message="两次密码不一致")
]
) email = simple.StringField(
label="邮箱",
validators=[
validators.Email(message="格式不正确")
],
) # 性别 单选
gender = core.RadioField(
label="性别",
coerce=int,
choices=(
(, "男"), (, "女"), (, "保密")
),
default=
) # 爱好 多选
hobby = core.SelectMultipleField(
label="爱好",
coerce=int,
choices=(
(, "小姐姐"),
(, "小萝莉"),
(, "小哥哥"),
(, "小正太"),
(, "阿姨"),
(, "大叔"),
),
default=(, )
) submit = simple.SubmitField(
label="提交"
) # FBV
@app.route('/')
def index():
return "this's index" # CBV
class LoginClass(views.MethodView): def get(self):
login_form = LoginForm()
return render_template("login.html", lf=login_form) def post(self):
login_form = LoginForm(request.form)
if login_form.validate():
return ""
else:
return render_template("login.html", lf=login_form) class RegClass(views.MethodView): def get(self):
rf = RegForm()
return render_template("reg.html", rf=rf) def post(self):
rf = RegForm(request.form)
if rf.validate():
return ""
else:
return render_template("reg.html", rf=rf) app.add_url_rule("/login", view_func=LoginClass.as_view("login"))
app.add_url_rule("/reg",view_func=RegClass.as_view("reg"))
app.run(debug=True, host="127.0.0.1", port="")
app.py文件
html页面
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta http-equiv="content-Type" charset="UTF-8">
<meta http-equiv="x-ua-compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Title</title>
</head>
<body>
<form action="" method="post" novalidate>
{{ lf.username.label }}{{ lf.username }}{{ lf.username.errors. }}
<p>{{ lf.password.label }}{{ lf.password }}{{ lf.password.errors. }}</p>
<input type="submit" value="提交">
</form>
</body>
</html>
login.html
<head>
<meta http-equiv="content-Type" charset="UTF-8">
<meta http-equiv="x-ua-compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Title</title>
</head>
<body>
<form action="" method="post">
{% for field in rf %}
<p>{{ field.label }}{{ field }}{{ field.errors. }}</p>
{% endfor %}
</form> </body>
</html>
reg.html
FLASK 的Session和MoudelForm插件的更多相关文章
- Flask中session实现原理
前言 flask_session是flask框架实现session功能的一个插件,用来替代flask自带的session实现机制,flask默认的session信息保存在cookie中,不够安全和灵活 ...
- Flask的session——关于写扩展所学习到的
这两天端午节.趁着端午节没事干,写了个flask的扩展--flask-RedisSession 在flask中使用该扩展可以让你借助redis数据库轻松获得server-side session. 这 ...
- Flask的session使用
由于http是无状态保存的协议,session可以看作不同请求之间保存数据的一种机制.flask的session是基于cookie的会话保持. 流程 当客户端进行第一次请求的时候,客户端的HTTP r ...
- 第六篇 flask中session
Flask中的Session非常的奇怪,他会将你的SessionID存放在客户端的Cookie中,使用起来也非常的奇怪 Flask 中 session 的使用 1. Flask 中 session 是 ...
- Flask里面session的基本操作
#session是依赖于flask的session模块 #如果想使用session模块,在配置里必须定义sessionkey from flask import Flask,session #建立对象 ...
- flask 的session
python的flask操作设置.获得与删除session 首先讲一下Python的flask中session与cookies的关系,session是储存在服务器中的,cookies是储存在浏览器本地 ...
- Flask之session相关
Flask的session简介 除请求对象之外,还有一个 session 对象.它允许你在不同请求间存储特定用户的信息.它是在 Cookies 的基础上实现的,并且对 Cookies 进行密钥签名要使 ...
- flask自定义session
根据内置session原理可以进行session的定制: #!/usr/bin/env python # -*- coding:utf-8 -*- import uuid import json fr ...
- Flask 进阶session和上下文管理解析
session的源码流程 将session放置在redis中 安装 pip install flask-session 使用 import redis from flask import Flask, ...
随机推荐
- Spring Boot的事务处理
spring boot大大简化了之前java项目需要在配置xml里设置很多繁琐的内容. 设置数据源和配置事务 @Bean(name = "masterDataSource") @P ...
- SQL学习指南之查询入门
查询语句 select语句由几个组件或者说子句构成.不过在MySQL中,只有一种子句是必不可少的(select子句),通常的查询语句会至少包含6个子句中的2~3个.下面的表列出了用于不同目的的各个子句 ...
- 第二章 python的介绍及变量
1.编程语言的介绍 a.机器语言 使用二进制编写指令的编程方式 b.汇编语言 汇编指令与机器语言相对应 c.高级语言 需要借助特殊的工具将其转换成机器语言,但是方便人进行阅读理解的编程方式 从执行效率 ...
- C# 插件化方案(Add-In)
白话插件框架原理 WPF 插件开发(.NET Framework 3.5 System.Addin) 原文:AddIn Enabled Applications
- excel合并
import org.apache.commons.lang.StringUtils; import org.apache.poi.hssf.usermodel.HSSFWorkbook; impor ...
- 重新定义Pytorch中的TensorDataset,可实现transforms
class TensorsDataset(torch.utils.data.Dataset): ''' A simple loading dataset - loads the tensor that ...
- 肺结节CT影像特征提取(三)——肺结节CT影像特征提取系统软件设计
肺结节的特征提取在临床中有着重要应用,在上篇文章已经对肺结节的基本特征和CT影像特征提取算法有了介绍,提出了三类肺结节CT影像特征提取算法.本文重点介绍肺结节CT影像特征提取系统的功能介绍及使用,利用 ...
- VMWare 鼠标无法点击 的问题
今日发现在VMWare虚拟机中点击鼠标没有反应,但是鼠标hover.键盘都是正常的. 还表现为,如果从外部环境激活鼠标,然后移至虚拟机区域,快速双击,则可以捕获为单击. 这个问题在网络上未见有明确解释 ...
- 【easy】349. Intersection of Two Arrays
找两个数组的交集(不要多想,考虑啥序列之类的,就是简单的两堆数求交集啊!!!最后去个重就好了) //LeetCode里用到很多现成函数的时候,苦手だな- //这个题的思路是,先sort,把两个vect ...
- 【算法】【python实现】二叉搜索树插入、删除、查找
二叉搜索树 定义:如果一颗二叉树的每个节点对应一个关键码值,且关键码值的组织是有顺序的,例如左子节点值小于父节点值,父节点值小于右子节点值,则这棵二叉树是一棵二叉搜索树. 类(TreeNode):定义 ...