Python手写简易Web框架:基于wsgiref实现类Django路由与视图
本文通过Python标准库wsgiref实现一个简易Web框架,模拟Django的路由分发机制。代码展示了如何解析URL路径、匹配视图函数、读取HTML模板文件以及处理简单的登录验证逻辑。旨在帮助开发者深入理解Web服务器底层请求处理流程及路由匹配原理。
本文通过Python代码演示如何从零构建一个结构类似于Django的简易Web框架,供读者参考学习。
该示例旨在复现Django的核心结构,通过手写代码来理解Web框架的基本运作方式。
以下是Web应用的启动入口文件代码:
from wsgiref.simple_server import make_server #导入模块
from views import *
import urls
def routers(): #这个函数是个元组
URLpattern=urls.URLpattern
return URLpattern #这个函数执行后返回这个元组
def application(environ,start_response):
print("ok1")
path=environ.get("PATH_INFO")
print("path",path)
start_response('200 OK',[('Content-Type','text/html')])
urlpattern=routers() #讲函数的返回值元组赋值
func=None
for item in urlpattern: #遍历这个元组
if path==item[0]: #item[0]就是#路径后面的斜杠内容
func=item[1] #item[1]就是对应的函数名
break
if func: #如果路径内容存在函数就存在
return func(environ) #执行这个函数
else:
print("ok5")
return [b"404"] #如果不存在就返回404
if __name__=='__main__':
print("ok0")
t=make_server("",9700,application)
print("ok22")
t.serve_forever()
路由配置文件 urls.py 的代码如下:
from views import *
URLpattern = (
("/login", login),
("/alex", foo1),
("/egon", foo2),
("/auth", auth)
)
视图处理文件 views.py 的代码如下:
def foo1(request): # 定义函数
f=open("templates/alex.html","rb") #打开html 以二进制的模式
data=f.read() #读到data里
f.close() #关闭
return [data] #返回这个data
def foo2(request):
f=open("templates/egon.html","rb")
data=f.read()
f.close()
return [data]
def login(request):
f=open("templates/login.html","rb")
data=f.read()
f.close()
return [data]
def auth(request):
print("+++",request)
user_union,pwd_union=request.get("QUERY_STRING").split("&")
_,user=user_union.split("=")
_,pwd=pwd_union.split("=")
if user=='Yuan' and pwd=="123":
return [b"login,welcome"]
else:
return [b"user or pwd is wriong"]
templates目录中包含的HTML模板文件代码:
alex.html 模板内容:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="x-ua-compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Title</title> </head> <body> <div>alex</div> </body> </html>
login.html 模板内容:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h2>登录页面</h2>
<form action="http://127.0.0.1:9700/auth">
<p>姓名:<input type="text" name="user"></p>
<p>密码:<input type="password" name="pwd"></p>
<p>
<input type="submit">
</p>
</form>
</body>
</html>
项目的完整目录结构如图所示:

通过访问 IP 地址、端口号及对应路径,即可返回相应的 HTML 页面。此示例功能较为基础,主要目的是帮助开发者熟悉 Django 的基本工作原理。
如果您对Python其他技术感兴趣,可查阅本站相关专题:《Python Socket编程技巧总结》、《Python URL操作技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》以及《Python入门与进阶经典教程》。
希望本文的内容能对您的Python编程学习有所帮助。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













