美文网首页
写一个简单的WEB框架

写一个简单的WEB框架

作者: 飘涯 | 来源:发表于2019-01-30 12:13 被阅读13次

前面都是从httpserver中添加功能,下面希望把添加web功能写成框架的形式,如果进行开发,只需要响应的功能模块就行,而不是在httpserver中改写。

想要实现的功能

外部调用,外部功能更新

   urls=[
        ("/",show_ctime),
        ("/ctime",show_ctime),
        ("/sayhello",say_hello)
    ]

    app = Applittation(urls)
    http_server = HTTPServer(app)
    http_server.bind(8000)
    http_server.start()

创建一个通用框架的类

class Applittation(object):
    '''框架的核心部分,框架的主题程序'''
    def __init__(self,urls):
        self.urls = urls

    def __call__(self, env, start_response):
        path = env.get("PATH_INFO","/")
        print(path)
        for url,handler in self.urls:
            if path == url:
                print(handler)
                return handler(env,start_response)
        #代表未找到路由信息404错误
        status ="404 Not Found"
        headers =[]
        start_response(status,headers)
        return "not found"

外部随便编写几个功能模块

def show_ctime(env,start_response):
    states = "200 OK"
    headers = {
        ("Content-Type", "text/plain")
    }
    start_response(states, headers)
    return time.ctime()


def say_hello(env,start_response):
    states = "200 OK"
    headers = {
        ("Content-Type", "text/plain")
    }
    start_response(states, headers)
    return "say hello"

精简服务模块

传入框架app模块

    def __init__(self,application):
        '''构造函数application指的是框架的app'''
        self.serves_socket = socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM)
        self.serves_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        self.app = application

总结

  • 用回调函数,对类直接进行调用
def __call__(self, env, start_response):
  • 把功能进行路由分发
path = env.get("PATH_INFO","/")
        print(path)

结果

image.png

启动更新,通过服务器启动程序

  • 直接通过app对象调用框架里面的urls
urls = [
    ("/", show_ctime),
    ("/ctime", show_ctime),
    ("/sayhello", say_hello)
]

app = Applittation(urls)

  • 启动设置
ef main():
    sys.path.insert(1,WSGI_PYTHON_DIR)
    #启动方式 python MyServer.py MyWebFramework:app
    if len(sys.argv)<2:
        sys.exit("python mywebserver.py mpdule:app")
    module_name, app_name = sys.argv[1].split(":")
    m = __import__(module_name)
    app = getattr(m,app_name)
    http_server = HTTPServer(app)
    http_server.bind(8000)
    http_server.start()

相关文章

  • Mojo

    简介 Mojo是一个强大的WEB开发工具包,它包含写简单Web应用和写高度分层的Web框架(如:Mojolicio...

  • 写一个简单的WEB框架

    前面都是从httpserver中添加功能,下面希望把添加web功能写成框架的形式,如果进行开发,只需要响应的功能模...

  • HTML开发 h5引入vue和Swiper

    项目要求写一个静态web页面,web小白,只会点vue,于是使用了vue框架,写了一个页面;组长说简单的静态页面可...

  • python-web框架

    一个简单的web框架,web框架的概念。 main.py 启动文件,封装了socket1、urls.py ...

  • [译]什么是 web 框架?

    本文系转载于网络。 Web 应用框架,或者简单的说是“Web 框架”,其实是建立 web 应用的一种方式。从简单的...

  • [译]什么是 web 框架?

    本文系转载于网络。 Web 应用框架,或者简单的说是“Web 框架”,其实是建立 web 应用的一种方式。从简单的...

  • 用python写一个简单的web框架

    最近在实验室也没什么事情做,闲着无聊。于是想着造轮子,最后决定写一个简单的web框架玩玩。 STEP.1 我们首先...

  • 用 Python 写一个简单的Web框架

    一、概述 在Python中,WSGI(Web Server Gateway Interface)定义了Web服务器...

  • 用 Python 写一个简单的Web框架

    一、概述 二、从demo_app开始 三、WSGI中的application 四、区分URL 五、重构 1、正则匹...

  • django2.0入门教程第一节

    什么django django是用python语言写的一个web框架。web框架的作用有以下几点: 减少重复的繁琐...

网友评论

      本文标题:写一个简单的WEB框架

      本文链接:https://www.haomeiwen.com/subject/hxnqsqtx.html