回顾
-
通过前几篇文章的内容, 我们已经搭建了基于
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
参考资料
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Python for Data Analysis
Wes McKinney / O'Reilly Media / 2012-11-1 / USD 39.99
Finding great data analysts is difficult. Despite the explosive growth of data in industries ranging from manufacturing and retail to high technology, finance, and healthcare, learning and accessing d......一起来看看 《Python for Data Analysis》 这本书的介绍吧!