Flask Web 极简教程 - Flask WTF Froms(A 部分)
1。表单
表单主要负责收集页面数据。表单由三个基本组件组成:
- 表单标签:其中包含处理表单数据所使用的 CGI 程序的 URL 以及将数据发送到服务器的方法。
- 表单字段:包括带密码的文本框、隐藏的多行字段、带单选按钮的复选框和文件上传框等。
- 表单按钮:包括提交按钮、重置按钮和通用按钮键;用于将数据传输到服务器上的 CGI 脚本或取消输入。表单按钮还可用于通过定义的处理脚本控制其他处理任务。
常用的表单有注册表单、登录表单、搜索表单等。
在视图函数中获取表单数据有两种方式:
- GET请求提交的表单:request.args.get(' name ', None )
- POST请求提交表单:request.from.get('age', None)
2. WTF Form
WTF Form是一个第三方库,可以通过Python代码生成表单,而Flask-WTF是Flask集成了WTF表单功能的实现。
Flask-WTF 可以实现这些功能,
- 集成了 wtforms。
- 使用 csrf 令牌确保表单安全。
- 全局 CSRF 保护。
- 支持验证码。
- 支持与 Flask-Uploads 一起上传文件。
- 国际一体化。
更多信息请参考Flask-WTF官网。 Flask-WTF 必须安装后才能使用。
pip3 install Flask-WTF
在Pycharm中创建一个新的Flask项目flask-wtf。要使用Flask-WTF,需要在app.py中创建Flask对象后添加以下配置。
# 配置WTF的CSRF,Value可以是任意的字符串
app.config['WTF_CSRF_SECRET_KEY'] = 'abc21231fafae2'
第一个表单模型
在项目文件夹下新建一个form.py文件,专门用来编写表单模型。以登录表单为例,添加一个LoginForm对象并添加其属性。
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField
class LoginForm(FlaskForm):
username = StringField(label='用户名')
password = PasswordField(label='密码')
submit = SubmitField(label='提交')
表单字段常见的核心属性如下
属性名称 | 属性功能 |
---|---|
标签 | 表单表单中的标签标签,如输入框之前的文字描述 |
default | 输入框默认值 |
validators | 表单验证规则 |
widget | 自定义界面视图 |
描述 | 帮助文本 |
在app.py中添加查看功能
from flask import Flask, render_template
from form import LoginForm
@app.route('/form')
def form():
login_form = LoginForm()
# 返回login_form表单模型,在form.html中进行渲染
return render_template('form.html', login_form=login_form)
添加 form.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8"/>
<title>Form</title>
</head>
<body>
<h3>登录</h3>
<form action="">
{# 渲染LoginForm表单模型中username字段的label属性#}
{{ login_form.username.label }}:
{{ login_form.username }} <br>
{{ login_form.password.label }}:
{{ login_form.password }} <br>
{{ login_form.submit }}
</form>
</body>
</html>
模板并启动应用程序。浏览器打开http://127.0.0.1:5000/form
表单显示成功,但输入框为空。您可以在表单模型中传递字段的默认属性。设置默认值。
# 其余代码不变
class LoginForm(FlaskForm):
username = StringField(label='用户名', default='stark')
password = PasswordField(label='密码', default='1231231')
submit = SubmitField(label='提交')
重新访问http://127.0.0.1:5000/form
用户名字段类型为StringField并显示默认值设置,密码为PasswordField类型。虽然设置了默认值,但是无法显示。在表单的用户名和密码输入框中输入信息。 可以看到密码不是以明文形式显示的
表单模型的字段类型
第一种表单模型中使用了两种字段类型,即StringField和PasswordField,这也是可以的在页面上输入密码 以非明文形式显示密码。除了这两种类型之外,还有其他字段类型。
- 文本/字符串相关类型
- StringField,字符串输入
- PasswordField,密码输入
- TextAreaField,长文本输入
- HiddenField,隐藏表单字段
- 数字类型与整数和小数都相关Type
- FloadField,浮点输入
- IntegerField,整数输入
- DecimalField,精确小数输入
- 单选、多选等选择相关类型
- RadioField,单选
- 选择字段,下一个拉单 选择
- 选择多个字段,多重选择下拉列表
- BoolEanfield,勾选
- 日期和时间相关类型
- 日期字段,日期选择
- 日期时间字段,日期和时间选择相关类型
- 文件字段,单选文件
- MultipleFileField,多选文件
- 其他类型
- SubmitField,提交表单按钮
- FieldList,自定义表单选择列表
- FormField,由多个字段组成的自定义选项
Aute ur :黎曼假设
来源:稀土矿块
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。