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. js 提取某()特殊字符串长度

    // 提取特殊字符串长度(scrstr 源字符串 armstr 特殊字符) getStrCount: function(scrstr, armstr) { var count = 0; while ( ...

  2. 《JavaScript高级程序设计》笔记:变量、作用域和内存问题(四)

    基本类型和引用类型的值 ECMAScript变量可能包含两种不同数据类型的值:基本类型值和引用类型值.基本类型值指的是简单的数据段,而引用类型的值指那些可能有多个值构成的对象. 动态的属性 var p ...

  3. jQ效果:jQuery之插件开发短信发送倒计时功能

    实现的主要功能如下: 1.点击按钮的时候,可以进行倒计时,倒计时自定义. 2.当接收短信失败后,倒计时停止,可点击重新发送短信. 3.点击的元素支持一般标签和input标签. html代码: < ...

  4. angularJS中控制器和作用范围

    $scope是$rootScope的子作用域控制对象,$rootScope的id为1,其他的为2,3,4... 不同的控制器之间,所对应的作用域控制对象$scope,之间是相互隔离的,如果要共享数据, ...

  5. (网页)parseFloat在工作中遇到的错误

    parseFloat(23.23) == parseFloat(23.2299999999999).toFixed(2) 类似与以上的代码,展示没什么问题,一旦比较,看展示相等其实不相等,小数位的问题 ...

  6. matlab练习程序(地图上画经纬度)

    需要看下生成的数据在地球上的经纬度具体位置. 投影为墨卡托投影.   clear all; close all; clc; load coast; a=load('out.txt'); %自己的经纬度 ...

  7. ${pageContext.request.contextPath}相关问题总结

    (1)采用绝对路径,但为了解决不同部署方式的差别,在所有非struts标签的路径前加${pageContext.request.contextPath},如原路径为:”/images/title.gi ...

  8. mssql sqlserver避免sql脚本中出现除零错误的方法分享

    摘自:http://www.maomao365.com/?p=6612 摘要:下文介绍sql server中,sql脚本避免出现除零错误的方法分享 在各种业务系统开发中,通常会遇到除零的错误,下文分享 ...

  9. Cisco 日常巡检命令

    https://www.cnblogs.com/qzqdy/p/8116903.html 日常排错命令6 交换机的前面板有几个指示灯,用于监控系统的活动和性能.这些指示灯称之为发二极管(LED) 1. ...

  10. shell 函数用法

    近期在学习shell编程方面的知识,写的不怎么好,请大家多多指点,下面给大家分享一下shell函数的用法. 我们为什么要用shell函数? 简单的说,函数的作用就是把程序多次调用相同的代码部分定义成一 ...