摘要:表單一原生表單原生表單用戶名請輸入用戶名密碼請輸入密碼提交接收表單的數(shù)據(jù)提交過來了將倆個路由地址合并為同一個二使用表單擴展庫作用是一個用于表單處理的擴展庫提供表單的校驗的功能使用字段類型字段名稱字段類型普通文本字段密碼框提交按鈕多行文本
flask 表單 一、原生表單
form.html
{% extends "common/base.html" %} {% block title %} 原生表單 {% endblock %} {% block pagecontent %} {#{% endblock %}
manage.py
@app.route("/form/") def form(): return render_template("form1.html") #接收表單的數(shù)據(jù) @app.route("/check/",methods=["POST"]) def check(): print(request.form) return "提交過來了"
將倆個路由地址合并為同一個
@app.route("/form/",methods=["GET","POST"]) def form(): if request.method == "POST": print(request.form) return render_template("form1.html")二、使用flask-wtf表單擴展庫
作用: 是一個用于表單處理的擴展庫 提供表單的校驗 csrf的功能
pip install flask-wtf
使用 (1) 字段類型字段名稱 | 字段類型 |
---|---|
StringField | 普通文本字段 |
PasswordField | 密碼框 |
SubmitField | 提交按鈕 |
TextAreaField | 多行文本域 |
HiddenField | 隱藏域 |
DateField | 日期 |
DateTimeField | 日期時間 |
IntegerField | 整形 |
FloatFIeld | 浮點型 |
RadioField | 單選字段 |
SelectField | 下拉 |
FileField | 文件上傳字段 |
BooleanField | 布爾字段 |
驗證器 | 說明 |
---|---|
DataRequired | 必填 |
Length | 長度 min max |
IPAddress | IP地址 |
郵箱 | |
URL | 地址 |
Regexp | 正則匹配 |
EqualTo | 驗證倆個字段值的正確性 |
NumberRange | 輸入值的范圍 min max |
實例
在manage中
from flask import Flask,render_template,request from flask_script import Manager from flask_bootstrap import Bootstrap #導入自定義表單類的基類 from flask_wtf import FlaskForm #導入表單的字段 from wtforms import StringField,PasswordField,SubmitField #導入驗證器 from wtforms.validators import Length,DataRequired app = Flask(__name__) bootstrap = Bootstrap(app) #加密種子 csrf需要使用 app.config["SECRET_KEY"] = "abcdedff" manager = Manager(app) class Login(FlaskForm): username = StringField("用戶名",validators=[Length(min=6,max=12,message="用戶名的長度為6~12為"),DataRequired(message="用戶名不能為空!!!")]) userpass = PasswordField("密碼",validators=[Length(min=6,max=12,message="用戶名的長度為6~12為"),DataRequired(message="密碼不能為空!!!")]) submit = SubmitField("登錄") @app.route("/") def index(): return render_template("index.html") @app.route("/form/",methods=["GET","POST"]) def form(): #將表單類實例化 form = Login() if request.method == "POST": #驗證是否存在正確的csrftoken和 數(shù)據(jù)的正確性 如果都正確則為真 if form.validate_on_submit(): # print(request.form) print(form.username.data) return render_template("form2.html",form=form)在模板中
{% extends "common/base.html" %} {% block title %} 原生表單 {% endblock %} {% block pagecontent %}{% endblock %} 使用 bootstrap渲染表單
{% import "bootstrap/wtf.html" as wtf %} {% block pagecontent %}自定義表單驗證器{% endblock %}圖片{{ wtf.quick_form(form,action="",method="") }}
class Login(FlaskForm): ... def validate_username(self,field): # print(field) if field.data == "zhangsan": # if self.username.data == "zhangsan": raise ValidationError("該用戶已存在")
注意:
validate_ 驗證的字段名稱 為固定格式
所有字段和驗證器方法的使用
class Login(FlaskForm): username = StringField("用戶名",validators=[Length(min=6,max=12,message="用戶名的長度為6~12為"),DataRequired(message="用戶名不能為空!!!")]) userpass = PasswordField("密碼",validators=[Length(min=6,max=12,message="用戶名的長度為6~12為"),DataRequired(message="密碼不能為空!!!"),EqualTo("confirm",message="倆次密碼輸入不一致")]) confirm = PasswordField("確認密碼") info = TextAreaField("個人簡介",validators=[Length(min=6,max=20,message="內(nèi)容為6-20個長度"),DataRequired(message="內(nèi)容不能為空")],render_kw={"style":"resize:none;","placeholder":"請輸入你此刻的感謝..."}) hidde = HiddenField() birth = DateField("出生日期") birth = DateTimeField("出生日期") age = IntegerField("年齡",validators=[NumberRange(min=6,max=99,message="年齡為6~99歲")]) money = FloatField() sex = RadioField(choices=[("w","女"),("m","男")]) address = SelectField(choices=[("1001","北京"),("1002","上海"),("1003","天津")]) file = FileField("文件上傳") argee = BooleanField("請仔細閱讀以上條款") ip = StringField("IPV4",validators=[IPAddress(message="請輸入正確的ip地址")]) url = StringField("url地址",validators=[URL(message="輸入正確的url地址")]) email = StringField("email",validators=[Email(message="請輸入正確的郵箱地址")]) preg = StringField("手機號碼",validators=[Regexp("^[1][3-8][0-9]{9}$",flags=re.I,message="請輸入正確的手機號碼")]) submit = SubmitField("登錄")三、flash 消息的顯示
概述: 當用戶請求 或者有消息的顯示 通過flash,get_flashed_messages 來進行操作
導入
from flask import flash,get_flashed_messages
from flask import flash,get_flashed_messages class Login(FlaskForm): username = StringField("用戶名",validators=[DataRequired(message="用戶名不能為空")]) userpass = PasswordField("密碼",validators=[DataRequired(message="密碼不能為空")]) submit = SubmitField("登錄") @app.route("/form/",methods=["GET","POST"]) def form(): form = Login() if form.validate_on_submit(): if form.username.data == "zhangsan" and form.userpass.data == "123456": flash("登錄成功") return redirect(url_for("index")) else: flash("當前用戶不存在") return render_template("user/login.html",form=form)
使用
{% for message in get_flashed_messages() %}{{ message }}{% endfor %}
flask入門4-文件上傳與郵件發(fā)送
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/41840.html
摘要:每天的內(nèi)容跑起來模板引擎表單文件上傳郵件發(fā)送一框架的簡介模型負責數(shù)據(jù)的操作視圖負責數(shù)據(jù)的展示控制器控制你的的操作以及視圖模板的渲染在中叫做模型負責數(shù)據(jù)的操作控制你的的操作以及視圖模板的渲染業(yè)務邏輯的操作模板負責數(shù)據(jù)的展示二架構(gòu)三概念是 flask 每天的內(nèi)容 flask跑起來 模板引擎 flask表單 文件上傳郵件發(fā)送 flask-sqlalchemy 一、web框架的簡介 M ...
摘要:文件上傳郵件發(fā)送一原生文件上傳修改頭像提交文件上傳的視圖函數(shù)有文件上傳了拿到文件名稱圖片上傳保存的路徑使用和渲染文件上傳自定義一個文件上傳的表單類修改頭像文件不能為空該文件類型不允許上傳提交生成隨機的圖片名稱獲取圖片大小設(shè)置尺寸當前縮放 文件上傳郵件發(fā)送 一、原生文件上傳 form.html 修改頭像 manage.py...
摘要:和都是很好用的插件,然而當它們結(jié)合到一起后,就不是那么美妙了。當然了寫一個完整的擴展還是很麻煩的??梢钥垂俜綌U展的源碼。。。 Flask-WTF和Flask-SQLAlchemy都是很好用的插件,然而當它們結(jié)合到一起后,就不是那么美妙了。 問題的提出 在models.py中定義了一個Article、Category和Tag類: class Article(db.Model): ...
閱讀 3110·2021-11-10 11:36
閱讀 3312·2021-10-13 09:40
閱讀 6051·2021-09-26 09:46
閱讀 662·2019-08-30 15:55
閱讀 1409·2019-08-30 15:53
閱讀 1579·2019-08-29 13:55
閱讀 2997·2019-08-29 12:46
閱讀 3204·2019-08-29 12:34