写点什么

Python 进阶 (五十三)Flask Web 开发实现将表单渲染成 HTML

  • 2022-11-19
    上海
  • 本文字数:1046 字

    阅读完需:约 3 分钟

Python进阶(五十三)Flask Web开发实现将表单渲染成HTML

一、前言

在利用 Flask 进行 Python Web 开发时,页面中的wtf.quick_form(form)函数中的参数 form 是如何与视图函数中的 form 变量关联起来的?即 Flask 是如何将表单渲染成 HTML 的?下面以实例的形式进行问题求解。


在视图函数 views.py 中:



将相应的表单类实例作为参数传递给模版。


相应的 LoginForm()定义在 forms.py 中,定义如下:


# -*- coding:utf-8 -*-
from flask_wtf import Formfrom wtforms import StringField, PasswordField, BooleanField, SubmitFieldfrom wtforms.validators import Required, Length, Email, Regexp, EqualTo, DataRequired
# 用户登录表单class LoginForm(Form): uname = StringField(u'用户名:', validators=[ DataRequired(), Length(1,64), '^[A-Za-z][A-Za-z0-9_.]*$', 0, u'用户名必须由字母、数字、下划线或 . 组成']) pwd = PasswordField(u'密码:', validators=[DataRequired()]) remember_me = BooleanField(u'记住我?') submit = SubmitField(u'登录')
复制代码


注意:在执行以上代码的过程中,会出现 Wraning 提示:‘FlaskWTFDeprecationWarning: "flask_wtf.Form" has been renamed to "FlaskForm" and will be removed in 1.0.


针对该问题,查看作者声明,将 Form 类重命名为 FlaskForm,这样导入就没问题了。


from flask_wtf import FlaskForm
复制代码


相应的类中的参数也需要改为 FlaskForm。


html 模版内容如下:


{% extends "base_login.html" %}{% import "bootstrap/wtf.html" as wtf %}
<!--具体内容-->{% block content %} {{ super() }}
{% for message in get_flashed_messages() %} <div class="alert alert-warning col-md-4 col-md-offset-4 col-sm-6 col-sm-offset-3"> <button type="button" class="close" data-dismiss="alter">×</button> <!--<div class="alert-info">{{message}}</div>--> {{message}} </div> {% endfor %}
{{ wtf.quick_form(form) }}{% endblock content %}
复制代码


另外,在调试过程中,曾经出现过预料之外的模版渲染情况,即生成的 Web 表单并未在表单模版中渲染成功。经过代码检查校验,发现是由于基模版与继承模版出现标签不匹配和匹配错误所造成的。

二、经验教训

在定义基模版时应确保文档的结构完整,并予以继承模版适当的继承空间。


经过修改基模版与继承模版,模版可以正常渲染。页面如下图所示:


三、拓展阅读

Flask Web开发:基于Python的Web应用开发实战


Learning Python, 5th Edition

发布于: 刚刚阅读数: 3
用户头像

No Silver Bullet 2021-07-09 加入

岂曰无衣 与子同袍

评论

发布
暂无评论
Python进阶(五十三)Flask Web开发实现将表单渲染成HTML_Python_No Silver Bullet_InfoQ写作社区