写一个简单的python_自己动手写一个简单的 python web framework

自己动手写一个简单的 python web framework每天都使用 web 框架,实际上实现一个简单的 web 框架也是很容易的写在前面虽然这篇文章很简单,但是依然需要一些基础知识。如果你不会Python,那就不用看了如果你没有使用过多个pythonWebFramework,那么强烈建议你先去使用(Tornado、Flask、Bottle、web.py)如果你没有读过PEP333/PEP33...
摘要由CSDN通过智能技术生成

自己动手写一个简单的 python web framework

每天都使用 web 框架,实际上实现一个简单的 web 框架也是很容易的

写在前面

虽然这篇文章很简单,但是依然需要一些基础知识。

如果你不会Python,那就不用看了

如果你没有使用过多个pythonWebFramework,那么强烈建议你先去使用(Tornado、Flask、Bottle、web.py)

如果你没有读过PEP333/PEP3333,那么你很可能不知道所以然,因此强烈建议你先去看看PEP333,然后为了方便,这里还有一篇简单翻译,可以对照看PEP333 中文

好了,上面就是所有的基础知识。理清这些基础知识,就不用继续往下看了,直接上代码就可以了。

重中之重,处略看完代码之后,可以看

框架设计

我们的目标是用python原生的包来构建一个可以响应的web框架,它非常简单:支持url路由、get、post方法,支持cookie,其他内容实现并不困难,但这里只介绍最简单的。

我们要实现的web框架最终的helloworld可以这样写

#!/usr/bin/env python

# -*- coding: utf-8 -*-

from easyweb import *

@get('/')

def index(request):

return 'hello world !'

runserver()

其中@get('/')获取了路由,并将路由注册到相应的处理函数中,request是浏览器发送的请求,数据由字典表示,可以在处理函数中自由调用。return语句将字符串响应到客户端,字符串可以是html格式的,这样就能在浏览器直接渲染成响应的网页。

上面几乎就是这篇文章要实现的所有功能。

服务器

于是我们就先从服务器说起吧,如果您使用过wsgiref这个包,强烈建议您去看看他的源代码,因为我的代码多数也是从里面copy过来。

我们要写的服务器只需要满足WSGI就行,如何从网络上读取或者写入数据不是我们的目标,所以我们使用了python内置的BaseHTTPserver,它将负责数据的最终传输。在他的上层,我们需要实现自己的服务器处理函数,经过我们我们服务器加工过的数据必须是符合WSGI标准的。

服务器就像一个容器,他把web框架放在里面,外面连接着网络。在网络数据请求到来的时候,要先经过服务器加工处理才能到框架/应用程序手里,我们常常看到的应用都是用框架写的,有些长得如下:

@get('/')

def index(request):

return 'hello world !'

其实,这里的request是已经被服务器处理过的数据了,不要认为浏览器那么聪明,一下子就发过来一个你需要的数据类型。

相信你已经看过PEP333了,一个典型的WSGI应用一般长这样:

def application(environ, start_response):

"""Simplest possible application object"""

status = "200 OK"

response_headers = [('Content-type', 'text/plain')]

start_response(status, response_headers)

return ['Hello world !\n']

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值