Webpy(Web开发框架简单应用)

本文介绍了如何使用webpy框架实现一个简单的服务器,以及PythonWeb开发中的WSGI标准。文章详细讲解了application()函数、URL映射及其类型,包括精确匹配、通配符匹配和正则表达式匹配。此外,还分析了webpy的架构层次,包括应用层、中间层和网络层的作用。
摘要由CSDN通过智能技术生成

目录

前言:

简单的webpy服务器实现

application(urls, globals())函数

URL映射

url(理解)

映射类型

webpy架构分析


前言:

Python Web 开发中,服务端程序可以分为两个部分,一是服务器程序,二是应用程序。前者负责把客户端请求接收,整理,后者负责具体的逻辑处理。为了方便应用程序的开发,我们把常用的功能封装起来,成为各种 Web 开发框架,例如 Django,Flask,Webpy。不同的框架有不同的开发方式,但是无论如何,开发出的应用程序都要和服务器程序配合,才能为用户提供服务。这样,服务器程序就需要为不同的框架提供不同的支持。这样混乱的局面无论对于服务器还是框架,都是不好的。对服务器来说,需要支持各种不同框架,对框架来说,只有支持它的服务器才能被开发出的应用使用。

这时候,标准化就变得尤为重要。我们可以设立一个标准,只要服务器程序支持这个标准,框架也支持这个标准,那么他们就可以配合使用。一旦标准确定,双方各自实现。这样,服务器可以支持更多支持标准的框架,框架也可以使用更多支持标准的服务器。

Python Web 开发中,这个标准就是 Python Web Server Gateway Interface,即 WSGIWSGI是作为 Web 服务器与 Web 应用程序或应用框架之间的一种低级别的接口,它是基于现存的 CGI标准而设计的。WSGI Web 组件分为三类:Web 服务器,Web 中间件,Web 应用程序web.py 是一款轻量级的 python web 开发框架,简单、高效、学习成本低,特别适合作为 python web 开发的入门框架。

简单的webpy服务器实现

#-*- coding: utf-8 -*-
import web
'''
'/(.*)' 是一个正则表达式,匹配了以斜杠开头的任意字符序列,
(.*)表示匹配任意字符序列并捕获为一个分组。这个URL路径会匹配所有的请求,
因为(.*)会匹配任意路径。
'''
urls = (
    '/(.*)', 'hello',  # 一组url匹配
)
# 创建一个列举这些URL的application
app = web.application(urls, globals())

class hello:
    def GET(self,name):
        if not name:
            name = "world!"
        return ("hello "+ name)

if __name__ == '__main__':
    app.run()

运行服务:(后者指定端口号)

python app.py (或python app.py 8000)

application(urls, globals())函数

这段代码中的 urls 变量应该是一个 URL 映射表,而 globals() 则是 Python 内置函数,返回当前全局符号表的字典。在这里,urls 包含了 URL 与处理函数之间的映射关系,而 globals() 则将当前的全局符号表传递给了应用程序实例的构造函数,以便让框架知道哪些函数可以处理哪些 URL 请求。

URL映射

简单来说,URL映射就是一个 URL请求由哪块代码(类、函数)来处理。web.py的 URL控制模式是简单、强大、灵活的。在每个应用的最顶部,通常会看到整个 URL调度模式被定义在元组中。

这些元组的格式是:URL路径,处理类这组定义有多个。可以利用强大的正则表达式去设计更灵活的 URL路径。

url(理解)

假设我们有一个简单的web应用,它有三个页面:主页、关于页面和联系页面。我们可以使用 web.py 来定义这些页面的URL模式和对应的处理函数。

import web

urls = (
    '/', 'index',    # 主页
    '/about', 'about',   # 关于页面
    '/contact', 'contact',   # 联系页面
)

class index:
    def GET(self):
        return "这是主页"

class about:
    def GET(self):
        return "这是关于页面"

class contact:
    def GET(self):
        return "这是联系页面"

if __name__ == "__main__":
    app = web.application(urls, globals())
    app.run()

在这个例子中,我们定义了三个URL模式和对应的处理函数:

  1. '/': 当用户访问网站的根路径时,即主页,将调用 index 类的 GET 方法。
  2. '/about': 当用户访问 /about 路径时,将调用 about 类的 GET 方法。
  3. '/contact': 当用户访问 /contact 路径时,将调用 contact 类的 GET 方法。

每个处理函数返回的是一个简单的字符串,用于表示对应页面的内容。当然,在一个真实的web应用中,这些处理函数通常会返回HTML模板或其他更复杂的内容。

通过这种方式,我们可以为不同的URL路径指定不同的处理函数,从而实现不同页面的逻辑。

映射类型

在 web.py 中,URL 匹配通常有三种类型:

  1. 精确匹配: 这种匹配类型要求 URL 请求与定义的 URL 模式完全匹配。如果请求的 URL 与任何一个定义的 URL 模式完全相同,则将请求路由到相应的处理函数或类。例如,在以下 URL 映射中,'/about' 将仅匹配 /about 这个精确的 URL:

    urls = (
       '/about', 'AboutHandler'
    )
  2. 通配符匹配: 通配符匹配允许在 URL 模式中使用通配符 *,以便匹配某个 URL 模式的任意部分。这对于匹配动态生成的 URL 或包含参数的 URL 很有用。例如,在以下 URL 映射中,'/blog/*' 将匹配所有以 /blog/ 开头的 URL:

    urls = (
       '/blog/*', 'BlogHandler'
    )
  3. 正则表达式匹配: 正则表达式匹配允许使用正则表达式来定义复杂的 URL 模式,以匹配特定模式的 URL 请求。在 web.py 中,你可以使用 Python 的正则表达式语法来定义 URL 模式。例如,在以下 URL 映射中,使用了正则表达式来匹配以 /article/ 开头且后面跟着数字的 URL:

    urls = (
       '/article/(\d+)', 'ArticleHandler'
    )

无论采用哪种匹配类型,web.py 都会根据请求的 URL 进行匹配,并将请求路由到相应的处理函数或类。

webpy架构分析

webpy架构可以分为三层:应用层,中间层,网络层。其中,

应用层负责处理应用逻辑,并暴露除用户 app 的一个 wsgi 调用接口;

中间层提供应用层和网络层的对接服务,用户可以在这里选择使用不同的服务器模式来执行wsgi app。 应用框架的主要逻辑在 application.py 文件。用户对服务器请求之后,服务器将请求相关信息进行处理(主要是得到 wsgi 调用所需要的两个参数 environstart response)并传给 wsgi方法进行调用,这个 wsgi方法就是wsgifunc()函数

  • 22
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值