现在我们开发了一个简单的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")
(四)4 请求-响应流程
原创
©著作权归作者所有:来自51CTO博客作者TtrToby的原创作品,请联系作者获取转载授权,否则将追究法律责任
上一篇:(三)3 路由和试图函数
下一篇:(五)flask扩展
![](https://ucenter.51cto.com/images/noavatar_middle.gif)
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
Jsp之四 servlet请求响应
读取请求(表单)的参数时,只需调用HttpServletRequest的getParameter方法,提供大小写敏感的参数名作为方法的参数。只要提供的参数名与html源代码中出现的参数名完全相同,就可以得到与终端用户的输入完全一致的结果。getParameter(String paraName)方法中如果参数存在但没有相应的值(如用户并没有填写相应的文本字段),则此方法返回一个“”的String;
HttpServletRequest getParameter HttpServletResponse web.xml JSP -
四、SpringMVC的请求和响应
文章目录SpringMVC的数据响应SpringMVC的数据响应方式页面跳转1. 返回字符串形式2. 返回ModelAndView对象3. 向request
SpringMVC spring ssm java mvc -
JavaWeb — 请求响应流程图JavaWeb Servlet 请求、响应 流程图 王睿丶
-
Spring MVC 执行(请求-->响应)流程
Spring MVC 执行请求-->响应流程流程
java Spring MVC -
Flask请求到响应的流程
Flask请求到响应的流程
flask 数据 post请求 get请求 参数类型