【flask】使用Flask-WTF处理表单

 我的理解是Flask-WTF与html文件的关系就如同SQLAlchemy与数据库之间的关系

通过python Form类,生成html代码,并在html模板文件中通过{{}}变量的方式引用这些生成的html代码

好处就是可以使用python类管理html的表单,而不需要自己去敲html代码

flask的处理机制:

  • 定义WTForms表单类
  • 输出HTML代码
  • 在模板中渲染表单

实例:

basic.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form method="post">
    {{form.csrf_token}}
    {{form.username.label}}{{form.username}}<br>
    {{form.password.label}}{{form.password}}<br>
    {{form.remember}}{{form.remember.label}}<br>
    {{form.submit}}<br>
</form>
</body>
</html>

forms.py

from flask_wtf import FlaskForm
from wtforms import StringField,PasswordField,BooleanField,SubmitField
from wtforms.validators import DataRequired,Length

class LoginForm(FlaskForm):
    username=StringField(‘Username‘,validators=[DataRequired()])
    password=PasswordField(‘Password‘,validators=[DataRequired(),Length(8,128)])
    remember=BooleanField(‘Remember me‘)
    submit = SubmitField(‘Log in‘)

app.py

from flask import  Flask,render_template
from demo1.form.forms import LoginForm

app = Flask(__name__)
app.secret_key=‘secret string‘

@app.route(‘/basic‘)
def basic():
    form = LoginForm()
    return render_template(‘basic.html‘,form=form)

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

效果: 

 知识扩展:

在创建HTML表单时,我们经常会需要使用HTML<input>元素的其他属性来对字段进行设置。比如添加class属性设置对应的CSS类为字段添加样式;

添加placeholder属性设置占位文本。默认情况下,WTForms输出的字段HTML代码只会包含id和name属性,属性值均为表单类中对应的字段属性名称。

如果要添加额外的属性,通常有两种方法。

1.使用render_kw属性

username = StringField(‘Username‘, render_kw={‘placeholder‘:‘Your Username‘})

这个字段被调用后输出的HTML代码如下所示:

<input type="text" id ="username" name="username" placeholder="Your Username">

2.在调用字段时传入

在调用字段属性时,通过添加括号使用关键字参数的形式也可以传入字段额外的HTML属性:

form.username(style=‘width:200px;‘,class_=‘bar‘)

输出的HTML代码如下所示:

u‘<input class="bar" id="username" name="username" style=""width:200px;" type="text">

注意:

class是Python的保留关键字,在这里我们使用class_来代替class,渲染后的<input>会获得正确的class属性,在模板中调用时

则可以直接使用class

通过上面的方法也可以修改id和name的属性,但表单被提交后,WTForms需要通过name属性来获取对应的数据,所以不能

修改name属性值。

修改后的forms.py

    username=StringField(‘Username‘,render_kw={‘placeholder‘:‘Your Username‘},validators=[DataRequired()])

修改后的basic.html

<!DOCTYPE html>
<link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://cdn.bootcss.com/jquery/2.2.4/jquery.min.js"></script>
<script src="https://cdn.bootcss.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>BootStrap Style Form</h1>
<dov class="container" >
    <form method="post">
    {{form.csrf_token}}
    <div class="form-group">
        {{form.username.label}}
        {{form.username(class=‘form-control‘)}}
    </div>
    <div class="form-group">
        {{form.password.label}}
        {{form.password(class=‘form-control‘)}}
    </div>
     <div class="form-check">
        {{form.remember(class=‘form-check-input‘)}}
        {{form.remember.label}}
    </div>
    {{form.submit(class=‘btn bth-primary‘)}}
</form>
</dov>
</body>
</html>

效果: 

原文地址:https://www.cnblogs.com/kaerxifa/p/11829465.html

时间: 2024-10-10 16:00:53

【flask】使用Flask-WTF处理表单的相关文章

【Flask】 WTForm表单编程

WTForm表单编程 在网页中,为了和用户进行信息交互总是不得不出现一些表单.flask设计了WTForm表单库来使flask可以更加简便地管理操作表单数据.WTForm中最重要的几个概念如下: Form类,开发者自定义的表单必须继承自Form类或者其子类.Form类最主要的功能是通过其所包含的Field类提供对表单内数据的快捷访问方式. 各种Field类,即字段.一般而言每个Field类都对应一个input的HTML标签.比如WTForm自带的一些Field类比如BooleanField就对应

flask web开发笔记 -- 表单 --待整理

虽然Flask的请求对象给表单处理提供了足够的支持,但也有一些任务繁琐和重复.比如为表单生成HTML代码和验证提交表单数据. Flask-WTF扩展能解决上述问题.它基于wtforms 防止跨站请求伪造 跨站请求伪造(Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF, 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法.跟跨网站脚本(XSS)相比,XSS

Flask10 登录模块、表单框架、表单渲染、表单验证、bookie、请求之前钩子、g对象、编写装饰器

from flask import Flask from flask import request from flask import render_template from flask_wtf import CSRFProtect as WTF # 利用表单类去渲染模板时需要用到 from forms import LoginForm app = Flask(__name__) WTF(app) # 在app上注册一个 WTF (所有的flask插件都必须进行注册) app.config.f

Flask学习之三——Web表单

1. CSRF 保护 from flask import Flask app = Flask(__name__) app.config['SECRET_KEY'] = 'secret_key string' app.config字典可用来存储框架.扩展和程序本身的配置变量.使用标准的字典语法就能把配置值添加到app.config对象中SECRET_KEY配置变量是通用密钥 ps:为了增强安全性,密钥不应该直接写入代码,而要保存在环境变量中 2.  表单类 When using Flask-WTF

【Flask】 结合wtforms的文件上传表单

表单中的文件上传 基本的表单渲染,表单类设置等等就不多说了,参看另一个文章即可.但是那篇文章里没有提到对于FileField,也就是上传文件的表单字段是如何处理,后端又是如何实现接受上传过来的文件的.因为看到了一篇很好的文章[https://zhuanlan.zhihu.com/p/23731819?refer=flask],所以我决定仔细学习一下.下面将按照那篇文章的脉络,由简至繁地说明表单中文件上传的办法. ■ 利用Flask原生的机制进行文件上传 首先在前端肯定有一个带有文件上传功能的表单

Flask教程 —— Web表单(上)

第二章中介绍的request对象公开了所有客户端发送的请求信息.特别是request.form可以访问POST请求提交的表单数据. 尽管Flask的request对象提供的支持足以处理web表单,但依然有许多任务会变得单调且重复.表单的HTML代码生成和验证提交的表单数据就是两个很好的例子. Flask-WTF扩展使得处理web表单能获得更愉快的体验.该扩展是一个封装了与框架无关的WTForms包的Flask集成. Flask-WTF和它的依赖集可以通过pip来安装: (venv) $ pip

Flask入门之flask-wtf表单处理

参考文章 1. 使用 WTForms 进行表单验证  第11集 #Sample.py # coding:utf-8 from flask import Flask,render_template,request from flask_bootstrap import Bootstrap app = Flask(__name__) Bootstrap(app) app.config.from_pyfile('config') #新建一个config的配置文件 @app.route('/login'

Flask学习之三 web表单

本部分Miguel Grinberg教程的翻译地址:http://www.pythondoc.com/flask-mega-tutorial/webforms.html 开源中国的:http://www.oschina.net/translate/the-flask-mega-tutorial-part-iii-web-forms 英文原文地址:http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-iii-web-for

flask学习笔记之--表单控件

表单验证 Flask-WTF 从 version 0.9.0有了变化,正确要引用wtforms包 正确的写法: from flask.ext.wtf import Form from wtforms import TextField, BooleanField from wtforms.validators import Required