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. Struts2初级篇(HelloWorld)

    Struts2的工作流程: 从一个高水平角度看,Struts2 是一个MVC拉动的(或MVC2)框架,Struts2 的模型-视图-控制器模式是通过以下五个核心部分进行实现的: 操作(Actions) ...

  2. pscp no such file or directory

    背景:在WINDOWS10 上传一个文件 到 Centos 7中 工具:pscp 用法: pscp.exe -C e:\tinyfox\site\wwwroot\cdms\projecttemplat ...

  3. html便民查询各个工具类实例代码分享(支持pc和移动端)

    1.手机号码查询 <iframe id="api_iframe_51240" name="api_iframe_51240" src="&quo ...

  4. php编码转换相关

    iconv (PHP 4 >= 4.0.5, PHP 5, PHP 7) iconv — 字符串按要求的字符编码来转换 string iconv ( string $in_charset , s ...

  5. php生成纯数字、字母数字、图片、纯汉字的随机数验证码

    现在讲开始通过PHP生成各种验证码旅途,新手要开车了,请刷卡! 首先,我们开始先生成一个放验证码的背景图片 注:没有Imagejpg()这个函数,只有imagepng()函数 imagecreatet ...

  6. C# 字符串转组件名、变量名

    字符串转组件名 (Controls["button1"] as Button).Text = "Hello";//单独组件 (Controls[].Contro ...

  7. jquery实现加载更多效果

    情况是当滑动条滑动到最底部的时候,数据显示出一部分的更多 思路:获取到浏览器屏幕的高度client,文档的高度h和滑动距离顶部的距离scroll,当h<=client+scroll的时候就是滑动 ...

  8. HDU1075 字典树 + 字符串映射

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1075 ,字典树的字符串映射. 题意是给你每个火星文单词对应的英语,然后让你把一篇火星文文章给翻译成英语 ...

  9. python 补缺收集

    [http://www.cnblogs.com/happyframework/p/3255962.html] 1. 高效code 与 不常用的函数用法: #带索引的遍历 , )): print(ind ...

  10. linux怎么进home目录下

    可以使用cd命令,cd命令的功能是切换到指定的目录: 命令格式:cd [目录名] 有几个符号作为目录名有特殊的含义: “/”代表根目录.“..”代表上一级目录.“~”代表HOME目录.“-”代表前一目 ...