Python框架学习之Flask中的常用扩展包
Posted fangtaoa
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python框架学习之Flask中的常用扩展包相关的知识,希望对你有一定的参考价值。
Flask框架是一个扩展性非常强的框架,所以导致它有非常多的扩展包。这些扩展包的功能都很强大。本节主要汇总一些常用的扩展包。
一、 Flask-Script
pip install flask-script
作用:
1. 可以让我们通过命令行的方式启动服务器,还可以手动指定参数,如ip,port。
python hello.py runserver -h 127.0.0.1 -p 6666
2. 结合Flask-Migration扩展包可以实现对数据的迁移
二、 Flask-WTF
作用是为了能够更好的处理web表单。表单包括:表单标签、表单域、表单按钮。
Flask-WTF中封装了WTForms,除了能处理表单之外,还有表单数据验证的功能
常用标准字段:
StringField:文本字段,相当于input标签中type=text
TextAreaField:多文本字段,
PasswordField:密码文本框
HiddenField:隐藏字段,常用于隐藏csrf_token
SelectField:下来列表字段
SubmitField:提交表单字段
FileField:文件上传字段
常用验证函数:
DataRequired():确保字段中有数据
EqualTo():比较两个字段的值,用于密码校验
Length():验证输入的字符串的长度
NumberRange():验证输入的值在数字范围内
URL():验证URL
AnyOf():验证输入值在可选列表中
注意:使用该扩展包必须设置SECRET_KEY参数。
1 from flask import Flask, render_template
2
3 from flask_script import Manager
4 from flask_wtf import FlaskForm
5 from wtforms import StringField, PasswordField, SubmitField
6 from wtforms.validators import DataRequired, EqualTo
7
8 from settings import MyConfig
9 app = Flask(__name__)
10
11 # 配置信息中主要设置配置参数,SECRET_KEY
12 app.config.from_object(MyConfig)
13 # 使用Manager来代替app的启动功能
14 manager = Manager(app)
15
16
17 class MyForm(FlaskForm):
18 """自定义一个表单类"""
19 # 定义一个文本标签,并验证数据是否为空
20 u_name = StringField(validators=[DataRequired()])
21 # 定义一个密码框, 密码需要判断是否相等
22 passwd = PasswordField(validators=[DataRequired(), EqualTo(‘confirm_passwd‘)])
23 confirm_passwd = PasswordField(validators=[DataRequired()])
24 # 定义一个提交按钮,用来提交数据
25 submit = SubmitField(label=‘注册‘)
26
27
28 @app.route(‘/‘, methods=[‘GET‘, ‘POST‘])
29 def index():
30
31 # 实例化一个form对象
32 form = MyForm()
33
34 # 只有当每个字段都满足条件后才能提交
35 # validate_on_submit():有两个功能:
36 # 1.先验证设置了validators属性的字段是否有数据,
37 # 2.如果有数据,那么会验证表单中是否设置csrf_token
38 # print(form.validate_on_submit())
39 if form.validate_on_submit():
40 # 获取提交的数据
41 name = form.u_name.data
42 passwd = form.passwd.data
43 confirm_passwd = form.confirm_passwd.data
44 print(name, passwd, confirm_passwd)
45
46 return render_template(‘wtf.html‘, form=form)
47
48
49 # 使用flask_script扩展包启动这个文件
50
51
52 if __name__ == ‘__main__‘:
53 # app.run(debug=True)
54 manager.run()
三、 数据库迁移
1.为什么要数据库迁移
在Flask-SQLAlchemy中,只提供了db.create_all()和db.drop_all()两个接口,这对于想要添加或删除某些字段是非常麻烦的,在表中有数据的情况下基本上是没法操作的。因为使用这两个接口都会导致表中数据被清空。数据库的迁移本质上就是生成表的操作。而且还是在不修改表中数据的情况下完成的,只是修改表的结构,不改变数据,如增加或删除命令。
2. 如何使用Flask-Migrate扩展包
在Flask中可以使用一个扩展包Flask-Migrate来实现数据库迁移工作,它与Flask-Script扩展一起使用,可以提高效率。
为了导出数据库迁移命令,Flask-Migarte提供了一个MigrateCommand类,可以附加到Flask-Script的manager对象上。
migrate = Migrate(app, db)
manager.add_command(‘db‘, MigrateCommand)
3. 具体命令
python database.py db init:在项目目录下创建一个migrations目录,所有迁移文件都放在里面
python database.py db migrate -m "init migration":自动创建一个迁移脚本,里面有upgrade()和downgrade()。-m 添加一个注释信息
python database.py db upgrade:更新数据库
python database.py db history:查找每个操作生成的版本号,
python database.py db downgrade 版本号:恢复到指定版本
四、Flask-Session
在Flask框架中,没有集成把浏览器中的cookie信息中的session信息保存到服务器中,这样不太方便。但是Flask-Session扩展包提供了这样的功能,把session信息同步到服务器中。而一般来说像session、轮播图等易变数据都是把保存到Redis数据库中,因为Redis的性能极高。接下来就在项目中配置Redis来来保存session。
在项目配置文件中添加以下字段:
SESSION_TYPE:指明保存session的地方。可以有Redis,Mongodb, memcached,filesystem等,这里就选择用Redis。
SESSION_REDIS:指明一个Redis数据库对象。
SESSION_USE_SIGNER:设置是否开启签名,也就是为了更进一步的保证安全。
PERMANENT_SESSION_LIFETIME:设置session的有效期为多久。一般设置为3-5天。
以上是关于Python框架学习之Flask中的常用扩展包的主要内容,如果未能解决你的问题,请参考以下文章