视图及路由
Flask简介
web应用程序的本质
web框架
flask
- flask常用扩展包
虚拟环境
为什么要搭建虚拟环境
虚拟环境可以搭建独立的python运行环境, 使得单个项目的运行环境与其它项目互不影响.- 所有的
虚拟环境都位于/home/下的隐藏目录.virtualenvs下 - 在开发过程中, 当需要使用
python的某些工具包/框架时需要联网安装 - 安装指令:安装flask框架flask -0.10.1版本
- sudo pip install flask==0.10.1
如何搭建虚拟环境
-
安装虚拟环境命令
sudo pip install virtualenv sudo pip install virtualenvwrapper -
配置环境变量
-
创建目录,用来存放虚拟环境
-
mkdir $HOME/.virtualenvs
-
-
打开~/.bashrc文件,并添加如下:
-
export WORKON_HOME=$HOME/.virtualenvs source /usr/local/bin/virtualenvwrapper.sh
-
-
运行
-
source ~/.bashrc
-
-
-
创建虚拟环境命令:
-
在python2中,创建虚拟环境
-
mkvirtualenv 虚拟环境名称
-
-
在python3中创建虚拟环境
-
mkvirtualenv -p python3 虚拟环境名称
-
-
如何使用虚拟环境
- 查看虚拟环境
- workon 两次tab键
- 使用虚拟环境命令
- workon 虚拟环境名称
- 退出虚拟环境命令
- deactivate
- 删除虚拟环境的命令
- rmvirtualenv 虚拟环境名称
- 要先退出当前虚拟环境 ,再执行删除
如何在虚拟环境中安装工具包
- pip install 包名称
实现hello world程序
在pycharm里面创建一个python项目,选选择之前的创建的虚拟环境
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return 'hello world!'
if __name__ == '__main__':
app.run(host="0.0.0.0", port=9090,debug=True )
相关的配置参数
初始化参数
- import_name
- Flask程序所在的包(模块),传‘name’就可以
- 可以决定Flask在访问静态文件时查找的路径
- static_path
- 已经不适用了,旧版本还可以用static_url_path代替
- 可以不传
- static_folder
- 静态文件存储的文件夹,可以不传,默认为
static
- 静态文件存储的文件夹,可以不传,默认为
- template_folder
- 模板文件存储的文件夹,可以不传,默认为
templates
- 模板文件存储的文件夹,可以不传,默认为
程序加载配置
- 从配置对象中加载(常用)
- app.config.from_object()
- 从配置文件中加载
- app.config.from_pyfile()
- 从环境变量中加载(了解)
- app.config.from_envvar()
使用方式
- 从配置对象中加载,创建配置的类
# 配置对象,里面定义需要给 APP 添加的一系列配置
class Config(object):
DEBUG = True
# 创建 Flask 类的对象,指向程序所在的包的名称
app = Flask(__name__)
# 从配置对象中加载配置
app.config.from_object(Config)
- 创建配置文件config.ini,在配置文件中添加配置
读取配置
- app.config.get()
- 在视图函数中使用 current_app.config.get()
- 注:Flask 应用程序将一些常用的配置设置成了应用程序对象的属性,也可以通过属性直接设置/获取某些配置:app.debug = True
app.run的参数
-
可以指定运行的主机IP地址,端口,是否开启调试模式
app.run(host="0.0.0.0", port=5000, debug = True)
路由基本定义
路由的传参
- 路由传递的参数默认当做 string 处理,也可以指定参数的类型
路由的请求方式
-
默认有GET,OPTIONS,HEAD
-
可以在装饰器参数里面加入method指定请求方式
@app.route('/demo2', methods=['GET', 'POST'])
PostMan的使用
视图常用逻辑
返回JSON
- 在使用 Flask 写一个接口时候需要给客户端返回 JSON 数据,在 Flask 中可以直接使用 jsonify 生成一个 JSON 的响应
- 了解另外另个方法
- json.dump
- json.load
重定向
# 重定向
@app.route('/demo5')
def demo5():
return redirect('指定url')
-
重定向到自己写的视图函数
- 可以直接填写自己 url 路径
- 也可以使用 url_for 生成指定视图函数所对应的 url
-
重定向到带有参数的视图函数
-
在 url_for 函数中传入参数
return redirect(url_for('user_info', user_id=100))
-
自定义状态码
-
在 Flask 中,可以很方便的返回自定义状态码,以实现不符合 http 协议的状态码
@app.route('/demo6') def demo6(): return '状态码为 666', 666
正则匹配路由
- 实现步骤
- 导入转换器基类:在 Flask 中,所有的路由的匹配规则都是使用转换器对象进行记录
- 自定义转换器:自定义类继承于转换器基类
- 添加转换器到默认的转换器字典中
- 使用自定义转换器实现自定义匹配规则
自定义转换器的其他两个函数
- to_python:
- to_url:
系统自带的转换器
DEFAULT_CONVERTERS = {
'default': UnicodeConverter,
'string': UnicodeConverter,
'any': AnyConverter,
'path': PathConverter,
'int': IntegerConverter,
'float': FloatConverter,
'uuid': UUIDConverter,
}
100





