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. JQuery初识(三 )

    一丶JQuery的文档操作 1.插入操作: 父元素.append(子元素) 解释:追加某元素,在父元素中添加新的子元素.子元素可以为:stirng|element(js对象)|JQuery元素 var ...

  2. nodejs的会话总结

    前言: http是一个无状态协议,所以客户端每次发出请求时,下一次请求就无法得知上一次请求所包含的状态数据,那么如何能把一个用户的状态数据关联起来?1.cookie 一开始,人们采用cookie这门技 ...

  3. HTML 笔记之 HTML 元素的概念

    HTML 不是编程语言,它是一种标记语言 HTML 中常见的几个名词是 元素. 标签(开始标签和结束标签). 属性. 元素内容 这篇文章将要介绍的是 HTML 元素的概念 元素的概念 例子: < ...

  4. Eucalyptus镜像管理

    1.前言 Elastic Utility Computing Architecture for Linking Your Programs To Useful Systems (Eucalyptus) ...

  5. SQLServer从其他表获取的数据更新该表的一部分

    在网上常见的是update  a  set  username  =  username  FROM b  on a.userid=b.userid,该更新语句是对a表中所有行进行更新.如果只更新一部 ...

  6. 修复SQL中的孤立账户

    EXEC sys.sp_change_users_login 'AUTO_FIX','登录名',NULL,'登录密码'

  7. [VC]VC实现开机自动运行程序

    有时候,我们需要在计算机启动的时候就启动某些程序,不要人干预.这里,提供一种让程序开机自动运行的方法.见下面代码: BOOL CXXX::SetAutoRun(CString strPath) { C ...

  8. World Wind Java开发之十一——加载热点信息(仿Google Earth)(转)

    在GE的图层中有一个照片图层,在浏览时可以看到各地的一些图片,我们称之为热点信息,如下图所示: 再来看下本文的实现效果: 效果是不是很像呢,其实实现这个很简单,参照examples中的Balloons ...

  9. python_62_装饰器5

    import time def timer(func): #timer(test1) func=test1 def deco(*args,**kwargs): start_time=time.time ...

  10. spring mvc + swagger 配置

    首先,添加mvc框架(略)以及Swagger Maven依赖: <dependency> <groupId>io.springfox</groupId> <a ...