表单是搜集用户数据信息的各种表单元素的集合区域,它的作用是实现用户和服务器的数据交互。通过表单搜集客户端输入的数据信息,然后提交到网站服务器进行处理(搜集录入/比对验证等)。Form表单是Web应用中最基础的一部分,Form-WTF扩展提供了良好的支持,这里介绍使用Flask处理通用表单和Flask-WTF表单处理方法。
对表单没有进行必要的保护措施
1)启用CSRF保护
Flask-WTF提供了对所有Form表单免受跨站请求伪造(CSRF)攻击的技术支持;
编写config.py配置文件 :
SECRET_KEY = "zya123456789" CSRF_ENABLED = True
其中,SECRET_KEY用来建立加密的令牌,用于验证Form表单提交,可以设置复杂些。
app.py文件:
from flask import Flask,flash from flask import url_for,render_template # from flask_wtf.csrf import CSRFProtect #导入定义的BaseLogin from forms import BaseLogin import config app = Flask(__name__) app.config.from_object(config) #定义处理函数和路由规则,接收GET和POST请求 @app.route('/login',methods=('POST','GET')) def baselogin(): form=BaseLogin() #判断是否是验证提交 if form.validate_on_submit(): #跳转 flash(form.name.data+'|'+form.password.data) return '表单数据提交成功!' else: #渲染 return render_template('login.html',form=form) @app.route('/') def hello_world(): return 'Hello World!' if __name__ == '__main__': app.run(debug=True)
form.py文件:
from flask_wtf import Form #引入Form基类 from wtforms import StringField,PasswordField #引入Form元素父类 from wtforms.validators import DataRequired,Length #引入Form验证父类 class BaseLogin(Form): #登录表单类,继承与Form类 #用户名 name=StringField('name',validators=[DataRequired(message="用户名不能为空") ,Length(6,16,message='长度位于6~16之间')],render_kw={'placeholder':'输入用户名'}) #密码 password=PasswordField('password',validators=[DataRequired(message="密码不能为空") ,Length(6,16,message='长度位于6~16之间')],render_kw={'placeholder':'输入密码'})
Cookies是一种能够让网站服务器把少量数据存储到客户端的硬盘或者内存,或是从客户端的硬盘读取数据的一种技术。当再次浏览某网站时,浏览器将存放于本地的用户信息递交给服务器,服务器就可以识别用户的身份。
Session是基于Cookie实现的,保存在服务端的键值对中
有时需要在正常执行代码的前、中、后时期,强行执行一段我们想要执行的代码,实现这种功能的函数,就称为钩子函数。其实质就是用特定装饰器装饰的函数。