借助wsgiref模块的简易版web框架
# 按照功能
- 在urls.py中书写对应关系
- 在views.py中书写业务逻辑
1 start.py <执行文件: 匹配关系>
from wsgiref.simple_server import make_server from urls import urls from views import * # 匹配关系 def run(env, response): """ :param env: 用户请求相关所有数据 :param response: 相应相关所有数据 :return: 返回浏览器的数据 """ # print(env) # 返回字典. wsgiref模块帮你处理好http格式的数据 # <了解> response('200 Ok', []) # 响应数据- 响应首行 响应头 # 获取数据 current_path = env.get('PATH_INFO') # 书写业务逻辑 # 定义一个函数名初始值 func = None # 写逻辑 for url in urls: if current_path == url[0]: func = url[1] break # 判断用户输入的url是否在urls列表中 if func: res = func(env) else: res = error(env) return [res.encode('utf-8')] # 注意: 此处无[]会报错 if __name__ == '__main__': server = make_server('127.0.0.1', 8080, run) """" 释义: 一旦有客户都请求,那么服务端就会监听到然后链接,然后触发run函数加括号执行 """ server.serve_forever()
2 urls.py <路由与视图函数对应关系>
from views import * # 本文件只做 匹配关系(对应关系) # url与函数的对应关系 # 每一个url对应一个函数(即对应一个功能: 比如登陆功能、注册功能) urls = [ ('/index', index), ('/login', login), ('/xxx', xxx,) ]
3 views.py <视图函数(后端业务逻辑)>
# 本文件只放函数(即功能-即业务逻辑) def index(env): # 函数里再获取用户以下用户请求相关信息-(env: 用户请求相关所有数据) return 'index000' def login(env): return 'login000' def error(env): # 返回字符串格式的数据,由后边def run统一处理成二进制格式更方便 return '404 error' def xxx(env): # 返回HTML页面 with open(r'templates/02 myxxx.html', 'r', encoding='utf-8') as f: return f.read()
4 templates文件夹 <专门存储html文件>
本次文件名: 02 myxxx.html(注意先建templates文件夹)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.4.1/jquery.min.js"></script> <link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet"> <script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script> </head> <body> <h1>我的HTML</h1> </body> </html>