回顾
-
通过前几篇文章的内容, 我们已经搭建了基于
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
参考资料
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
别怕,Excel VBA其实很简单
Excel之家 (Excel Home) / 人民邮电出版社 / 2012-10-1 / 49.00元
《别怕,excel vba其实很简单》考虑到大多数读者没有编程基础的实际情况,用浅显易懂的语言和生动形象的比喻,并配合大量插画,介绍excel中看似复杂的概念和代码、从简单的宏录制、vba编程环境和基础语法的介绍,到常用对象的操作与控制、excel事件的调用与控制、用户界面设计、代码调试与优化、都进行了形象的介绍。 《别怕,excel vba其实很简单》适合想提高工作效率的办公人员,特别是经......一起来看看 《别怕,Excel VBA其实很简单》 这本书的介绍吧!