Flask-WTF表单

Web表单

  • web表单是web应用程序的基本功能。
  • 它是HTML页面中负责数据采集的部件。表单有三个部分组成:表单标签、表单域、表单按钮。表单允许用户输入数据,负责HTML页面数据采集,通过表单将用户输入的数据提交给服务器。
  • 在Flask中,为了处理web表单,我们一般使用Flask-WTF扩展,它封装了WTForms,并且它有验证表单数据的功能

WTForms支持的HTML标准字段

Flask-WTF表单_第1张图片

WTForms常用验证函数

Flask-WTF表单_第2张图片
使用Flask-WTF需要配置参数SECRET_KEY。

CSRF_ENABLED是为了CSRF(跨站请求伪造)保护。 SECRET_KEY用来生成加密令牌,当CSRF激活的时候,该设置会根据设置的密匙生成加密令牌。

使用普通方式实现表单

在HTML页面中直接写form表单:

<form method="post">
    <label>用户名:</label><input type="text" name="username"><br>
    <label>密码:</label><input type="password" name="password"><br>
    <label>确认密码:</label><input type="password" name="password1"><br>
    <input type="submit" value="提交"><br>
    {
     % for message in get_flashed_messages() %}
        {
     {
      message }}
    {
     % endfor %}
</form>

视图函数中获取表单数据:

from flask import Flask, render_template, request, flash
# 导入wtf扩展的表单类
from flask_wtf import FlaskForm
# 导入自定义表单需要的字段
from wtforms import StringField, PasswordField, SubmitField
from wtforms.validators import DataRequired, EqualTo

app = Flask(__name__)
app.secret_key = 'snadjna'


# 需要有get和post请求
@app.route('/', methods=['GET', 'POST'])
def index():
    # 判断请求方式
    if request.method == 'POST':
        # 获取请求的参数
        username = request.form.get('username')
        password = request.form.get('password')
        password1 = request.form.get('password1')
        # 判断参数是否填写
        if not all([username, password1, password]):
            # print('参数不完善')
            flash(u'参数不完善')
        # 密码与确认密码一致
        elif password != password1:
            flash(u'密码不一致')
        else:
            print('OK')
            return 'success'

    return render_template('day03.html')


if __name__ == '__main__':
    app.run(debug=True)


使用Flask-WTF实现表单

模板页面:

<form method="post">
    {
     #  不写这个会报没有CSRF_Token  #}
    {
     {
      form.csrf_token() }}

    {
     {
      form.username.label }}{
     {
      form.username }} <br>
    {
     {
      form.password.label }}{
     {
      form.password }} <br>
    {
     {
      form.password1.label }}{
     {
      form.password1 }} <br>
    {
     {
      form.submit }}

</form>

视图函数:

class LoginForm(FlaskForm):
    username = StringField(u'用户名:', validators=[DataRequired()])
    password = PasswordField(u'密码:', validators=[DataRequired()])
    password1 = PasswordField(u'确认密码:', validators=[DataRequired(), EqualTo('password', '密码填入的不一致')])
    submit = SubmitField('提交')


@app.route('/form', methods=['GET', 'POST'])
def login():
    login_form = LoginForm()

    # 1.判断请求方式
    if request.method == 'POST':
        # 2.获取请求的参数
        username = request.form.get('username')
        password = request.form.get('password')
        password1 = request.form.get('password1')
        print(username, password, password1)
        # 3.验证参数,WTF可以一句话就实现所有的校验
        if login_form.validate_on_submit():
            return 'success'
        else:
            flash(u'参数有误')
    return render_template('day03.html', form=login_form)

请求和 响应

"""
一个web网站,请求响应是最频繁
常用的请求属性:
1.request.scheme : 获取请求协议
2.request.method : 获取本次请求的请求方式(GET / POST)
3.request.args : 获取以get请求方式提交的数据
4.request.form : 获取以post请求方式提交的数据
5.request.cookies:获取cookies中的相关信息
6.request.headers:获取请求信息头的相关信息
7.request.files:获取上传的文件
8.request.path:获取请求的资源具体路径(不带参数)
9.request.full_path:获取完整的请求资源具体路径(带参数)
10.request.url: 获取完整的请求地址,从协议开始
11.request.files 获取上传的文件用(save进行保存)
里面要注意低是arequest.args,request.form ,request.files 的返回值都是字典。
响应就是服务器响应给客户端的内容
响应的都是字符串, html文件也是字符串
"""

你可能感兴趣的:(flask)