zoukankan      html  css  js  c++  java
  • Werkzeug库——wrappers模块

    Werkzeug库中的wrappers模块主要对requestresponse进行封装。request包含了客户端发往服务器的所有请求信息,response包含了web应用返回给客户端的所有信息。wrappers模块对请求和响应的封装简化了客户端、服务器和web应用通信的流程。本文主要介绍wrappers模块中重要的类。

    BaseRequest

    BaseRequest是一个非常基础的请求类,它可以和其他的“混合”类结合在一起构建复杂的请求类。只要传递一个环境变量environ(由WSGI服务器根据请求产生),便可以构造一个BaseRequest实例。其构造函数如下:

    初始化后,形成的实例request便具有了一些属性可以访问,这些属性只能以“只读”的方式访问。例如:

    • url_charset
    • want_form_data_parsed
    • stream
    • args
    • data
    • form
    • values
    • files
    • cookies
    • headers
    • path
    • full_path
    • script_root
    • url
    • base_url
    • url_root
    • host_url
    • host
    • access_route
    • remote_addr

    BaseRequest中还有两个类方法比较常用:

    from_values(cls, *args, kwargs)**

    这个类方法可以根据提供的参数构建一个请求。

    application(cls, f)

    这个类方法是一个装饰器,可以用来装饰WSGI可调用对象或函数。

    以上属性和方法的具体用法可以参考Request——werkzeug文档

    BaseResponse

    BaseResponse类是一个响应类,用它可以封装一个response对象。response对象最大的特点是它是一个WSGI应用。

    在之前介绍WSGI规范的文章中曾介绍过Web服务器网关,它简化了服务器和web应用之间的通信过程,它要求服务器和web应用要遵循WSGI规范进行开发。对于web应用而言,应用应该实现一个函数或者一个可调用对象,这样WSGI服务器可以通过调用myWebApp(environ, start_response)从web应用获得响应内容。

    response响应对象就是这样一个WSGI应用对象。在其实现过程中有一个__call__方法,可以实现对一个response对象的调用。代码如下:

    这样,我们就可以很清楚地理解WSGI应用的实现过程。下面是一个非常简单的WSGI应用。

    上面的小例子的实现步骤分析:

    1. 根据传入web应用的environ构造请求对象request
    2. web应用构造响应对象response
    3. 调用响应对象response。调用过程中产生三个值:app_iterstatusheaders,其中statusheaders作为参数传递给函数start_response用于生成响应报文首行的相关信息,而app_iter作为响应的内容(它是一个可迭代对象)返回给WSGI网关
    4. WSGI网关将返回的信息组成响应首行、响应首部、响应主体等,形成响应报文发回给客户端。

    BaseResponse类中还有一些属性和方法,以下属性和方法的具体用法可以参考Response——werkzeug文档

    • 属性
      • status_code
      • status
      • data
      • is_stream
      • is_sequence
      • ······
    • 方法
      • call_on_close(func)
      • close()
      • freeze()
      • force_type() 类方法
      • from_app() 类方法
      • set_data()
      • get_data()
      • _ensure_sequence()
      • make_sequence()
      • iter_encoded()
      • calculate_content_length()
      • set_cookie()
      • delete_cookie()
      • get_wsgi_headers(environ)
      • get_app_iter(environ)
      • get_wsgi_response(environ)
      • __call__(environ, start_response)
      • ······

    Mixin类

    BaseRequest类和BaseResponse类是请求和响应最基础的类。wrappers模块中还提供了一些Mixin类,用于扩展请求类和响应类。

    有关请求类的Mixin

    有关请求类的Mixin类主要有:

    • AcceptMixin类 ——请求报文中关于客户端希望接收的数据类型的类。
    • ETagRequestMixin类 ——请求报文中关于Etag和Cache的类。
    • UserAgentMixin类 ——请求报文中关于user_agent的类。
    • AuthorizationMixin类 ——请求报文中关于认证的类。
    • CommonRequestDescriptorsMixin类 ——通过这个类可以获取请求首部中的相关信息。

    有关响应类的Mixin

    有关响应类的Mixin类主要有:

    • ETagResponseMixin类 ——为响应增加Etag和Cache控制的类。
    • ResponseStreamMixin类 ——为响应可迭代对象提供一个“只写”的接口的类。
    • CommonResponseDescriptorsMixin类 ——通过这个类可以获取响应首部中的相关信息。
    • WWWAuthenticateMixin类 ——为响应提供认证的类。

    RequestResponse

    终于讲到Request类和Response类了。

    Request类继承自BaseRequest类,并且结合一些请求相关的Mixin类,具体如下:

    Response类继承自BaseResponse类,并且结合一些响应相关的Mixin类,具体如下:

    至此,可以从wrappers模块中引入Request类和Response用于构建请求对象和响应对象。

  • 相关阅读:
    Android 解决小米手机Android Studio安装app 报错的问题It is possible that this issue is resolved by uninstalling an existi
    Android Unresolved Dependencies
    Android studio 自定义打包apk名
    Android Fragment与Activity交互的几种方式
    魅族和三星Galaxy 5.0webView 问题Android Crash Report
    Android几种常见的多渠道(批量)打包方式介绍
    Android批量打包 如何一秒内打完几百个apk渠道包
    上周热点回顾(9.30-10.6)团队
    上周热点回顾(9.23-9.29)团队
    上周热点回顾(9.16-9.22)团队
  • 原文地址:https://www.cnblogs.com/dancesir/p/7808360.html
Copyright © 2011-2022 走看看