1.CBV :
 from flask import views
 
 class LoginView(views.MethodView):
  def get(self):
   return
   
  def post(self):
   return
   
 
 app.add_url_rule("/login",endpoint=None,view_func=LoginView.as_view("login"))
 
2.flash:
 from flask import flash,get_flash_messages
 
 flash("","tag")
 get_flash_messages("tag")
 
3.Flask-Session
 from flask_session import Session
 from flask import session
 
 app.config["SESSION_TYPE"] = "redis"
 app.config["SESSION_REDIS"] = Redis("127.0.0.1",6379,db=7)
 Session(app)
 
 session["user"] = "123"
 session.get("user")
 
4.WTForms - MoudelForm
 from wtfroms.fields import simple,core
 from wtfroms import Form,validators
 
 class LoginForm(Form):
  username = simple.StringFields(
   label = "" #看源码 __init__
  )
  
 
 lf = LoginForm()
 render_template("html",lf=lf)
 
 {{ lf.uername }}
 {{ lf.uername.label }}
 {{ lf.uername.errors.0 }}
 
 lf = LoginForm(request.form)
 
 if not lf.validata():
  render_template("html",lf=lf)
 
 lf.data.get("username")
 
 
**************************************************************************************************************************************
 
from flask import Flask,request,render_templatefrom flask import viewsfrom wtforms import Form #类似 form表单from wtforms.fields import simple,corefrom wtforms import validators #验证器

app=Flask(__name__)#登录页面认证class LoginForm(Form):    username=simple.StringField(        label='用户名',        validators=[            validators.DataRequired(message='不能为空'),#直接把错误写入            validators.Length(min=3,max=5,message='不能小于3位,不能大于5位')        ],        render_kw={'class':'my_username'}, #相等于自定义的类,属性    )

    password=simple.PasswordField(        label='密码',        validators=[           validators.DataRequired(message='不能为空'),            validators.length(min=6,max=6,message='密码必须为6位'),            validators.Regexp(regex='\d+',message='密码必须为数字'),        ],        render_kw={'class':'my_password'}    )

#注册页面认证class RegForm(Form):    username=simple.StringField(        label='密码',        validators=[            validators.DataRequired(message='不能为空'),            validators.Length(min=3,max=5,message='')        ],        render_kw={'class':'my_username'}    )    nickname=simple.StringField(        label='昵称',        validators=[            validators.DataRequired(message='不能为空')],        render_kw={'class':'my_nickname'}    )

    password=simple.PasswordField(        label='密码',        validators=[            validators.DataRequired(message='不能为空'),            validators.Length(min=6,max=6,message='密码必须为6位'),            validators.Regexp(regex='\d+',message='密码必须为数字')        ],        render_kw={'class':'my_password'}    )

    repassword=simple.PasswordField(        label='确认密码',        validators=[ #EqualTo 等于    与字段匹配            validators.EqualTo(fieldname='password',message='两次不一致')        ],        render_kw={'class':'my_password'}    )

    email=simple.StringField(        label='邮箱',        validators=[            validators.Email(message='格式不正确')        ],        render_kw={'class':'myemail'}    )

    #上面用simple  下面用core    gender=core.RadioField(        label='性别',        coerce=int,  #类型为int        choices=(            (1,'女'),            (2,'男')        ),        default=1  #默认为1    )

    hobby=core.SelectMultipleField(        label='爱好',        coerce=int,        choices=(            (1,'小姐姐'),            (2,'小萝莉'),            (3,'小哥哥'),            (4,'正太'),            (5,'小阿姨'),            (6,'小大叔'),        ),        default=(1,2,5)    )

    submit=simple.SubmitField(        label='提交'    )

#登录验证class LoginClass(views.MethodView):    def get(self):        froms=LoginForm()        return render_template('login.html',froms=froms)

    def post(self):        froms=LoginForm(request.form)        if froms.validate(): #django 是is_valid()            return '110'        else:            return render_template('login.html',froms=froms)

app.add_url_rule('/login',view_func=LoginClass.as_view('login'))

#注册

class RegClass(views.MethodView):

    def get(self):        froms=RegForm()        return render_template('reg.html',froms=froms)

    def post(self):        froms=RegForm(request.form)        if froms.validate():            return '120'        else:            return render_template('reg.html',froms=froms)app.add_url_rule('/reg',view_func=RegClass.as_view('reg'))

if __name__ == '__main__':    app.run(debug=True)

flask 之cbv ,flash闪现,Flask_Session,WTForms - MoudelForm的更多相关文章

  1. flask的CBV,flash,Flask-Session,及WTForms-MoudelForm

    1,CBV: from flask import vews class LoginView(views.MethodView): def get(self): return "雪雪其实也很好 ...

  2. flask模板应用-消息闪现(flash())

    消息闪现 flask提供了一个非常有用的flash()函数,它可以用来“闪现”需要提示给用户的消息,比如当用户登录成功后显示“欢迎回来!”.在视图函数调用flash()函数,传入消息内容,flash( ...

  3. Flask Flash闪现

    Flash介绍以及工作方式 flash中添加消息 取出flash中的消息 Flash介绍以及工作方式 - 介绍: flash :闪现 一个好的应用和用户界面都需要良好的反馈. 如果用户得不到足够的反馈 ...

  4. flask flask_session,WTForms

    一.Flask_session 本质上,就是是cookie 下的session存储在redis中,方便快速取得session from flask import Flask,session from ...

  5. 第十一篇 CBV和闪现

    前几篇写的都是FBV 现在可以了解一下CBV CBV 其实就是把请求方式都写到一个类中 学过django的一眼应该就明白了 from flask import Flask, render_templa ...

  6. Flask - 请求响应 | session | 闪现 | 请求扩展 | 中间件

    请求响应 flask的请求信息都在request里 flask的响应方式有四剑客,也可以自定义响应 请求相关信息 # request.method 提交的方法 # request.args get请求 ...

  7. python Flask框架CBV视图

    1.演示之前需要先写一个装饰器 # 装饰器 def wrapper(func): def inner(*args, **kwargs): print('操作函数%s之前' % func.__name_ ...

  8. flask之CBV模式

    flask_cbv.py ''' flask中的CBV模式: (1)导入views模块: from flask import views (2)定义类,继承views.MethodView类: cla ...

  9. Flask中的flash

    一.简单的使用 - 必须要设置秘钥因为flash是基于session -设置:flash('aaa') -取值:get_flashed_message() #从源码我们可以看出get_flashed_ ...

随机推荐

  1. php 过滤器filter_var验证邮箱/url/ip等

    验证邮箱.url或者ip,除了使用正则外,也可以使用内置的函数库过滤器filter来完成这些功能. filter_var (PHP 5 >= 5.2.0, PHP 7)filter_var — ...

  2. Golang client绑定本地IP和端口

    有时需要指定网络通信时本地使用的IP地址和端口号. 在Go语言中可通过定义 Dialer 中LocalAddr 成员实现. Dialer结构定义如下: // A Dialer contains opt ...

  3. Hadoop HDFS DataNode 目录结构

    DataNode 目录结构 和namenode不同的是,datanode的存储目录是初始阶段自动创建的,不需要额外格式化. 1.    在/opt/module/hadoop-2.7.2/data/t ...

  4. IText简介及示例

    一.iText简介 iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库.通过iText不仅可以生成PDF或rtf的文档,而且可以将XML.Html文 ...

  5. Spring Boot 监控与管理

    在微服务架构中,我们将原本庞大的单体系统拆分为多个提供不同服务的应用,虽然,各个应用的内部逻辑因分解而简化,但由于部署的应用数量成倍增长,使得系统的维护复杂度大大提升,为了让运维系统能够获取各个为服务 ...

  6. linux 添加用户并赋予root权限

    1.添加用户,首先用adduser命令添加一个普通用户,命令如下: #adduser tommy //添加一个名为tommy的用户#passwd tommy   //修改密码Changing pass ...

  7. TensorFlow:tf.nn.max_pool实现池化操作

    tf.nn.max_pool(value, ksize, strides, padding, name=None) 参数是四个,和卷积很类似: 第一个参数value:需要池化的输入,一般池化层接在卷积 ...

  8. Azure ARM (15) 根据现有VHD文件,创建ARM VM

    <Windows Azure Platform 系列文章目录> 在很多时候,我们需要根据现有VHD文件,创建ARM VM.在这里笔者简单介绍一下相关的Azure PowerShell 这里 ...

  9. 陷入了一个NGUI自适应的一个坑

    自己对anchor的乱用.造成自己深陷anchor来搞自适应 耽误了太多的精力,最终也是回到正轨的途径 这期间浪费的太多精力了. 沉迷一件错误的事情过久 就 要果断的跳出 调整 . 但凡让自己觉得别扭 ...

  10. Inno Setup 脚本

    给你个我用的例子: Delphi/Pascal code   ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 2 ...