• 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用于构建请求对象和响应对象。

  • 相关阅读:
    746. 使用最小花费爬楼梯
    1283. 使结果不超过阈值的最小除数
    307. 区域和检索
    303. 区域和检索
    474. 一和零
    600. 不含连续1的非负整数
    命名规范【转】
    .NET中RabbitMq的使用
    C#中json字符串的序列化和反序列化
    c#发送post请求(带参数)
  • 原文地址:https://www.cnblogs.com/dancesir/p/7808360.html
Copyright © 2020-2023  润新知