flask之wtform与flask-session组件

TAMAYURA TAMAYURA     2022-10-09     306

关键词:

1.wtform

from flask import Flask, render_template, request, redirect

from wtforms import Form

from wtforms.fields import core
from wtforms.fields import html5
from wtforms.fields import simple

from wtforms import validators
from wtforms import widgets

app = Flask(__name__, template_folder=templates)
app.debug = True

class MyValidator(object):
    def __init__(self,message):
        self.message = message
    def __call__(self, form, field):
        print(field.data)
        if field.data == 王浩:
            return None
        raise validators.StopValidation(self.message)


class LoginForm(Form):
    name = simple.StringField(
        label=用户名,
        validators=[
            # MyValidator(message=‘用户名必须等于王浩‘)
            validators.DataRequired(message=用户名不能为空.),
            validators.Length(min=6, max=18, message=用户名长度必须大于%(min)d且小于%(max)d)
        ],
        widget=widgets.TextInput(),
        render_kw={class: form-control}
    )
    pwd = simple.PasswordField(
        label=密码,
        validators=[
            validators.DataRequired(message=密码不能为空.),
            validators.Length(min=8, message=用户名长度必须大于%(min)d),
            validators.Regexp(regex="^(?=.*[a-z])(?=.*[A-Z])(?=.*d)(?=.*[[email protected]$!%*?&])[A-Za-z[email protected]$!%*?&]{8,}",
                              message=密码至少8个字符,至少1个大写字母,1个小写字母,1个数字和1个特殊字符)
        ],
        widget=widgets.PasswordInput(),
        render_kw={class: form-control}
    )


@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(用户提交数据通过格式验证,提交的值为:, form.data)
        else:
            print(form.errors)
        return render_template(login.html, form=form)





# ########################### 用户注册 ##########################
class RegisterForm(Form):
    name = simple.StringField(
        label=用户名,
        validators=[
            validators.DataRequired()
        ],
        widget=widgets.TextInput(),
        render_kw={class: form-control},
        default=alex
    )

    pwd = simple.PasswordField(
        label=密码,
        validators=[
            validators.DataRequired(message=密码不能为空.)
        ],
        widget=widgets.PasswordInput(),
        render_kw={class: form-control}
    )

    pwd_confirm = simple.PasswordField(
        label=重复密码,
        validators=[
            validators.DataRequired(message=重复密码不能为空.),
            validators.EqualTo(pwd, message="两次密码输入不一致")
        ],
        widget=widgets.PasswordInput(),
        render_kw={class: form-control}
    )

    email = html5.EmailField(
        label=邮箱,
        validators=[
            validators.DataRequired(message=邮箱不能为空.),
            validators.Email(message=邮箱格式错误)
        ],
        widget=widgets.TextInput(input_type=email),
        render_kw={class: form-control}
    )

    gender = core.RadioField(
        label=性别,
        choices=(
            (1, ),
            (2, ),
        ),
        coerce=int
    )
    city = core.SelectField(
        label=城市,
        choices=(
            (bj, 北京),
            (sh, 上海),
        )
    )

    hobby = core.SelectMultipleField(
        label=爱好,
        choices=(
            (1, 篮球),
            (2, 足球),
        ),
        coerce=int
    )

    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):
        super(RegisterForm, self).__init__(*args, **kwargs)
        self.favor.choices = ((1, 篮球), (2, 足球), (3, 羽毛球))

    def validate_pwd_confirm(self, field):
        """
        自定义pwd_confirm字段规则,例:与pwd字段是否一致
        :param field: 
        :return: 
        """
        # 最开始初始化时,self.data中已经有所有的值

        if field.data != self.data[pwd]:
            # raise validators.ValidationError("密码不一致") # 继续后续验证
            raise validators.StopValidation("密码不一致")  # 不再继续后续验证


@app.route(/register, methods=[GET, POST])
def register():
    if request.method == GET:
        # 设置默认值
        form = RegisterForm(data={gender: 1})
        return render_template(register.html, form=form)
    else:
        form = RegisterForm(formdata=request.form)
        if form.validate():
            print(用户提交数据通过格式验证,提交的值为:, form.data)
        else:
            print(form.errors)
        return render_template(register.html, form=form)


if __name__ == __main__:
    app.run()

2.flask-session

#!/usr/bin/env python
# -*- coding:utf-8 -
import redis
from flask import Flask,current_app,session
from flask_session import Session
app = Flask(__name__)
app.debug = True
app.secret_key = xxxx

# 为Flask-session组件提供的配置
# app.config[‘SESSION_TYPE‘] = ‘redis‘  # session类型为redis
# app.config[‘SESSION_REDIS‘] = redis.Redis(host=‘127.0.0.1‘, port=‘6379‘, password=‘123123‘)  # 用于连接redis的配置
# app.config[‘SESSION_KEY_PREFIX‘] = ‘session:‘  # 保存到session中的值的前缀
# app.config[‘SESSION_PERMANENT‘] = False  # 如果设置为True,则关闭浏览器session就失效。
# app.config[‘SESSION_USE_SIGNER‘] = False  # 是否对发送到浏览器上 session:cookie值进行加密
# Session(app)
#
# import memcache
# app.config[‘SESSION_TYPE‘] = ‘memcached‘ # session类型为redis
# app.config[‘SESSION_PERMANENT‘] = True # 如果设置为True,则关闭浏览器session就失效。
# app.config[‘SESSION_USE_SIGNER‘] = False # 是否对发送到浏览器上session的cookie值进行加密
# app.config[‘SESSION_KEY_PREFIX‘] = ‘session:‘ # 保存到session中的值的前缀
# app.config[‘SESSION_MEMCACHED‘] = memcache.Client([‘10.211.55.4:12000‘])
# Session(app)

app.config[SESSION_TYPE] = filesystem  # session类型为redis
app.config[SESSION_FILE_DIR] = rC:UsersAdministratorPycharmProjectsday1212.flask-session组件  # session类型为redis
app.config[SESSION_FILE_THRESHOLD] = 500  # 存储session的个数如果大于这个值时,就要开始进行删除了
app.config[SESSION_FILE_MODE] = 384  # 文件权限类型

app.config[SESSION_PERMANENT] = True  # 如果设置为True,则关闭浏览器session就失效。
app.config[SESSION_USE_SIGNER] = False  # 是否对发送到浏览器上session的cookie值进行加密
app.config[SESSION_KEY_PREFIX] = session:  # 保存到session中的值的前缀

Session(app)




@app.route(/index)
def index():
    session[k1] = v1
    return xx


if __name__ == __main__:
    app.run()

 

flask之wtforms验证

...供了前端表单自动生成和前端表单提交数据验证的功能。WTForms支持的HTML标准字段字段对象说明StringField文本字段TextAreaField多行文本字段PasswordField密码文本字段HiddenField隐藏文本字段DateField文本字段,值为datetime.date格式 查看详情

flask之wtforms

 简介WTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进行验证。安装:1pip3installwtforms用户登录注册示例1.用户登录当用户登录时候,需要对用户提交的用户名和密码进行多种格式校验。如:用户不能为空;... 查看详情

flask之wtforms源码分析

一、wtforms源码流程1、实例化流程分析1#源码流程21.执行type的__call__方法,读取字段到静态字段cls._unbound_fields中;meta类读取到cls._wtforms_meta中32.执行构造方法45a.循环cls._unbound_fields中的字段,并执行字段的bind方法,然后将返回值... 查看详情

当我将 POST 与 Flask 一起使用时,我遇到了 wtforms 选择字段的问题

】当我将POST与Flask一起使用时,我遇到了wtforms选择字段的问题【英文标题】:I\'mhavingproblemswithwtformsselectfieldswheniuseaPOSTwithFlask【发布时间】:2013-04-0222:31:44【问题描述】:我对wtforms和烧瓶还很陌生,并且在使用selectfields时遇到... 查看详情

flask框架:运用wtforms实现用户注册(代码片段)

WTForms是用于web开发的灵活的表单验证和呈现库,它可以与您选择的任何web框架和模板引擎一起工作,并支持数据验证、CSRF保护、国际化等,运用WTForms框架并配合Flask可实现一个带有基本表单验证功能的用户注册与登录页面,经... 查看详情

使用 WTForms 字段列表

】使用WTForms字段列表【英文标题】:WorkingwithWTFormsFieldList【发布时间】:2011-08-2510:17:22【问题描述】:我通过Flask.WTF扩展将WTForms与Flask一起使用。不过,这个问题不是Flask特有的。WTForms包含一个FieldListfieldforlistsoffields。我想用... 查看详情

动态选择 WTForms Flask SelectField

】动态选择WTFormsFlaskSelectField【英文标题】:DynamicchoicesWTFormsFlaskSelectField【发布时间】:2018-04-0522:01:45【问题描述】:我正在尝试使用FlaskForms将userID变量传递给WTForms。首先,我将展示可以正常工作的代码,然后是我需要修改的... 查看详情

6---flask-wtforms(代码片段)

6、Flask-WTForms Flask-WTF是简化了WTForms操作的一个第三方库。WTForms表单的两个主要功能是验证用户提交数据的合法性以及渲染模板。还有其它一些功能:CSRF保护,文件上传等。安装方法:pipinstallflask-wtf1.1.WTForms简单验证fromflaski... 查看详情

Flask-WTForms 在我的项目目录中找不到 WTForms

】Flask-WTForms在我的项目目录中找不到WTForms【英文标题】:Flask-WTFormscan\'tfindWTFormsinmyprojectdirectory【发布时间】:2012-07-2708:38:54【问题描述】:这是我在***上的第一篇文章,大家好。我正在做博客应用程序来学习Python和Flask,我想... 查看详情

flask第七篇flask中的wtforms使用

一、简单介绍flask中的wtformsWTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进行验证。安装:pip3installwtforms二、简单使用wtforms组件1、用户登录具体代码:fromflaskimportFlask,render_template,request,redirectfromwtforms.fieldsimp... 查看详情

flask中的wtforms使用(代码片段)

一、简单介绍flask中的wtformsWTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进行验证。安装:pip3installwtforms二、简单使用wtforms组件1、用户登录具体代码:fromflaskimportFlask,render_template,request,redirectfromwtforms.fieldsimp... 查看详情

flask-flask-script|多app应用|wtforms

flask-script用于实现类似于django中python3manage.pyrunserver...类似的命令安装>:pip3installflask-script使用manage.pyfromflaskimportFlask#1.导入Managerfromflask_scriptimportManager#2.实例化Flask生成对象appapp=Flask(__name__)#3 查看详情

flask-wtforms

what‘sthe WTForms  WTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进行验证。其作用是可以为轻量级的框架提供类似Django的form的功能。安装:pip3installwtforms 源码流程分析实例化流程分析#源码流程1.执行typ... 查看详情

wtformsinflask(wtforms在flask中的应用)(代码片段)

WTFormsWTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进行验证。安装wtforms:pip3/pipinstallwtforms 用户登录/注册示例项目目录结构flask-wtforms-example│app.py│└─templatesadd_user.htmlindex.htmllogin.htmlregister.htmlusers.html& 查看详情

flask--wtforms(代码片段)

简介WTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进行验证。安装:pip3installwtforms用户登录注册示例1.用户登录当用户登录时候,需要对用户提交的用户名和密码进行多种格式校验。如:用户不能为空;用户... 查看详情

flask:flask-script;多app应用;wtforms;sqlchmy

一. flask-script一.flask-script简介1.什么是flask-script:是一个让你的命令行支持自定义命令的工具,它为Flask程序添加一个命令行解释器。可以让我们的程序从命令行直接执行相应的程序(用于实现类似于django中python3manage.pyrunserver...... 查看详情

flask学习第7篇:flask中的wtforms使用(代码片段)

flask中的wtforms使用一、简单介绍flask中的wtformsWTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进行验证。安装:pip3installwtforms二、简单使用wtforms组件1、用户登录具体代码:fromflaskimportFlask,render_template,request,redir... 查看详情

wtforms快速使用和源码分析(基于flask)

wtforms和django的form组件大同小异,下面给出一个应用举例以便快速查询。开始使用1fromflaskimportFlask,render_template,request,redirect23fromwtformsimportForm45fromwtforms.fieldsimportcore6fromwtforms.fieldsimporthtml57fromwtforms.fie 查看详情