回顾
-
通过前几篇文章的内容, 我们已经搭建了基于
Flask
框架的一个简单的Web
应用,server.py
的代码如下from flask import Flask, make_response from flask.views import MethodView app = Flask(__name__) class IndexHandler(MethodView): def get(self): resp = make_response('It is a GET request') resp.headers['Strict-Transport-Security'] = 'max-age=15768000; includeSubDomains; preload' return resp if __name__ == '__main__': app.add_url_rule('/', view_func=IndexHandler.as_view('index')) context = ('./server.cer', './server.key') app.run(port=443, host='0.0.0.0', debug=True, threaded=True, ssl_context=context)
抽象出 Page
类
-
由于我们在以后的每个页面的
Handler
中都要用到HSTS
, 以及其他一些共用的特性, 我们将其提取出来, 抽象成一个Page
类, 修改server.py
如下from flask import Flask, make_response from flask.views import MethodView app = Flask(__name__) class Page(MethodView): def render(self, resp): resp.headers['Strict-Transport-Security'] = 'max-age=15768000; includeSubDomains; preload' return resp class IndexHandler(Page): def get(self): content = 'It is a GET request' return self.render(content) if __name__ == '__main__': app.add_url_rule('/', view_func=IndexHandler.as_view('index')) context = ('./server.cer', './server.key') app.run(port=443, host='0.0.0.0', debug=True, threaded=True, ssl_context=context)
提取其他共用特性
-
get_args()
args
一般出现在GET
请求中, 比如 Google 搜索时地址栏出现的https://www.google.com/search?q=awesome
, 其中?
后面的内容就是args
, 以key-value
的形式出现. 对应刚才的例子,key
就是q
,value
就是awesome
. 如果有多组key-value
, 中间就用&
连接, 如?q=awesome&type=server
. 这种形式很容易让我们联想到Python
的字典结构dict
. 根据 文档 , Flask 是通过 ImmutableMultiDict 来存储args
的. 我们可以在Page
类中增加get_args()
方法from flask import request class Page(MethodView): def get_args(self, key): return request.args.get(key)
这样, 我们就可以通过调用
get_args()
来获取用户请求中的参数了, 举个栗子class AwesomeHandler(Page): def get(self): if self.get_args('q') == 'awesome': # do something return 'This is an awesome page!'
-
同样地, 我们可以在
Page
类中增加其他特性, 如get_date()
,get_referer()
,get_cookies()
等等, 编写好的Page
类如下from flask import request from datetime import datetime, date class Page(MethodView): def render(self, resp): resp.headers['Strict-Transport-Security'] = 'max-age=15768000; includeSubDomains; preload' return resp def get_args(self, key): return request.args.get(key) def get_date(self, year=0, month=0, day=0): if year and month and day: return date(year, month, day) else: return date.today() def get_referer(self): return request.headers.get('referer') def get_cookies(self): return request.cookies
参考资料
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
离散数学及其应用(原书第6版·本科教学版)
[美] Kenneth H. Rosen / 袁崇义、屈婉玲、张桂芸 / 机械工业出版社 / 2011-11 / 49.00元
《离散数学及其应用》一书是介绍离散数学理论和方法的经典教材,已经成为采用率最高的离散数学教材,仅在美国就被600多所高校用作教材,并获得了极大的成功。第6版在前5版的基础上做了大量的改进,使其成为更有效的教学工具。 本书基于该书第6版进行改编,保留了国内离散数学课程涉及的基本内容,更加适合作为国内高校计算机及相关专业本科生的离散数学课程教材。本书的具体改编情况如下: · 补充了关于范式......一起来看看 《离散数学及其应用(原书第6版·本科教学版)》 这本书的介绍吧!