2.请求与响应1.HTTP方法GET:浏览器通知服务器:只获取页面上的信息并发送给我。这是最常用的方法。POST:浏览器告诉服务器它要在URL上发布新信息。还有,服务器必须确保数据被存储并且只存储一次。这就是HTML表单通常将数据发送到服务器的方式。2.程序和请求上下文请求上下文:fromflaskimportrequest@app.route('/useragent/')defuserAgent():user_agent=request.headers.get('User-Agent')return'
你的浏览器is%s
'%user_agent程序上下文:fromflaskimportcurrent_app#print('current_app.name:',current_app.name)app_ctx=app.app_context()app_ctx.push()current_app.nameapp_ctx.pop()在激活应用上下文之前调用current_app.name会报错,但可以在推送上下文后调用。请注意,在应用程序实例上调用app.app_context()会获取应用程序上下文。也就是说,有两种创建程序上下文的方法:1.第一种是隐式的:每当推送请求上下文时,如果需要,就会创建程序上下文。因此,除非需要,否则您可以忽略程序上下文的存在。第二种是显式调用app_context()方法:fromflaskimportFlask,current_appapp=Flask(__name__)withapp.app_context():#在这个块中,current_app指向app。打印current_app.name3,响应Flask调用view函数后,其返回值会作为响应的内容。@app.route('/')defindex():return'
BadRequest
',400视图函数的返回值是response如果不想返回元组,则Flask视图函数也可以返回Response对象。make_response()函数接受一个或多个参数(与视图函数的返回值相同),返回一个Response对象。有时我们需要在视图函数中进行这种转换,然后在响应对象上调用各种方法来进一步设置响应。下面的例子创建了一个响应对象:fromflaskimportmake_response@app.route('/response/')defresponse():resp=make_response('
BadRequest
',400)returnrespoftheresponse两种方法:view函数直接返回一个元组(response,status,headers)view函数返回一个由make_resonse()函数生成的response对象4.Cookiescookies的操作:通过request对象的cookies属性访问Cookies。(请求对象的cookies属性是客户端提交的所有cookies的字典。)cookies是通过响应对象的set_cookie方法设置的。@app.route('/cookie/')defcookie():resp=make_response('setcookie')resp.set_cookie('name','myname')returnresp5,requesthook请求hook使用装饰器实现.Flask支持以下4个钩子:?before_first_request:注册一个在处理第一个请求之前运行的函数。?before_request:注册一个在每个请求之前运行的函数。?after_request:如果没有未处理的异常被抛出,注册一个在每个请求之后运行的函数。?teardown_request:注册一个在每个请求之后运行的函数,即使抛出未处理的异常也是如此。