在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')
- 参考详细说明和例子:
链接:https://www.jianshu.com/p/7e16877757f8
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 = Nonereturn render_template('upload.html', form=form, filename=filename)
- Flask框架、Django框架等web框架实际就是对werkzeug库进行的更易用的封装。werkzeug提供了诸如登陆验证、路由解析、常见web异常封装、wsgi中间件等等,只要够牛逼,通过这些特性你甚至可以自己实现一个Python Web开发框架。
- 一般实际开发都用web框架,直接使用werkzeug去实现的比较少。
- 参考说明:https://www.cnblogs.com/ygj0930/p/10826062.html
Flask_bcrypt(给密码加密)
- 功能就是为字符串加密,当然也包含核对密码是否一致。官话是:为你的应用提供bcrypt散列功能
- 一般应用在:用户注册时输入密码,保存到数据库的不是密码明文,而是通过bcrypt先加密再存入数据库。然后用户登录时,输入了密码,还要用这个来判断用户输入的密码和数据库中的密码是否一致。
from flask_bcrypt import Bcryptapp = 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()
- 然后后面要处理登陆的用户就用这个插件的current_user就可以了,比如判断用户是否登录、控制非登陆状态不能访问某些页面等。
- 提示:不用这个插件,自己手工session记录判断登陆信息,其实也是可以的,就是麻烦点。
- 参考官网(英文):https://flask-login.readthedocs.io/en/latest/
- 更具体的实操参考:https://www.cnblogs.com/agmcs/p/4445428.html