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天。

原文地址:https://www.cnblogs.com/fangtaoa/p/9061945.html

时间: 2024-11-08 14:09:46

Python框架学习之Flask中的常用扩展包的相关文章

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

数据库操作在web开发中扮演着一个很重要的角色,网站中很多重要的信息都需要保存到数据库中.如用户名.密码等等其他信息.Django框架是一个基于MVT思想的框架,也就是说他本身就已经封装了Model类,可以在文件中直接继承过来.但是在Flask中,并没有把Model类封装好,需要使用一个扩展包,Flask-SQLAlchemy.它是一个对数据库的抽象,让开发者不用这些编写SQL语句,而是使用其提供的接口去操作数据库,这其中涉及到一个非常重要的思想:ORM什么是ORM呢?下面我们就来详细讲解一下.

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

java中最常用jar包的用途说明,适合初学者 jar包 用途 axis.jar SOAP引擎包 commons-discovery-0.2.jar 用来发现.查找和实现可插入式接口,提供一些一般类实例化.单件的生命周期管理的常用方法. jaxrpc.jar Axis运行所需要的组件包 saaj.jar 创建到端点的点到点连接的方法.创建并处理SOAP消息和附件的方法,以及接收和处理SOAP错误的方法.   wsdl4j-1.5.1.jar Axis运行所需要的组件包 activation.ja

Python Web框架学习【Flask】

了解flask flask 是利用Python编写的轻量级Web应用框架 Flask也被称为 "microframework" ,因为它使用简单的核心,用 extension 增加其他功能. Flask没有默认使用的数据库.窗体验证工具. 其 WSGI 工具箱采用 Werkzeug 模板引擎则使用 Jinja2 Flask使用 BSD 授权 WSGI(PythonWeb服务器网关接口) Python Web Server Gateway InterfacePython应用程序或框架和W

python之celery在flask中使用

现在继续学习在集成的框架中如何使用celery. 在Flask中使用celery 在Flask中集成celery需要做到两点: 创建celery的实例对象的名字必须是flask应用程序app的名字,否则celery启动会失败: celery必须能顺利加载初始化文件. celery在flask中初始化 由于celery进程的运行和flask进程的运行是相互独立的,但是在框架中我们希望只使用一份配置文件,这样可以简化配置的工作. from celery import Celery from flas

Python基础学习笔记(五)常用字符串内建函数

参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-strings.html 3. http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000 Python字符串内建函数同样支持Unicode,常用函数如下表: 方法 描述 string.capitalize() 把字符串的第一个字符大写 string.center(wi

flask 中的常用组件的使用 ,virtualenv组件和 pipreqs组件

一  . flask 中连接的数据库的组件 DButils #!/usr/bin/env python # -*- coding:utf-8 -*- import pymysql from DBUtils.PooledDB import PooledDB, SharedDBConnection POOL = PooledDB( creator=pymysql, # 使用链接数据库的模块 maxconnections=20, # 连接池允许的最大连接数,0和None表示不限制连接数 mincach

在Windows平台搭建轻巧的Python开发环境——面向工程和科研的扩展包配置

首先,下载最新版本的Python. 为什么强调最新版本呢,因为新版本的漏洞通常会少得多,而且反映了未来的趋势. 既然要学,何不起点高一点? 官方下载地址:https://www.python.org/getit/ 安装过程中注意勾选添加到环境变量,否则你需要手动添加. 安装完毕后进入命令行,输入:python,看是否进入python的shell. 如果没有进入,检查一下环境变量. 如果提示缺失某些DLL,建议重启一下电脑. 安装pip模块,这个模块会让你以后安装别的相当方便,能达到类似Ubunt

Python基础学习笔记(七)常用元组内置函数

参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-tuples.html 3. http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000 Python常用元组内置函数: 序号 方法及描述 1 cmp(tuple1, tuple2)比较两个元组元素. 2 len(tuple)计算元组元素个数. 3 max(tuple)

Python基础学习笔记(六)常用列表操作函数和方法

参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-lists.html 3. http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000 常用操作列表的内置函数: 序号 函数 1 cmp(list1, list2)比较两个列表的元素 2 len(list)列表元素个数 3 max(list)返回列表元素最大值 4 mi