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)

flask(四)的更多相关文章

  1. Flask 四剑客

    Flask 四剑客 返回字符串,返回 html , 跳转路由,返回 json from flask import Flask, render_template, redirect, jsonify a ...

  2. Flask - 四剑客 | templates | 配置文件 | 路由系统 | CBV

    Flask框架简介 说明:flask是一个轻量级的web框架,被称为微型框架.只提供了一个高效稳定的核心,其它全部通过扩展来实现.意思就是你可以根据项目需要进行量身定制,也意味着你需要不断学习相关的扩 ...

  3. Flask (四) 模型进阶

    模型进阶 多对多关联 用户收藏电影,一个用户可以收藏多部电影, 一部电影可以被不同的用户收藏, 是一个多对多关系. ​ # 中间表(不是模型) collects = db.Table('collect ...

  4. Flask 四种响应类型

    1 直接返回字符串 可以返回状态码 @app.route('/testresponse', methods=['GET', 'POST']) def testresponse(): return &q ...

  5. web 部署专题(四):压力测试(二)压力测试实例 flask 四种wsgi方式对比(tornado,Gunicorn,Twisted,Gevent)

    使用工具:siege 代码结构: hello.py templates |--hello.html hello.py代码: from flask import Flask, render_templa ...

  6. 用它5分钟以后,我放弃用了四年的 Flask

    有一个非常简单的需求:编写一个 HTTP接口,使用 POST 方式发送一个 JSON 字符串,接口里面读取发送上来的参数,对其中某个参数进行处理,并返回. 如果我们使用 Flask 来开发这个接口,那 ...

  7. 初步了解学习flask轻量级框架,

    关于flask我有话说 flask作为一个轻量级框架,它里面有好多扩展包需要下载,比较麻烦,而且有的时候flask需要在虚拟环境下运行,但是他的优点还是有滴 ,只要是用过Django的人,都会觉得fl ...

  8. Python Flask Web 框架入门

    Python Flask 目录 本文主要借鉴 letiantian 的文章 http://www.letiantian.me/learn-flask/ 一.简介 二.安装 三.初始化Flask 四.获 ...

  9. python中常用第三方库记录

    python中有很多很好用的第三方库,现在记录一下这些库以及如何下载 一.virtualenv,这是一个可以将生产环境隔离开的python库,非常好用 在linux下使用pip install vir ...

随机推荐

  1. class helper 可能是从 Delphi 2007 增加的新语法

    class helper 可能是从 Delphi 2007 增加的新语法, 因为感觉不太实用, 直到今天才测试了一下. 试过之后才知道: 挺有意思的! 基本功能就是修改已存在的类. Txxx = cl ...

  2. Python 格式化输出 —— 小数转化为百分数

    比如将 0.1234 转化为 12.34% 的形式: rate = .1234 print('%.2f%%' % (rate * 100)) 第一个百分号和 .2f 相连,表示浮点数类型保留小数点后两 ...

  3. 机房收费系统vb.net之打包与部署(一)

    从机房重构到如今,我最大的感受就是万事开头难,万事结尾难!开头难是由于那个思路理不清,对三层已经设计模式的应用不够熟悉,结尾难就是打包部署了!这几天非常头疼,以为完毕了代码就大功告成了,但是没想到啊, ...

  4. Etag & If-None-Match 专题

    一.概述 缓存通俗点讲,就是将已经得到的‘东东’存放在一个相对于自己而言,尽可能近的地方,以便下次需要时,不会再二笔地跑到起始点(很远的地方)去获取,而是就近解决,从而缩短时间和节约金钱(坐车要钱嘛) ...

  5. Windows多线程系列

    来自CSDN - 秒杀多线程系列.覆盖了Windows系统的线程同步机制.对于理解各种锁以及多线程典型场景很有帮助.

  6. WebView 联系(要么button)至 Activity 跳跃在几个方面

    第一 ,写一个 JavaScriptinterface 分类.内实现WebView至Activity 页面跳转 public class JavaScriptinterface { Activity ...

  7. DDD实战4 实现产品仓储

    a.要实现仓储,首先要定义仓储接口.在领域层定义仓储接口,IProductRepository.cs. public interface IProductRepository { void Creat ...

  8. 将枚举转成SelectListItem

    代码如下: /// <summary> /// 将一个枚举转化成一个List<SelectListItem> /// </summary> /// <type ...

  9. 七easy网络陷阱上当

    网络犯罪可能开始与你或你的家人,因为无论出现什么样的警告信息,或异常体征,你还是做你通常做在互联网上,网络犯罪已经发生不知道.趋势科技收集了你所该避免的七种最常见的网络犯罪陷阱.让你和家人避免成为它们 ...

  10. QT中窗口刷新事件的学习总结(viewport, paintEvent, repaint, update, erase, updatesEnabled)

    一.主要理解一下几个方法和属性: 1.QWidget * QScrollView::viewport () const 2.void QWidget::paintEvent ( QPaintEvent ...