高级处理
1.上下文
使用范围:从某次请求开始,到此次请求结束
请求上下文 (request,session)
应用上下文(current_app,g)
from flask import Flask,request,g
from nwes import func
app = Flask(__name__)
@app.route('/')
def index():
print(request.url)
g.name = 'zs'
func()
return 'index'
if __name__ == '__main__':
# print(request.url)
app.run(host='0.0.0.0', port=8080, debug=True)
2,四种请求勾子
用于监听请求的各种事件
from flask import Flask,abort
app = Flask(__name__)
@app.before_first_request # 服务器第一次被请求前调用,一般用于初始化,如数据库连接
def before_first_request():
print("before_first_request")
@app.before_request # 每次服务器被请求前调用,一般完成准备工作,如参数校验,黑名单过滤,数据统计等
def before_request():
print("before_request")
@app.after_request # 每次请求后没有异常时调用(视图函数执行完但还未返回响应对象),一般完成响应的加工处理,如设置统一的响应报文,一定要返回加工后的响应对象
def after_request(response):
print("after_request")
# response.headers['content-type']='application/json'
return response
@app.teardown_request # 每次请求后无论有没有异常都调用,一般完成收尾工作,如资源回收,异常统计
def teardown_request(e):
print("teardown_request,%s" %e)
@app.route('/')
def index():
print('index')
return 'index'
3,正则转换器
作用:对路由变量进行格式过滤
所有的转换器的父类都是BaseConverter
from flask import Flask, url_for
app = Flask(__name__)
@app.route('/')
def index():
# url_a = url_for('user',userid=3)
# print(url_a)
return 'index'
# @app.route('/user/<int:userid>') # 如果路由变量不能转为整型,则抛出404错误
@app.route('/user/<string(length=3):userid>') # 部分转换器可以设置参数,让过滤规则更加灵活
def user(userid):
print(userid)
return 'user'
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8080, debug=True)
4,参数和配置
4.1 设置参数
from flask import Flask
app = Flask(__name__,
static_folder='static', # 设置静态资源的存储路径,默认为static
static_url_path='/img', # 设置静态资源的访问路径,提高用户体验(常用)
template_folder='templates') # 设置模板资源的存储路径,默认为templates
@app.route('/')
def index():
return 'index'
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8080, debug=True)
4.2 配置
flask的配置通过config属性来设置
app.config.from_object() 从对象中加载配置
from flask import Flask
app = Flask(__name__)
# 修改flask配置的三种方法
# class Config:
# DEBUG = True
#
# app.config.from_object(Config) # 从对象中配置(常用)
# app.config.from_pyfile('config.py') # 从py文件中设置
app.config.from_envvar('Config_env') # 从环境变量中设置(最不常用,基于py文件使用)
@app.route('/')
def index():
return 'index'
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8080)
5,脚本启动
如何在服务器上运行web应用
脚本启动组件flask-script可以让开发者使用更方便的命令来启动和配置we应用
脚本启动的代码
from flask import Flask
from flask_script import Manager
app = Flask(__name__)
# 1,创建管理器
mgr = Manager(app)
@app.route('/')
def index():
return
if __name__ == '__main__':
mgr.run() # 使用管理器来启动web应用
#可以在prcharm中设置参数再运行
启动和配置web应用的命令 python main.py runserver -h 0.0.0.0 -p 8000 -d
pycharm运行脚本启动项目