首页 > 代码库 > (四)4 请求-响应流程
(四)4 请求-响应流程
现在我们开发了一个简单的Flask小程序,知道用户在浏览器中输入一个URL对应到哪个视图函数进行处理。那么问题来了,怎么去进行处理一些比较复杂的业务逻辑呢? 一、程序上下文 1、整个app范围,也就是说是全局的(程序级别)的上下文 怎么理解这个上下文呢?就是在所有的这个请求当中,我们共享的是同一块内存 #coding:utf-8 from flask import Flask, session, request app = Flask(__name__) @app.route("/") def index(): ‘‘‘首页‘‘‘ user = session.get("user",None) # 如果用户已经登录,此处打印用户消息 print("user in index: %s") % user return "Hello World!" @app.route("/login/<user>/") def login(user): ‘‘‘模拟登录‘‘‘ session["user"] = user # 将用户信息存入到session print("login user: %s") % user return "login success" @app.route("/logout/") def logout(): ‘‘‘模拟登出‘‘‘ user = session["user"] print("logout user:%s") % user # 将用户信息从session删除 session["user"] = None return "logout success" #使用session必须要设置改key,随机的字符串即可 app.secret_key = "A0Z98/dfDER747#O%^!/,<87UHRHF" if __name__ == "__main__": app.run(debug=True,host="0.0.0.0") 2、请求上下文 #coding:utf-8 from flask import Flask, request app = Flask(__name__) @app.route("/") def index(): #打印请求来源信息 agent = request.headers.get("User-Agent",None) return "From:%s" % agent @app.route("/head") def head(): headers = request.headers response = "" for k, v in headers.items(): response += "%s: %s</br>" % (k,v) return response if __name__ == "__main__": app.run(debug=True,host="0.0.0.0") 二、请求的调度(就是去限制一些请求) #coding:utf-8 from flask import Flask, request app = Flask(__name__) @app.route("/", methods=[‘POST‘]) #只能post方式访问 def index(): #打印headers信息 agent = request.headers.get(‘User-Agent‘,None) return "From: %s" % agent @app.route("/data/", methods=[‘GET‘,‘POST‘,‘HEAD‘,‘OPTIONS‘]) def data(): ‘‘‘ 处理不同类型的请求 curl -i -X POST "http:/127.0.0.1:5000/data/" curl -i -X GET "http:/127.0.0.1:5000/data/" curl -i -X OPTIONS "http:/127.0.0.1:5000/data/" ‘‘‘ #处理post请求 if request.method == "POST": return "From Post" elif request.method == "GET": return "From GET" return "From other" if __name__ == "__main__": # print(app.url_map) app.run(debug=True,host="0.0.0.0") 三、请求之前做一些事情,请求完之后做一些事情 #coding:utf-8 from flask import Flask, session, request app = Flask(__name__) @app.route("/") def index(): ‘‘‘首页‘‘‘ user = session.get("user",None) # 如果用户已经登录,此处打印用户消息 print("user in index: %s") % user return "Hello World!" @app.route("/login/<user>/") def login(user): ‘‘‘模拟登录‘‘‘ session["user"] = user # 将用户信息存入到session print("login user: %s") % user return "login success" @app.route("/logout/") def logout(): ‘‘‘模拟登出‘‘‘ user = session["user"] print("logout user:%s") % user # 将用户信息从session删除 session["user"] = None return "logout success" @app.route("/error/") def get_error(): ‘‘‘触发异常‘‘‘ raise @app.before_request def beforce_request(): ‘‘‘在每个请求之前执行‘‘‘ print(">>>>>>>>>>>starting...") @app.after_request def after_request(response): ‘‘‘如果没有未处理的异常抛出,在每次请求之后运行‘‘‘ print(">>>>>>>>>>>ending...") return response @app.teardown_request def teardown_request(exception): ‘‘‘即使有未处理的异常抛出,也在每次请求之后运行‘‘‘ print("#############teardown###############") #使用session必须要设置改key,随机的字符串即可 app.secret_key = "A0Z98/dfDER747#O%^!/,<87UHRHF" if __name__ == "__main__": app.run(debug=True,host="0.0.0.0") 五、请求的响应 #coding:utf-8 from flask import Flask, request,make_response, redirect, url_for, abort app = Flask(__name__) @app.route(‘/‘) def index(): #打印请求来源信息 return "<h1>Bad Request</h1>", 400 @app.route("/test/") def test(): """在response中设置其他值""" # 打印headers信息 response = make_response("<h1>this document carries a cookie!</h1>") # 设置一个cookie response.set_cookie(‘answer‘,‘right‘) return response @app.route("/go/") def go_where(): """重定向""" #重定向到百度 # return redirect("http://www.baidu.com") #重定向到test页面 return redirect(url_for("test")) @app.route("/down/") def down(): """直接返回状态码""" # abort(404) abort(500) if __name__ == "__main__": app.run(debug=True,host="0.0.0.0")
本文出自 “Fresh Air Team” 博客,请务必保留此出处http://freshair.blog.51cto.com/8272891/1927408
(四)4 请求-响应流程
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。