日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Flask 【第七篇】Flask中的wtforms使用

發布時間:2023/12/9 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Flask 【第七篇】Flask中的wtforms使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、簡單介紹flask中的wtforms

WTForms是一個支持多個web框架的form組件,主要用于對用戶請求數據進行驗證。

安裝:

pip3 install wtforms

二、簡單使用wtforms組件

1、用戶登錄

具體代碼:

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 = messagedef __call__(self, form, field):print(field.data,"用戶輸入的信息")if field.data == "haiyan":return Noneraise 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"})@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)

login.html

<body> <form action="" method="post" novalidate><p>{{ form.name.label }} {{ form.name }} {{ form.name.errors.0 }}</p><p>{{ form.pwd.label }} {{ form.pwd }} {{ form.pwd.errors.0 }}</p><input type="submit" value="提交"><!--用戶名:<input type="text">--><!--密碼:<input type="password">--><!--<input type="submit" value="提交">--> </form> </body>

2、用戶注冊

from flask import Flask,render_template,redirect,request 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 widgetsapp = Flask(__name__,template_folder="templates") app.debug = True
=======================simple=========================== class RegisterForm(Form):name = simple.StringField(label="用戶名",validators=[validators.DataRequired()],widget=widgets.TextInput(),render_kw={"class":"form-control"},default="haiyan")pwd = simple.PasswordField(label="密碼",validators=[validators.DataRequired(message="密碼不能為空")])pwd_confim = simple.PasswordField(label="重復密碼",validators=[validators.DataRequired(message='重復密碼不能為空.'),validators.EqualTo('pwd',message="兩次密碼不一致")],widget=widgets.PasswordInput(),render_kw={'class': 'form-control'})

  ========================html5============================email = html5.EmailField( #注意這里用的是html5.EmailFieldlabel='郵箱',validators=[validators.DataRequired(message='郵箱不能為空.'),validators.Email(message='郵箱格式錯誤')],widget=widgets.TextInput(input_type='email'),render_kw={'class': 'form-control'})

  ===================以下是用core來調用的=======================gender = core.RadioField(label="性別",choices=((1,"男"),(1,"女"),),coerce=int #限制是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): #這里的self是一個RegisterForm對象'''重寫__init__方法'''super(RegisterForm,self).__init__(*args, **kwargs) #繼承父類的init方法self.favor.choices =((1, '籃球'), (2, '足球'), (3, '羽毛球')) #吧RegisterForm這個類里面的favor重新賦值def validate_pwd_confim(self,field,):'''自定義pwd_config字段規則,例:與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}) #默認是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()

register.html

<body> <h1>用戶注冊</h1> <form method="post" novalidate style="padding:0 50px">{% for item in form %}<p>{{item.label}}: {{item}} {{item.errors[0] }}</p>{% endfor %}<input type="submit" value="提交"> </form> </body>

?3、meta

#!/usr/bin/env python # -*- coding:utf-8 -*- from flask import Flask, render_template, request, redirect, session from wtforms import Form from wtforms.csrf.core import CSRF from wtforms.fields import core from wtforms.fields import html5 from wtforms.fields import simple from wtforms import validators from wtforms import widgets from hashlib import md5app = Flask(__name__, template_folder='templates') app.debug = Trueclass MyCSRF(CSRF):"""Generate a CSRF token based on the user's IP. I am probably not verysecure, so don't use me."""def setup_form(self, form):self.csrf_context = form.meta.csrf_context()self.csrf_secret = form.meta.csrf_secretreturn super(MyCSRF, self).setup_form(form)def generate_csrf_token(self, csrf_token):gid = self.csrf_secret + self.csrf_contexttoken = md5(gid.encode('utf-8')).hexdigest()return tokendef validate_csrf_token(self, form, field):print(field.data, field.current_token)if field.data != field.current_token:raise ValueError('Invalid CSRF')class TestForm(Form):name = html5.EmailField(label='用戶名')pwd = simple.StringField(label='密碼')class Meta:# -- CSRF# 是否自動生成CSRF標簽csrf = True# 生成CSRF標簽namecsrf_field_name = 'csrf_token'# 自動生成標簽的值,加密用的csrf_secretcsrf_secret = 'xxxxxx'# 自動生成標簽的值,加密用的csrf_contextcsrf_context = lambda x: request.url# 生成和比較csrf標簽csrf_class = MyCSRF# -- i18n# 是否支持本地化# locales = Falselocales = ('zh', 'en')# 是否對本地化進行緩存cache_translations = True# 保存本地化緩存信息的字段translations_cache = {}@app.route('/index/', methods=['GET', 'POST']) def index():if request.method == 'GET':form = TestForm()else:form = TestForm(formdata=request.form)if form.validate():print(form)return render_template('index.html', form=form)if __name__ == '__main__':app.run()

?

?

轉載于:https://www.cnblogs.com/xiaohema/p/8456741.html

總結

以上是生活随笔為你收集整理的Flask 【第七篇】Flask中的wtforms使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。