摘要:表单一原生表单原生表单用户名请输入用户名密码请输入密码提交接收表单的数据提交过来了将俩个路由地址合并为同一个二使用表单扩展库作用是一个用于表单处理的扩展库提供表单的校验的功能使用字段类型字段名称字段类型普通文本字段密码框提交按钮多行文本
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")
#接收表单的数据
@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和 数据的正确性 如果都正确则为真
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 %}
图片
{{ wtf.quick_form(form,action="",method="") }}
{% endblock %}
自定义表单验证器
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="内容为6-20个长度"),DataRequired(message="内容不能为空")],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-文件上传与邮件发送
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/41840.html
摘要:每天的内容跑起来模板引擎表单文件上传邮件发送一框架的简介模型负责数据的操作视图负责数据的展示控制器控制你的的操作以及视图模板的渲染在中叫做模型负责数据的操作控制你的的操作以及视图模板的渲染业务逻辑的操作模板负责数据的展示二架构三概念是 flask 每天的内容 flask跑起来 模板引擎 flask表单 文件上传邮件发送 flask-sqlalchemy 一、web框架的简介 M ...
摘要:文件上传邮件发送一原生文件上传修改头像提交文件上传的视图函数有文件上传了拿到文件名称图片上传保存的路径使用和渲染文件上传自定义一个文件上传的表单类修改头像文件不能为空该文件类型不允许上传提交生成随机的图片名称获取图片大小设置尺寸当前缩放 文件上传邮件发送 一、原生文件上传 form.html 修改头像 manage.py...
摘要:和都是很好用的插件,然而当它们结合到一起后,就不是那么美妙了。当然了写一个完整的扩展还是很麻烦的。可以看官方扩展的源码。。。 Flask-WTF和Flask-SQLAlchemy都是很好用的插件,然而当它们结合到一起后,就不是那么美妙了。 问题的提出 在models.py中定义了一个Article、Category和Tag类: class Article(db.Model): ...
阅读 3668·2021-11-10 11:36
阅读 3640·2021-10-13 09:40
阅读 7884·2021-09-26 09:46
阅读 948·2019-08-30 15:55
阅读 1664·2019-08-30 15:53
阅读 1884·2019-08-29 13:55
阅读 3263·2019-08-29 12:46
阅读 3521·2019-08-29 12:34