Flask框架是一个扩展性非常强的框架,所以导致它有非常多的扩展包。这些扩展包的功能都很强大。本节主要汇总一些常用的扩展包。

一、 Flask-Script

  pip install flask-script

  作用:

    1. 可以让我们通过命令行的方式启动服务器,还可以手动指定参数,如ip,port。

      python hello.py runserver -h 127.0.0.1 -p 6666

    2. 结合Flask-Migration扩展包可以实现对数据的迁移

    3.可以使用管理器装饰器来添加命令

 @manager.option('-n', '--name', dest='name')
 @manager.option('-p', '--password', dest='password')
 def createsuperuser(name, password):
     pass

    创建一个管理员命令。

二、 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参数。

  

 from flask import Flask, render_template

 from flask_script import Manager
 from flask_wtf import FlaskForm
 from wtforms import StringField, PasswordField, SubmitField
 from wtforms.validators import DataRequired, EqualTo

 from settings import MyConfig
 app = Flask(__name__)

 # 配置信息中主要设置配置参数,SECRET_KEY
 app.config.from_object(MyConfig)
 # 使用Manager来代替app的启动功能
 manager = Manager(app)

 class MyForm(FlaskForm):
     """自定义一个表单类"""
     # 定义一个文本标签,并验证数据是否为空
     u_name = StringField(validators=[DataRequired()])
     # 定义一个密码框, 密码需要判断是否相等
     passwd = PasswordField(validators=[DataRequired(), EqualTo('confirm_passwd')])
     confirm_passwd = PasswordField(validators=[DataRequired()])
     # 定义一个提交按钮,用来提交数据
     submit = SubmitField(label='注册')

 @app.route('/', methods=['GET', 'POST'])
 def index():

     # 实例化一个form对象
     form = MyForm()

     # 只有当每个字段都满足条件后才能提交
     # validate_on_submit():有两个功能:
     # 1.先验证设置了validators属性的字段是否有数据,
     # 2.如果有数据,那么会验证表单中是否设置csrf_token
     # print(form.validate_on_submit())
     if form.validate_on_submit():
         # 获取提交的数据
         name = form.u_name.data
         passwd = form.passwd.data
         confirm_passwd = form.confirm_passwd.data
         print(name, passwd, confirm_passwd)

     return render_template('wtf.html', form=form)

 # 使用flask_script扩展包启动这个文件

 if __name__ == '__main__':
     # app.run(debug=True)
     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中的常用扩展包的更多相关文章

  1. Python框架学习之Flask中的视图及路由

    在前面一讲中我们学习如何创建一个简单的Flask项目,并做了一些简单的分析.接下来在这一节中就主要来讲讲Flask中最核心的内容之一:Werkzeug工具箱.Werkzeug是一个遵循WSGI协议的P ...

  2. Python框架学习之Flask中的蓝图与单元测试

    因为Flask框架的集成度很低,随着Flask项目文件的增多,会导致不太好管理.但如果对一个项目进行模块化管理的,那样子管理起来就会特别方便.而在Flask中刚好就提供了这么一个特别好用的工具蓝图(B ...

  3. Python框架学习之Flask中的数据库操作

    数据库操作在web开发中扮演着一个很重要的角色,网站中很多重要的信息都需要保存到数据库中.如用户名.密码等等其他信息.Django框架是一个基于MVT思想的框架,也就是说他本身就已经封装了Model类 ...

  4. Python框架学习之Flask中的Jinja2模板

    前面也提到过在Flask中最核心的两个组件是Werkzeug和Jinja2模板.其中Werkzeug在前一节已经详细说明了.现在这一节主要是来谈谈Jinja2模板. 一.为什么需要引入模板: 在进行软 ...

  5. Flask框架简介,常用扩展包及两大核心

    Flask诞生于2010年,是Armin ronacher(人名)用 Python 语言基于 Werkzeug 工具箱编写的轻量级Web开发框架. Flask 本身相当于一个内核,其他几乎所有的功能都 ...

  6. java中最常用jar包的用途说明

    java中最常用jar包的用途说明,适合初学者 jar包 用途 axis.jar SOAP引擎包 commons-discovery-0.2.jar 用来发现.查找和实现可插入式接口,提供一些一般类实 ...

  7. Python框架学习之用Flask创建一个简单项目

    在前面一篇讲了如何创建一个虚拟环境,今天这一篇就来说说如何创建一个简单的Flask项目.关于Flask的具体介绍就不详细叙述了,我们只要知道它非常简洁.灵活和扩展性强就够了.它不像Django那样集成 ...

  8. 初识Flask框架,以及Flask中的模板语言jinjia2和Flask内置的Session

    一.web框架的对比 首先我们先来看下比较火的web框架 1.Django: 优点:大而全,所有组件都是组织内部开发高度定制化,教科书级别的框架 缺点:大到浪费资源,请求的时候需要的资源较高 2.Fl ...

  9. StrangeIoc框架学习----在项目中实战

    最近,因为公司的项目一直在研究StrangeIoc框架,小有所得,略作记录. StrangeIoc是一款基于MVCS的一种框架,是对MVC思想的扩展,是专门针对unity开发的一款框架,非常好用. 一 ...

随机推荐

  1. html5基础!!

    A:HTML5 不基于 SGML,所以不需要引用 DTD: B: HTML 4.01 基于 SGML,而HTML5不基于SGML: DTD可定义合法的XML文档构建模块,它使用一系列合法的元素来定义文 ...

  2. C# Dev XtraReport 简单测试

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using DevExpre ...

  3. 洛谷P4578 [FJOI2018]所罗门王的宝藏(dfs)

    题意 题目链接 Sol 对于每个询问\(x, y, c\) 从在\((x, y)\)之间连一条边权为\(c\)的双向边,然后就是解\(K\)个二元方程. 随便带个数进去找找环就行了 #include& ...

  4. 聊聊找AI算法岗工作

    https://blog.csdn.net/weixin_42137700/article/details/81628028 首先,本文不是为了增加大家的焦虑感,而是站在一名学生的角度聊聊找AI算法岗 ...

  5. How To Do Master Record Mass Maintenance

    How To Do Master Record Mass Maintenance Which master records mass maintenance can be done? What do ...

  6. Android为TV端助力 双缓存机制

    废话不多说,直接贴代码! 所谓的双缓存,第一就是缓存在内存里面,第二就是缓存在SD卡里面,当你需要加载数据时,先去内存缓存中查找,如果没有再去SD卡中查找,并且用户可以自选使用哪种缓存! 缓存内存和缓 ...

  7. mysql左连接

    举个例子说明: select d.id, d.uid,d.username,d.dateline, d.message,d.replynum, c.picid, c.filename from doi ...

  8. android Camera相机类

    Camera相机类相关的几个流程方法 Camera.open(cameraId) 打开相机 camera.setDisplayOrientation(0) 设置相机水平方向 mCamera.setPr ...

  9. adb连接安卓模拟器

    为了在电脑上玩手机游戏,国内推出了很多安卓模拟器,mumu.夜神.itools.海马等等.我们也可以用他们来做安卓开发,相对genymotion或者android studio自带的模拟器而言,国产模 ...

  10. 前端 CSS预处理器Less

    引文 Less是一种动态的样式语言.Less扩展了CSS的动态行为,比如说,设置变量(Variables).混合书写模式(Mixins).操作(Operations)和功能(Functions)等等, ...