关键词:
Flask 本身相当于一个内核,其他几乎所有的功能都要用到扩展,都需要用第三方的扩展来实现,比如可以用 Flask 扩展加入ORM、窗体验证工具,文件上传、身份验证等。Flask 没有默认使用的数据库,你可以选择 MySQL,也可以用 NoSQL。
其 WSGI 工具箱采用 Werkzeug(路由模块),模板引擎则使用 Jinja2。这两个也是 Flask 框架的核心。
Flask常用扩展包:
- Flask-SQLalchemy:操作数据库;
- Flask-script:插入脚本;
- Flask-migrate:管理迁移数据库;
- Flask-Session:Session存储方式指定;
- Flask-WTF:表单;
- Flask-Mail:邮件;
- Flask-Bable:提供国际化和本地化支持,翻译;
- Flask-Login:认证用户状态;
- Flask-OpenID:认证;
- Flask-RESTful:开发REST API的工具;
- Flask-Bootstrap:集成前端Twitter Bootstrap框架;
- Flask-Moment:本地化日期和时间;
- Flask-Admin:简单而可扩展的管理接口的框架
- 中文文档(http://docs.jinkan.org/docs/flask/)
- 英文文档(http://flask.pocoo.org/docs/0.11/)
- 扩展列表:http://flask.pocoo.org/extensions/
#安装 pip install flask==0.10.1 # 后面为版本号
1、新建文件helloworld.py
# 导入Flask类 from flask import Flask # Flask函数接收一个参数__name__,它会指向程序所在的包 app = Flask(__name__) # 装饰器的作用是将路由映射到视图函数 index @app.route(‘/‘) def index(): return ‘Hello World‘ # Flask应用程序实例的 run 方法 启动 WEB 服务器 if __name__ == ‘__main__‘: app.run() # 可以指定运行的主机IP地址,端口,是否开启调试模式 # app.run(host="0.0.0.0", port=8888, debug = True)
2、相关配置参数
Flask 程序实例在创建的时候,需要默认传入当前 Flask 程序所指定的包(模块)
app = Flask(__name__)
- import_name
- Flask程序所在的包(模块),传
__name__
就可以 - 其可以决定 Flask 在访问静态文件时查找的路径
- Flask程序所在的包(模块),传
- static_path
- 静态文件访问路径(不推荐使用,使用 static_url_path 代替)
- static_url_path
- 静态文件访问路径,可以不传,默认为:
/ + static_folder
- 静态文件访问路径,可以不传,默认为:
- static_folder
- 静态文件存储的文件夹,可以不传,默认为
static
- 静态文件存储的文件夹,可以不传,默认为
- template_folder
- 模板文件存储的文件夹,可以不传,默认为
templates
- 模板文件存储的文件夹,可以不传,默认为
3.加载配置文件
在 Flask 程序运行的时候,可以给 Flask 设置相关配置,比如:配置 Debug 模式,配置数据库连接地址等等,设置 Flask 配置有以下三种方式:
- 从配置对象中加载(常用)
- app.config.form_object()
从配置文件中加载
- app.config.form_pyfile()
- app.config.from_envvar()
3.1配置对象加载
# 配置对象,里面定义需要给 APP 添加的一系列配置 class Config(object): DEBUG = True # 创建 Flask 类的对象,指向程序所在的包的名称 app = Flask(__name__) # 从配置对象中加载配置 app.config.from_object(Config)
3.2配置文件加载
创建配置文件 config.ini
,在配置文件中添加配置
格式eg: DEBUG = True
# 创建 Flask 类的对象,指向程序所在的包的名称 app = Flask(__name__) # 从配置文件中加载配置 app.config.from_pyfile(‘config.ini‘)
3.4读取配置
- app.config.get()
- 在视图函数中使用 current_app.config.get()
注:Flask 应用程序将一些常用的配置设置成了应用程序对象的属性,也可以通过属性直接设置/获取某些配置:app.debug = True
4 路由定义
4.1指定路由地址
# 指定访问路径为 hello @app.route(‘/hello‘) def demo1(): return ‘hello world‘
4.2 给路由传参
# 路由传递参数 @app.route(‘/user/<user_id>‘) def user_info(user_id): return ‘hello %s‘ % user_id # 路由传递的参数默认当做 string 处理,也可以指定参数的类型 # 路由传递参数 @app.route(‘/user/<int:user_id>‘) def user_info(user_id): return ‘hello %d‘ % user_id
4.3指定请求方式
在 Flask 中,定义一个路由,默认的请求方式为:
- GET
- OPTIONS(自带)
- HEAD(自带)
@app.route(‘/login‘, methods=[‘GET‘, ‘POST‘]) # 支持GET和POST,并且支持自带的OPTIONS和HEAD def login(): # 直接从请求中取到请求方式并返回 return request.method
4.4 正则匹配路由
在 web 开发中,可能会出现限制用户访问规则的场景,那么这个时候就需要用到正则匹配,根据自己的规则去限定请求参数再进行访问
具体实现步骤为:
- 导入转换器基类:在 Flask 中,所有的路由的匹配规则都是使用转换器对象进行记录
- 自定义转换器:自定义类继承于转换器基类
- 添加转换器到默认的转换器字典中
- 使用自定义转换器实现自定义匹配规则
(1)导入转换器基类
from werkzeug.routing import BaseConverter
(2)自定义转换器
# 自定义正则转换器 class RegexConverter(BaseConverter): def __init__(self, url_map, *args): super(RegexConverter, self).__init__(url_map) # 将接受的第1个参数当作匹配规则进行保存 self.regex = args[0]
(3)添加转换器到默认的转换器字典中,并指定转换器使用时名字为: re
app = Flask(__name__) # 将自定义转换器添加到转换器字典中,并指定转换器使用时名字为: re app.url_map.converters[‘re‘] = RegexConverter
(4)使用转换器去实现自定义匹配规则
# 当前此处定义的规则是:3位数字 @app.route(‘/user/<re("[0-9]3"):user_id>‘) def user_info(user_id): return "user_id 为 %s" % user_id
# 系统自带转换器 DEFAULT_CONVERTERS = ‘default‘: UnicodeConverter, ‘string‘: UnicodeConverter, ‘any‘: AnyConverter, ‘path‘: PathConverter, ‘int‘: IntegerConverter, ‘float‘: FloatConverter, ‘uuid‘: UUIDConverter, # 系统自带的转换器具体使用方式在每种转换器的注释代码中有写,请留意每种转换器初始化的参数
自定义转换器其他两个函数实现:
继承于自定义转换器之后,还可以实现 to_python 和 to_url 这两个函数去对匹配参数做进一步处理:
- to_python:
- 该函数参数中的 value 值代表匹配到的值,可输出进行查看
- 匹配完成之后,对匹配到的参数作最后一步处理再返回,比如:转成 int 类型的值再返回:
class RegexConverter(BaseConverter): def __init__(self, url_map, *args): super(RegexConverter, self).__init__(url_map) # 将接受的第1个参数当作匹配规则进行保存 self.regex = args[0] def to_python(self, value): return int(value) # 在视图函数中可以查看参数的类型,由之前默认的 str 已变成 int 类型的值
- to_url:
- 在使用 url_for 去获取视图函数所对应的 url 的时候,会调用此方法对 url_for 后面传入的视图函数参数做进一步处理
- 具体可参见 Flask 的 app.py 中写的示例代码:ListConverter
pythonflask框架跨域问题的解决方法(代码片段)
文章目录一、跨域是什么二、如何解决跨域问题1.跨域请求的过程总结一、跨域是什么从一个域名去请求另一个域名,这个过程称之为跨域。浏览器从一个域名的网页去请求另一个域名的资源,域名、端口、协议有一个不... 查看详情
pythonflask实现html文件压缩,9级压缩(代码片段)
本博客详细为你解释PythonFlask框架下的HTML文件压缩内容,其第三方模块也可用在其他框架中。本案例是基于PythonFlask进行搭建,所以需要提前搭建一个Flask项目环境,有app.py文件和templates/index.html文件即可。实现HTML文... 查看详情
pythonflask框架使用flask-login模块,来学习一下吧(代码片段)
文章目录flask-login模块简介Flask-Login模块的上手细节user_loader函数login_user函数logout_user函数confirm_login函数unauthorized_callback函数needs_refresh_callback函数login_required装饰器flask-login模块简介Flask-Login是一个Flask模块,可以 查看详情
pythonflask框架使用flask-login模块,来学习一下吧(代码片段)
文章目录flask-login模块简介Flask-Login模块的上手细节user_loader函数login_user函数logout_user函数confirm_login函数unauthorized_callback函数needs_refresh_callback函数login_required装饰器flask-login模块简介Flask-Login是一个Flask模块,可以 查看详情
pythonflask教程学习01(代码片段)
教程来源于w3cschool,我跟着敲一遍,做一遍Flask是一个轻量级的可定制框架,使用Python语言编写,较其他同类型框架更为灵活、轻便、安全且容易上手。它可以很好地结合MVC模式进行开发,开发人员分工合作... 查看详情
pythonflask之获取请求参数(代码片段)
request对象是从客户端向服务器发出请求,包括用户提交的信息以及客户端的一些信息。客户端可通过HTML表单或在网页地址后面提供参数的方法提交数据,然后通过request对象的相关方法来获取这些数据Flask框架中的request... 查看详情
pythonflask之获取请求参数(代码片段)
request对象是从客户端向服务器发出请求,包括用户提交的信息以及客户端的一些信息。客户端可通过HTML表单或在网页地址后面提供参数的方法提交数据,然后通过request对象的相关方法来获取这些数据Flask框架中的request... 查看详情
pythonflask请求示例(代码片段)
pythonflask表单验证(代码片段)
pythonflask-数据库片段(代码片段)
pythonflask框架学习笔记14(代码片段)
数据库一对一的关系:实现一对一的关系,只需要在一对多的基础上,将“多”的那一端设置为“一”即可。书上举得例子是:用户拓展表。在公司业务增长的情况下,需要存储用户的许多属性,但是有些... 查看详情
pythonflask演示:你好世界(代码片段)
pythonflask同步/异步性能对比(代码片段)
pythonflask框架-开发简单博客-认证蓝图(代码片段)
...大概率事件。Python官方文档教程本系列已发布文章:PythonFlask框架-开发简单博客-开篇介绍Pytho 查看详情
pythonflask转储请求和响应示例(代码片段)
pythonflask文件上传第1部分(代码片段)
pythonflask转储请求和响应示例(代码片段)
pythonflask实现html文件压缩,9级压缩(代码片段)
本博客详细为你解释PythonFlask框架下的HTML文件压缩内容,其第三方模块也可用在其他框架中。本案例是基于PythonFlask进行搭建,所以需要提前搭建一个Flask项目环境,有app.py文件和templates/index.html文件即可。实现HTML文... 查看详情