DJango 学习(2)—— django 引入:借助于 wsgiref 模块(web服务网关接口)搭建简易 web 框架
使用 socket 的简易 web 框架的局限性
1. 代码重复
2. 手动处理 http 格式的数据 并且只能拿到 url 后缀,其他数据获取繁琐
3. 并发问题
借助 wsgiref 模块
前提准备,建立多个文件和文件夹
"""
urls.py 路由(网址后缀)与视图函数(处理业务逻辑的函数)对应关系
views.py 存放视图函数(后端业务逻辑)
templates文件夹 存储 html 文件
"""
相关代码
urls.py
from views import *
# url 和 函数的对应关系
urls = [
("/index", index),
("/login", login),
] # 放在 url.py 中
views.py
def index(env):
return "index"
def login(env):
return "login"
def error(env):
return "404 error"
main.py
import urls
from views import *
from wsgiref.simple_server import make_server
def run(env, response):
"""
:param env: 请求相关的所有数据
:param response: 响应相关的所有数据
:return: 返回给浏览器的数据
"""
# print(env) # 字典 wsgiref 模块处理了 http 格式的数据,封装成了字典更加方便操作
response("200 OK", []) # 响应首行 响应头
current_path = env.get("PATH_INFO")
# if current_path == "/index":
# return [b"index"]
# elif current_path == "/login":
# return [b"login"]
#
# return [b"404 ERROR"]
# 定义一个变量存储匹配到的函数名
func = None
for url in urls.urls: # url 是 元组
if url[0] == current_path:
# 匹配到的 url 函数赋值给 func
func = url[1]
break # 匹配到一个后,应该立马结束 for 循环
# 判断 func 是否有值
if func:
res = func(env)
else:
res = error(env)
return [res.encode("utf-8")]
if __name__ == "__main__":
# 实时监听 127.0.0.1:8080 地址,只要有客户端来了就会交给 run 函数处理(加括号触发 run 函数的运行)
server = make_server("127.0.0.1", 8080, run)
server.serve_forever()
运行结果
优势
按照功能的不同拆分之后,获取添加功能只需要在 urls.py 中书写对应关系然后取 views.py 书写业务逻辑即可