Python Flask框架 入门详解与进阶
- 1.Flask框架 入门
- 2.环境搭建
- 2.1.安装flask
- 1.创建虚拟环境
- 2.激活虚拟环境
- 3.安装flask
- 2.2.flask程序编写
- 1.创建test.py文件
- 2.启动运行
- 2.3.参数说明
- 1.Flask对象的初始化参数
- 第一种 :从配置对象中加载 app.config.from_object(DefaultConfig)
- 第二种:从配置文件中加载
- 第三种:从环境变量中加载
- 项目中的常用方式
- app.run 参数
- 2.4开发服务器启动方式
- 方式一:新式的终端运行
- 方式二:Pycharm启动
- 3.路由与蓝图
- 路由
- 3.1.查询路由信息
- 方式1:命令行方式
- 方式2:在程序读取路由信息
- 3.2.指定请求方式
1.Flask框架 入门
flask是一个非常轻量化的后端框架,与django相比,它拥有更加简洁的框架。django功能全而强大,它内置了很多库包括路由,表单,模板,基本数据库管理等。flask框架只包含了两个核心库(Jinja2 模板引擎和 Werkzeug WSGI 工具集),需要什么库只需要外部引入即可,让开发者更随心所欲的开发应用
Flask文档
中文文档(http://docs.jinkan.org/docs/flask)
英文文档(http://flask.pocoo.org/docs/1.0/)
2.环境搭建
2.1.安装flask
1.创建虚拟环境
mkvirtualenv flask -p python3
2.激活虚拟环境
workon flask
3.安装flask
pip install flask
2.2.flask程序编写
1.创建test.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()
2.启动运行
python test.py
2.3.参数说明
1.Flask对象的初始化参数
Flask 程序实例在创建的时候,需要默认传入当前 Flask 程序所指定的包(模块)
Flask 应用程序在创建的时候一些需要我们关注的参数:
import_name
Flask程序所在的包(模块),传__name__就可以
其可以决定 Flask 在访问静态文件时查找的路径
static_url_path
静态文件访问路径,可以不传,默认为:/ + static_folder
static_folder
静态文件存储的文件夹,可以不传,默认为 static
template_folder
模板文件存储的文件夹,可以不传,默认为 templates
默认参数情况
app = Flask(__name__)
文件目录
访问http://127.0.0.1:5000/static/fu.png就可以访问到图片
完整参数情况下
# 导入Flask类
from flask import Flask
#Flask类接收一个参数__name__,static_url_path是静态文件访问路径,static_folder静态文件存储的文件夹
app = Flask(__name__, static_url_path='w',static_folder='static_file')
# 装饰器的作用是将路由映射到视图函数index
@app.route('/')
def index():
return 'Hello World'
if __name__ == '__main__':
app.run()
文件目录
此时访问http://127.0.0.1:5000/w/IMG_5311.jpg,才可以访问到图片
2.应用程序配置参数
对于Flask对象初始化参数仅仅设置的是Flask本身的属性,比如:
Flask从哪里读取静态文件,Flask从哪里读取模板文件
还需要应用程序配置参数设置的,是一个Web应用工程的相关信息,比如:
数据库的连接信息,日志的配置信息,自定义的配置信息
使用方式
Flask将配置信息保存到了app.config属性中
读取
app.config.get(name)
app.config[name]
设置
第一种 :从配置对象中加载 app.config.from_object(DefaultConfig)
test_config.py
# 导入Flask类
from flask import Flask
# 配置对象方式加载配置信息
class DefaultConfig(object):
"""
默认配置信息
"""
SECRET_KEY = 'FDDKKKGFHFHRHNGGGKLTUIRKTKJBNSDFFFWET'
#Flask类接收一个参数__name__
app = Flask(__name__, static_url_path='/w', static_folder='static_file')
# 设置
app.config.from_object(DefaultConfig)
#定义视图
@app.route('/')
def index():
# 读取配置信息
print(app.config['SECRET_KEY'])
return 'Hello World'
if __name__ == '__main__':
app.run()
运行程序在后台就会打印出来 SECRET_KEY
第二种:从配置文件中加载
在当前目前创建一个setting.py文件,里面写入配置信息
SECRET_KEY = '我是配置文件信息'
test_config.py
# 导入Flask类
from flask import Flask
# 配置对象方式加载配置信息
class DefaultConfig(object):
"""
默认配置信息
"""
SECRET_KEY = 'FDDKKKGFHFHRHNGGGKLTUIRKTKJBNSDFFFWET'
#Flask类接收一个参数__name__
app = Flask(__name__, static_url_path='/w', static_folder='static_file')
# 设置
# app.config.from_object(DefaultConfig)
app.config.from_pyfile('setting.py')
#定义视图
@app.route('/')
def index():
# 读取配置信息
print(app.config['SECRET_KEY'])
return 'Hello World'
if __name__ == '__main__':
app.run()
运行就会打印出配置文件的信息
第三种:从环境变量中加载
在Linux系统中设置和读取环境变量的方式
export 变量名=变量值 # 设置
echo $变量名 # 读取
# 例如
export MYCONFIG=python
echo $MYCONFIG
在windows系统里是
set 变量名=变量值
test_config.py
# 导入Flask类
from flask import Flask
# 配置对象方式加载配置信息
class DefaultConfig(object):
"""
默认配置信息
"""
SECRET_KEY = 'FDDKKKGFHFHRHNGGGKLTUIRKTKJBNSDFFFWET'
#Flask类接收一个参数__name__
app = Flask(__name__, static_url_path='/w', static_folder='static_file')
# 设置
# app.config.from_object(DefaultConfig)
# app.config.from_pyfile('setting.py')
# silent=False 表示不安静的处理,没有值时报错通知,默认为False
# silent=True 表示安静的处理,即使没有值也让Flask正常的运行下去
app.config.from_envvar('ENV_SETTING', silent=True)
#定义视图
@app.route('/')
def index():
# 读取配置信息
print(app.config['SECRET_KEY'])
return 'Hello World'
if __name__ == '__main__':
app.run()
Flask使用环境变量加载配置就是通过环境变量值找到配置文件,再读取配置文件的信息,其使用方式为
我用windows来演示
Pycharm设置环境变量
项目中的常用方式
- app.config.from_object(配置对象)
优点:继承,复用
缺点:敏感信息暴露 - app.config.from_pyfile(配置文件)
优点:独立文件,保护敏感数据
缺点:不能继承,文件路径固定不灵活 - app.config.from_envvar(环境变量)
优点:独立文件,保护敏感数据,文件路径不固定,灵活
缺点:不方便,记得设置环境变量
from flask import Flask
def create_flask_app(config):
"""
创建Flask应用
:param config: 配置对象
:return: Flask应用
"""
app = Flask(__name__)
app.config.from_object(config)
# 从环境变量指向的配置文件中读取的配置信息会覆盖掉从配置对象中加载的同名参数
app.config.from_envvar("ENV_SETTING", silent=True)
return app
class DefaultConfig(object):
"""默认配置"""
SECRET_KEY = 'abcdefg'
class DevelopmentConfig(DefaultConfig):
DEBUG=True
# app = create_flask_app(DefaultConfig)
app = create_flask_app(DevelopmentConfig)
@app.route("/")
def index():
print(app.config['SECRET_KEY'])
return "hello world"
app.run 参数
指定运行的主机IP地址,端口,是否开启调试模式
app.run(host="0.0.0.0", port=6000, debug = True)
2.4开发服务器启动方式
方式一:新式的终端运行
hello.py
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello_world():
return "<p>Hello, World!</p>"
export FLASK_APP=hello
flask run
Running on http://127.0.0.1:5000/
-
环境变量 FLASK_APP 指明flask的启动实例
-
flask run -h 0.0.0.0 -p 8000 绑定地址 端口
-
flask run --help获取帮助
-
生产模式与开发模式的控制
通过FLASK_ENV环境变量指明
export FLASK_ENV=production 运行在生产模式,未指明则默认为此方式
export FLASK_ENV=development运行在开发模式
方式二:Pycharm启动
3.路由与蓝图
路由
3.1.查询路由信息
方式1:命令行方式
flask routes
Endpoint Methods Rule # Endpoint: 视图函数名字,Rule: 路径
-------- ------- -----------------------
index GET /
static GET /static/<path:filename>
- 在程序中获取
print(app.url_map)
方式2:在程序读取路由信息
for rule in app.url_map.iter_rules():
print('name={} path={}'.format(rule.endpoint, rule.rule))
# iter_rules返回一个列表
# rule.endpoint视图的名字
# rule.rule视图的路径
以json的方式返回应用内的所有路由信息
主视图,返回所有视图网址
"""
rules_iterator = app.url_map.iter_rules()
return json.dumps({rule.endpoint: rule.rule for rule in rules_iterator})
# json.dumps()是把python对象转换成json对象的一个过程,生成的是字符串
3.2.指定请求方式
- GET
- OPTIONS(自带) -> 简介版的GET请求,用于询问服务器接口信息
- HEAD(自带)
cors跨域解决 ,前端访问后端接口时,先发一个options请求,后端允许请求,option是询问接口的特征的,不涉及真实的业务数据,比如接口的允许方式,允许的请求源头,然后浏览器发真才发真正的GET请求
那django-cors是在中间件中拦截处理了option请求