python|web应用框架|提升动态路由

lxf2023-05-06 00:39:21

上一篇详细介绍web应用框架的帖子,己经阐述了怎么添加动态路由,这里简单回望下: 在咱们整理的架构中,大家加上动态路由,是采用了正则匹配,另外在登记注册的情况下,必须标明该路由器是要求路由器,即: regular=True。如果还没有看了上一篇文章的小伙伴们,建议还是看上一篇文章,便于可以做到承前启后:

python|web应用框架|提升动态路由: /post/722896…

本文所整理的编码,早已放在了gitee上:gitee.com/pdudo/golea…

文中所依靠的自然环境为:

python|web应用框架|提升动态路由

在现在的架构中,我们不难发现一个很恶心的事情,就是没有办法自定响应头,我们都是直接从架构里边写死了,还可以在myWeb.py编码中查询:

python|web应用框架|提升动态路由

因此本文还将继续撰写web应用框架,将增加一个回应目标response

什么叫回应目标

我们是不是留意到先前架构的一个问题,那便是我们能做的就是界定 状态码 和 报文格式行为主体,而且还是根据return方式返回,编码实例如下所示:

python|web应用框架|提升动态路由

尽管接受手机客户端数据信息,我们通过r来获得,但我们想向手机客户端推送一些内容,全都要根据return做,而r只有获得客户端值,是否很不便捷呢? 因此我们想借鉴flask架构,做一个简单的回应目标出去,不但可以接受手机客户端主要参数,还可以通过其架构本身给予的方法去设定web情况特性,比如: headers等。

我们怎样新增加回应目标呢?

是否记得大家上一篇文章所提到的python的值传递和引用传递。我们能新增加一个类,由于类在python里是引用传递的,因此在函数中对于该值进行了一切改动,都会影响原来数值。

这儿写一个类传送实例:

python|web应用框架|提升动态路由

在相关编码中,大家重新定义了一个类称为className, 在创建对象为主要目标时,必须传到一个主要参数x,此外,此类还有一个方式setY,此方法会接受一直值y,而且取值给self.y。在主函数中,我们先创建对象一个对象,传到数据信息1,然后将案例放进函数公式modify_class中,该变量会启用实际上例的setY方式,以上书传到一个99。并且在函数公式实行前后左右,都打印出了一下对象xy数值。

程序执行结论:

python|web应用框架|提升动态路由

由此可见,在函数中传输class目标,的确是引用传递。

我们该如何新增加回应目标呢? 我们先界定一个类response用于储放回应对象信息内容,然后在每一个手机客户端连接到服务器后,为每一个可交换的配置一个response目标,该目标中我们应该先把wsgi框架的environ引进,然后再定义一些常用的来存放web的配置信息,如header和状态码等。在客户自定义函数中,会让该值进行调整,咱们就其执行完毕后,由架构取回,开展赋值,改动web情况,然后回到手机客户端,到此,回应目标执行完毕。

新增加回应目标代码开发

回应目标类的定义

我们首先界定回应对象类,其response类编码如下所示:

class response():
    def __init__(self,environ):
        self.response = environ
        self.headers = {}
        self.httpcode = 200
        self.regular = ()

    def set_headers(self,key,val):
        if key and val:
            self.headers[key] = val
        else:
            raise ValueError("set header , Key or val is empty")

    def status_code(self,code):
        self.httpcode = code

以上编码,大家重新定义了一个类response,在创建对象为主要目标时,必须传到environ信息内容。此类有4个特性,分别为:

  • response: 手机客户端http要求信息内容。
  • headers: 回到客户端响应头。
  • httpcode: http状态码。
  • regular: 动态路由捕捉过的可视化数据。

此外,也有2种方法:

  • set_headers: 设定响应头,接受一个keyvalue,存放到self.headers中。
  • status_code: 设定回到状态码,存放到self.httpcode中。

架构上对回应对象分析

以上,大家简单的回应目标类早已建立完毕了,如今一起来看看在wsgi中该如何撰写便于来存放该信息。

wsgi运行函数中,我们应该将response创建对象为主要目标,并为将客户端environ发送给案例,编码如下所示:

def application(environ, start_response):
r = response(environ)

在形成响应报文headers时,我们应该将目标里的headers取出,放进页面上,其编码如下所示:

headers = [(key,val) for key , val in r.headers.items()]

以上编码,大家使用使用迭代器完成赋值词典,把它存放到页面上,目录的每一个值类型是数组,数组有2个信息,前面一种是词典的key,后乃是词典的value。该算法设计,都是wsgi中规定的。

此外,还有很多小细节,例如,将捕捉过的动态路由数据储存到regular中,从httpcode中读载入回应状态码,进而回到给手机客户端。

针对应用架构的人来说,怎样启用架构呢? 如今启用架构案例如下所示:

import myWeb

@myWeb.routes(path="/ip",methods="all")
def indx(r):
    print(r.response["REMOTE_ADDR"])
    return r.response["REMOTE_ADDR"]

@myWeb.routes(path="/hello/{name}",methods="get",regular=True)
def helloWold(r):
    name = r.regular
    print("捕捉过的动态路由值: " , r.regular)
    r.set_headers("Server", "pdudo_web_sites")
    r.set_headers("Content-type", "text/html")
    r.httpcode = 200

    return "hello %s" % (name)

在相关编码中,并不需要为动态路由附加界定形参来接受值得了,每一个值由回应目标中获得,并且还能根据set_headers来新增加headers,是否比以前方便快捷了啦?

系统测试

己经将myWeb.py撰写好啦,这儿只是编写main.py,编码如下所示:

python|web应用框架|提升动态路由

大家运行代码后,浏览/ip/hello/pdudo路由器尝试一下:

python|web应用框架|提升动态路由

在查看一下web云服务器日志:

python|web应用框架|提升动态路由

由此可见,提升回应目标取得成功。

汇总

该一篇文章,又为他们的web应用框架增加了回应目标,不但能设heade,还能够设定状态码等,还可以把我们捕捉过的动态路由名字加上,那样用户在用该框架的情况下,就不会出现装饰器中的函数公式该如何编写了。

本站是一个以CSS、JavaScript、Vue、HTML为中心的前端开发技术网址。我们的使命是为众多前端工程师者提供全方位、全方位、好用的前端工程师专业知识和技术服务。 在网站上,大家可以学到最新前端开发技术,掌握前端工程师最新发布的趋势和良好实践。大家提供大量实例教程和实例,让大家可以快速上手前端工程师的关键技术和程序。 本站还提供了一系列好用的工具软件,帮助你更高效地开展前端工程师工作中。公司提供的一种手段和软件都要经过精心策划和改进,能够帮助你节约时间精力,提高研发效率。 此外,本站还拥有一个有活力的小区,你可以在社区里与其它前端工程师者沟通交流技术性、交流经验、处理问题。我们坚信,街道的能量能够帮助你能够更好地进步与成长。 在网站上,大家可以寻找你需要的一切前端工程师网络资源,使您成为一名更加出色的网页开发者。欢迎你添加我们的大家庭,一起探索前端工程师的无限潜能!