Web 开发学习笔记(5) --- 抽象出 Page 类

栏目: Python · 发布时间: 6年前

回顾

  • 通过前几篇文章的内容, 我们已经搭建了基于 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 VBA其实很简单

Excel之家 (Excel Home) / 人民邮电出版社 / 2012-10-1 / 49.00元

《别怕,excel vba其实很简单》考虑到大多数读者没有编程基础的实际情况,用浅显易懂的语言和生动形象的比喻,并配合大量插画,介绍excel中看似复杂的概念和代码、从简单的宏录制、vba编程环境和基础语法的介绍,到常用对象的操作与控制、excel事件的调用与控制、用户界面设计、代码调试与优化、都进行了形象的介绍。 《别怕,excel vba其实很简单》适合想提高工作效率的办公人员,特别是经......一起来看看 《别怕,Excel VBA其实很简单》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具