zoukankan      html  css  js  c++  java
  • WTForm

    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

  • 相关阅读:
    SAP PI 如何实现消息定义查询
    EWM与ERP交互程序
    ITS Mobile Template interpretation failed. Template does not exist
    SAP Material Flow System (MFS) 物料流系统简介
    SAP EWM Table list
    EWM RF 屏幕增强
    SAP EWM TCODE list
    SAP扩展仓库管理(SAPEWM)在线研讨会笔记
    ERP与EWM集成配置ERP端组织架构(二)
    EWM RF(Radio Frequency)简介
  • 原文地址:https://www.cnblogs.com/mihon/p/8981018.html
Copyright © 2011-2022 走看看