在python 实际开发表单(如注册、登陆、提交用户信息等)中,一般实际引用如下:
from flask_wtf import FlaskForm
from wtforms import TextField, PasswordField
from werkzeug import secure_filename
from Flask-Bcrypt import Bcrypt
Flask-WTF(提供Flask_Form供表单继承)
- Flask-WTF是集成WTForms的重要内容的插件,带有 csrf 令牌的安全表单和全局的 csrf 保护的功能。
- 一般我们创建一个form类都会继承Flask-WTF的FlaskForm类,而实际上FlaskForm又是继承自WTForms的form类。但是,Flask-WTF的FlaskForm类能够防止跨站攻击,具有更好的安全性。在Flask-WTF的flaskForm类注释中有说明。
例子:每次我们在forms.py中建立表单(如登陆页面、注册页面等)时,都要创建表单类,用的就是Flask_wtf插件和wtforms插件配合。
from flask_wtf import FlaskForm
from wtforms import TextField, PasswordField
class LoginForm(FlaskForm):
username = TextField('Username', id='username_login')
password = PasswordField('Password', id='pwd_login')
WTForms:(提供表单的各个字段控制,在编辑器中下载引用)
- WTForms是专门用于Python的Web表单框架的form插件,它支持多种web框架,如Flask、Django都可以用,主要用于对用户请求数据的进行验证。
- 在flask内部并没有提供全面的表单验证,所以当我们不借助第三方插件来处理时候代码会显得混乱,而官方推荐的一个表单验证插件就是wtforms。
- Flask是一个Python Web框架,其中的表单部分使用了WTForm并对它做了一定的修改。
- wtforms官方文档(英文版):https://wtforms.readthedocs.io/en/stable/index.html
- 写的较详细的参考:https://www.cnblogs.com/wdliu/p/10183645.html
提示:但是我们一般在Flask做表单form的时候,都是配合使用下面的Flask-wtf插件的。
werkzeug (Flask框架的基础底层库,一般就只用它的文件名安全获取功能“secure_filename”)
- Werkzeug就是Flask使用的底层WSGI库。Flask就是在 Werkzeug 为基础开发的,说白了,Flask框架生成web应用,实际上背后都是通过Werkzeug实现逻辑以及底层控制的。
- 在实际中,部分没有在Flask_WTF中封装的功能,我们就要直接引用这个库里面的其他工。在Flask框架下,我们一般就是用其中的“secure_filename”来处理用户上传文件名的安全获取(防止用户文件名中带上特殊字符造成的不安全,其他时候基本上不会直接用到这个库)
from werkzeug import secure_filename
from flask_wtf.file import FileField
class PhotoForm(Form):
photo = FileField('Your photo')
@app.route('/upload/', methods=('GET', 'POST'))
def upload():
form = PhotoForm()
if form.validate_on_submit():
filename = secure_filename(form.photo.data.filename)
form.photo.data.save('uploads/' + filename)
else:
filename = None
return render_template('upload.html', form=form, filename=filename)
Flask_bcrypt(给密码加密)
- 功能就是为字符串加密,当然也包含核对密码是否一致。官话是:为你的应用提供bcrypt散列功能
- 一般应用在:用户注册时输入密码,保存到数据库的不是密码明文,而是通过bcrypt先加密再存入数据库。然后用户登录时,输入了密码,还要用这个来判断用户输入的密码和数据库中的密码是否一致。
from flask_bcrypt import Bcrypt
app = Flask(__name__)
bcrypt = Bcrypt(app)
password = 'hunter2'
pw_hash = bcrypt.generate_password_hash(password)
pw_hash = bcrypt.generate_password_hash('secret', 10)
bcrypt.check_password_hash(pw_hash, 'secret')
Flask_login(获取登陆后用户控制的插件)
- Flask-Loging 可以方便的管理用户会话,保护路由只让认证用户访问。
- 简单的说,就是用户输入了账户密码正确的话,就可以用这个插件方便的记录登陆状态信息等。
- 一般应用就是:用户输入了正确的账号密码后,用下面的代码:
from flask.login import login_user, logout_user, current_user
... 先判断账号密码是否正确...然后
login_user(user,True)
logout_use()
current_user.is_anonymous()