今天我说一下表单,提到表单就应该想起来flash闪现。
Web表单是Web应用程序的基本功能,他是HTML页面中负责数据采集的部件。表单有三个部分组成:表单标签,表单域,表单按钮。表单允许用户输入数据,负责HTML页面数据采集,通过表单将用户输入的数据提交给服务器。
在flask框架中使用表单我们可以使用Flask-WTF扩展,它呢封装了WTforms,并且他有验证表单数据的功能。
当然使用Flask-WTF需要配置参数SECRET_KEY----- CSRF_ENABLED是为了CSRF(跨站请求伪造)保护。SECRET_KEY 用来生成加密令牌,当CSRF激活的时候,该设置会根据设置的密匙生成加密令牌。
我们可以用表单可以进行登录,注册 ,但是登录,注册的时候我们必须得验证 ~ 这样才能保证业务的严谨性。
使用Flask-WTF实现表单
先配置一个参数,关闭CSRF效验
在模板页面上写表格
<form method ="post">
{{form.username.lable}}{{form.username}}
{{form.password.lable}}{{form.password}}
{{form.password1.lable}}{{form.password1}}
{{form.submit}}
</form>
视图函数:
导入的模块from flask import Flask,render_template,flash
#导入wtf扩展的表单类
from flask_wtf import FlaskForm
#导入自定义表单需要的字段
from wtforms import SubmitFiled,StringField,PasswordField
#创建一个表单类
class RegisterForm(FlaskForm):
username = StringField('用户名')
password = PasswordField("密码")
password1 = PasswordField("确认密码")
submit = SubmitField("注册")
接下来我给看一下简单代码验证。
#这是代码模拟登录的
<form methof="POSt"># 不写action的话会默认提交给自己
<lable>用户名:</lable><input type="text" name="username" placeholder ="请输入用户名">
<lable>密码:</lable><input type="password" name="password" placeholder ="请输入密码>
<lable>确认密码:</lable><input type="password" name="password1" placeholder ="请输入确认密码>
<input type="submit" value = '注册'>
</form>
#视图函数中获取表单数据验证登录逻辑
@app.route('/yan',method=["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,password,password1]):
#向前端界面弹出一跳提示(闪现消息)
flash("参数不足")
elif password != password1:
flash("两次密码不一致")
else:
#假装做注册操作
print(username,password,password1)
return 'sucess'
return reder_template('temp_register.html')
这个就是模拟验证登录注册,里面有闪现,flash闪现可以直接跳到拥护者面前把消息直接展示出来
if __name__=='__main__':
app.run()
运行一下就可以了
flash中的消息闪现,在官方的解释就是用来给用户做反馈的,不过实际上这个功能只是一个记录消息的方法,在某一个请求中记录消息,在下一个请求中获取消息,然后做响应的处理,也就是说flask只存在于两个相邻的请求中“闪现”,第三次请求就不存在这个flash。 通常情况下配合模板进行调用,可以实现一种伪“ajax”请求的效果,基于flash模块。
WTForms是一个支持多个web框架爱的form组件,用于简化form表单的定义和一些操作。
表单功能在有些情况下非常实用~~~~~~~