flask中有两个上下文,一个是应用上下文(app),另一个是请求上下文(request)。
应用上下文current_app和请求上下文request 都是一个全局变量,所有请求都是共享的。
flask有特殊的机制,可以保证每次请求的数据都是隔离的。所以可以直接导入request对象,也不会被一些脏数据影响,并且不需要在每个函数中使用request的时候,都导入request对象。
print(app)
app2 = current_app
with app.app_context(): #添加上下文,让app2可以打印出来
print(app2)
@app.route('/')
def login():
#res = Response('京东网')
# res.set_cookie('username', 'cheney', max_age=60*60*24)
# session['username'] = 'jerry'
# session.permanent = True
# request.form.get('username')
# return res
username = session.get('username')
g.username = username
log_a()
log_b()
return '这是首页'
from flask import Flask, render_template
app = Flask(__name__)
#钩子函数
@app.route('/')
def index():
a = 1/0
return render_template('index.html')
@app.route('/login/')
def login():
return render_template('login.html')
#
# @app.before_first_request
# def before():
# print('这是请求之前第一个执行的函数')
# return '这是请求之前第一个执行的函数'
#
# @app.before_request
# def be_re():
# print('---这是请求之前执行的函数---')
# return '这是请求之前执行的函数'
#
# @app.after_request
# def after_request(ref):
# print('这是请求之后执行的函数')
# return ref
#
# @app.teardown_appcontext
# def teardown_app(res):
# print('不管程序是否出错,都会执行')
@app.context_processor #上下文处理器
def context_processor():
return {'username' : 'cheney'}
@app.errorhandler(404)
def errorhandler(res):
return'您搜索的页面不存在', 404
@app.errorhandler(500) #自定义状态码响应
def errhand(res):
return '服务器错误', 500
if __name__== '__main__':
app.run()