Flask-WTForm:

from flask import Flask,render_template,request,redirect

from wtforms.fields import core

from wtforms.fields import html5

from wtforms.fields import simple

from wtforms import Form

from wtforms import validators

from wtforms import widgets

app = Flask(__name__,template_folder="templates")

class Myvalidators(object):

'''自定义验证规则'''

def __init__(self,message):

self.message = message

def __call__(self, form, field):

print(field.data,"用户输入的信息")

if field.data == "haiyan":

return None

raise validators.ValidationError(self.message)

class LoginForm(Form):

'''Form'''

name = simple.StringField(

label="用户名",

widget=widgets.TextInput(),

validators=[

Myvalidators(message="用户名必须是haiyan"),#也可以自定义正则

validators.DataRequired(message="用户名不能为空"),

validators.Length(max=8,min=3,message="用户名长度必须大于%(max)d且小于%(min)d")

],

render_kw={"class":"form-control"}  #设置属性

)

pwd = simple.PasswordField(

label="密码",

validators=[

validators.DataRequired(message="密码不能为空"),

validators.Length(max=8,min=3,message="密码长度必须大于%(max)d且小于%(min)d"),

validators.Regexp(regex="\d+",message="密码必须是数字"),

],

widget=widgets.PasswordInput(),

render_kw={"class":"form-control"}

)

def validate_pwd_confim(self,field,): #相当于clean_field 钩子函数

'''

自定义pwd_config字段规则,例:与pwd字段是否一致

:param field:

:return:

'''

# 最开始初始化时,self.data中已经有所有的值

if field.data != self.data['pwd']:

# raise validators.ValidationError("密码不一致") # 继续后续验证

raise validators.StopValidation("密码不一致")  # 不再继续后续验证

favor = core.SelectMultipleField(

label="喜好",

choices=(

(1, '篮球'),

(2, '足球'),

),

widget = widgets.ListWidget(prefix_label=False),

option_widget = widgets.CheckboxInput(),

coerce = int,

default = [1, 2]

)

def __init__(self,*args,**kwargs):  #这里的self是一个RegisterForm对象

'''重写__init__方法'''          #从数据库实时更新

super(RegisterForm,self).__init__(*args, **kwargs)  #继承父类的init方法

self.favor.choices =((1, '篮球'), (2, '足球'), (3, '羽毛球'))  #吧RegisterForm这个类里面的favor重新赋值

@app.route('/login',methods=["GET","POST"])

def login():

if request.method =="GET":

form = LoginForm()

return render_template("login.html",form=form)

else:

form = LoginForm(formdata=request.form)

if form.validate():

print("用户提交的数据用过格式验证,值为:%s"%form.data)

return "登录成功"

else:

print(form.errors,"错误信息")

return render_template("login.html",form=form)

if __name__ == '__main__':

# app.__call__()

app.run(debug=True)

class TestForm(Form):

name = html5.EmailField(label='用户名')

pwd = simple.StringField(label='密码')

class Meta:

# -- CSRF

# 是否自动生成CSRF标签

csrf = True

# 生成CSRF标签name

csrf_field_name = 'csrf_token'

# 自动生成标签的值,加密用的csrf_secret

csrf_secret = 'xxxxxx'

# 自动生成标签的值,加密用的csrf_context

csrf_context = lambda x: request.url

# 生成和比较csrf标签

csrf_class = MyCSRF

# -- i18n

# 是否支持本地化

# locales = False

locales = ('zh', 'en')

# 是否对本地化进行缓存

cache_translations = True

# 保存本地化缓存信息的字段

translations_cache = {}

Flask-Session:

#!/usr/bin/env python

# -*- coding:utf-8 -

import redis

from flask import Flask, session

from flask_session import Session

app = Flask(__name__)

app.debug = True

app.secret_key = 'xxxx'

app.config['SESSION_TYPE'] = 'redis'  # session类型为redis

app.config['SESSION_PERMANENT'] = False  # 如果设置为True,则关闭浏览器session就失效。

app.config['SESSION_USE_SIGNER'] = False  # 是否对发送到浏览器上session的cookie值进行加密

app.config['SESSION_KEY_PREFIX'] = 'session:'  # 保存到session中的值的前缀

app.config['SESSION_REDIS'] = redis.Redis(host='127.0.0.1', port='6379', password='123123')  # 用于连接redis的配置

Session(app)

@app.route('/index')

def index():

session['k1'] = 'v1'

return 'xx'

if __name__ == '__main__':

app.run()

Flask-Script:

首先,创建一个Python模板运行命令脚本,可起名为manager.py;

在该文件中,必须有一个Manager实例,Manager类追踪所有在命令行中调用的命令和处理过程的调用运行情况;

Manager只有一个参数——Flask实例,也可以是一个函数或其他的返回Flask实例;

调用manager.run()启动Manager实例接收命令行中的命令;

from flask_script import Manager

from debug import app

manager = Manager(app)

@manager.command

def hello():

'hello world'

print 'hello world'

if __name__ == '__main__':

manager.run()

python manager.py hello

from flask_script import Manager

from debug import app

manager = Manager(app)

@manager.option('-n', '--name', dest='name', help='Your name', default='world')

#命令既可以用-n,也可以用--name,dest="name"用户输入的命令的名字作为参数传给了函数中的name

@manager.option('-u', '--url', dest='url', default='www.csdn.com')

#命令既可以用-u,也可以用--url,dest="url"用户输入的命令的url作为参数传给了函数中的url

def hello(name, url):

'hello world or hello <setting name>'

print 'hello', name

print url

if __name__ == '__main__':

manager.run()

运行结果:

python manager.py hello

>hello world

>www.csdn.com

python manager.py hello -n sissiy -u www.sissiy.com

> hello sissiy

>www.sissiy.com

WTForm的更多相关文章

  1. flask + wtform + google storage

    项目需要使用 flask 上传.下载文件到 google storage 上, 搜了一圈没有能直接结合 wtform 使用的插件,所以动手造了个轮子. 只实现了基本的上传,下载的功能,后续可能会完善预 ...

  2. 【Flask】 WTForm表单编程

    WTForm表单编程 在网页中,为了和用户进行信息交互总是不得不出现一些表单.flask设计了WTForm表单库来使flask可以更加简便地管理操作表单数据.WTForm中最重要的几个概念如下: Fo ...

  3. flask之wtform与flask-session组件

    1.wtform from flask import Flask, render_template, request, redirect from wtforms import Form from w ...

  4. 仿照wtform自定义Form组件

    仿照wtforms自定义Form组件 1.wtforms 点击查看源码分析及使用方法 2.自定义Form组件 #!usr/bin/env python # -*- coding:utf-8 -*- f ...

  5. Flask wtform组件

    Wtforms简介 WTForms是一个支持多个web框架的form组件 主要能够帮助我们生成html标签 对数据进行验证 安装 pip install wtforms Wtforms的使用 这里借助 ...

  6. wtform 表单示例

    用户注册 from flask import Flask, render_template, request, redirect from wtforms import Form from wtfor ...

  7. Flask WTForm disable choice field

    Flask disable choice field ChoiceField = { render_kw={'disabled':''} } form.my_field.render_kw = {'d ...

  8. global name 'validate_on_submit' is not defined错误

    原因就是validate_on_submit()方法是属于form的方法我使用的时候忘了form. 还有一个比较重要的是validate_on_submit()方法是wtf特有的而wtform是没有这 ...

  9. wtforms 使用

    wtforms是一个表单模板库, 下面以修改密码表单为例简单说明其用法. 我们可以用python代码定义form的基本元素, 比如用户名/邮箱, 并给定各个元素的validation条件. 然后在re ...

随机推荐

  1. java 基础 03 运算符 分支结构 循环结构

    今天内容: (1)运算符 (2)分支结构 (3)循环结构 1运算符 1.1赋值运算符 (1)简单赋值 = 表示赋值运算符,用于将=右边的数据赋值给=左边的变量来覆盖原来的数值. 笔试题: ia == ...

  2. Django组件:forms组件(简易版)

    一.校验字段功能 1.模型:models.py class UserInfo(models.Model): name=models.CharField(max_length=32) pwd=model ...

  3. ios微信浏览器音乐自动播放

    setTimeout(function(){ //一般情况下,这样就可以自动播放了,但是一些奇葩iPhone机不可以 document.getElementById('bgmedia').play() ...

  4. python 学习之FAQ:find 与 find_all 使用

      FAQ记录   1. 错误源码 错误源码如下 def fillUnivList(_html,_ulist): soup =BeautifulSoup(_html,'html.parser') fo ...

  5. 巧用netsh命令实现端口转发(端口映射)不求人

    好处:即时生效,随意修改删除,不影响其他ip映射 记事本保存为bat格式批量添加后,并查看映射: netsh interface portproxy add v4tov4 listenport=701 ...

  6. 面试官:自己搭建过vue开发环境吗?

    开篇 前段时间,看到群里一些小伙伴面试的时候被面试官问到这类题目.平时大家开发vue项目的时候,相信大部分人都是使用 vue-cli脚手架生成的项目架构,然后 npm run install 安装依赖 ...

  7. Python开发第二篇

    运算符 1.算术运算符 % 取余运算符,返回余数 ** 幂运算符 //返回商的整数部分 2.逻辑运算符 and  与运算符 a and b 如果a为False是,表达式为False,如果a为True返 ...

  8. ShopNC B2B2C多用户商城网站系统源码

    直接正常安装就行哦 注意有服务器的安装可以更下安装时间的长度 也就是说进行跳转的 如果时间太少 这样会安装不成 数据导入不完成 所以就会安装不成功安装好后打开data\config\config.in ...

  9. 高级vim 配置

    [root@chenbj ~]# pwd /root [root@chenbj ~]# cat .vimrc set nocompatible set pastetoggle=<F9> s ...

  10. python_21_copy

    import copy person=['name',['saving',100]] #3种浅copy方式 p1=copy.copy(person) p2=person[:] p3=list(pers ...