Flask写表单使用到的库的梳理(Flask-WTF,WTForms,werkzeug、Flask_login)

在python 实际开发表单(如注册、登陆、提交用户信息等)中,一般实际引用如下:

# 表单基类,每个form(如登陆form,注册form,用户信息form等)都继承自这个FlaskForm
from flask_wtf import FlaskForm		
# 每个表单里的元素(如用户名输入框、密码输入框、提交按钮)
from wtforms import TextField, PasswordField	
# 用户上传文件名安全检查处理
from werkzeug import secure_filename  
# 用户上传密码时加密用(为应用提供bcrypt散列功能)
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框架、Django框架等web框架实际就是对werkzeug库进行的更易用的封装。werkzeug提供了诸如登陆验证、路由解析、常见web异常封装、wsgi中间件等等,只要够牛逼,通过这些特性你甚至可以自己实现一个Python Web开发框架。
  • 一般实际开发都用web框架,直接使用werkzeug去实现的比较少。
  • 参考说明:https://www.cnblogs.com/ygj0930/p/10826062.html

Flask_bcrypt(给密码加密)

  • 功能就是为字符串加密,当然也包含核对密码是否一致。官话是:为你的应用提供bcrypt散列功能
  • 一般应用在:用户注册时输入密码,保存到数据库的不是密码明文,而是通过bcrypt先加密再存入数据库。然后用户登录时,输入了密码,还要用这个来判断用户输入的密码和数据库中的密码是否一致。
	# 两个基础的功能函数通过bcrypt已经包含在了app对象中。之后,在应用的上下文(context)中,重要数据(如密码等),可以通过以下操作进行散列:	
	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') # returns True

Flask_login(获取登陆后用户控制的插件)

  • Flask-Loging 可以方便的管理用户会话,保护路由只让认证用户访问。
  • 简单的说,就是用户输入了账户密码正确的话,就可以用这个插件方便的记录登陆状态信息等。
  • 一般应用就是:用户输入了正确的账号密码后,用下面的代码:
from flask.login import login_user, logout_user, current_user
#获取要登陆的用户对象
... 先判断账号密码是否正确...然后
login_user(user,True)  # 第一个参数传入用户对象,第二个参数 传入 以后是否自动登陆
logout_use() #如果用户选择了登出,就用这个

#判断当前用户是否是匿名用户
current_user.is_anonymous()
# is_authenticated()方法 返回用户是否登陆
# is_active()方法  返回是否允许该用户登陆,返回false该用户将不能登陆
# is_anonymous()方法 返回是否是匿名用户, 也就是未登陆的用户等
# get_id() 返回可以唯一标识用户的Unicode字符串 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值