手写一个类django框架
用与django相似结构写一个web框架。
启动文件代码:
1 from wsgiref.simple_server import make_server #导入模块 2 from views import * 3 import urls 4 5 def routers(): #这个函数是个元组 6 URLpattern=urls.URLpattern 7 return URLpattern #这个函数执行后返回这个元组 8 9 def application(environ,start_response): 10 print("ok1") 11 path=environ.get("PATH_INFO") 12 print("path",path) 13 start_response('200 OK',[('Content-Type','text/html')]) 14 urlpattern=routers() #讲函数的返回值元组赋值 15 func=None 16 17 for item in urlpattern: #遍历这个元组 18 if path==item[0]: #item[0]就是#路径后面的斜杠内容 19 func=item[1] #item[1]就是对应的函数名 20 break 21 if func: #如果路径内容存在函数就存在 22 return func(environ) #执行这个函数 23 else: 24 print("ok5") 25 return [b"404"] #如果不存在就返回404 26 27 if __name__=='__main__': 28 print("ok0") 29 t=make_server("",9700,application) 30 print("ok22") 31 t.serve_forever()
urls.py文件代码:
1 from views import * 2 URLpattern = ( 3 ("/login", login), 4 ("/alex", foo1), 5 ("/egon", foo2), 6 ("/auth", auth) 7 )
views.py文件代码:
1 def foo1(request): # 定义函数 2 f=open("templates/alex.html","rb") #打开html 以二进制的模式 3 data=f.read() #读到data里 4 f.close() #关闭 5 return [data] #返回这个data 6 7 def foo2(request): 8 f=open("templates/egon.html","rb") 9 data=f.read() 10 f.close() 11 return [data] 12 13 def login(request): 14 f=open("templates/login.html","rb") 15 data=f.read() 16 f.close() 17 return [data] 18 19 def auth(request): 20 print("+++",request) 21 user_union,pwd_union=request.get("QUERY_STRING").split("&") 22 _,user=user_union.split("=") 23 _,pwd=pwd_union.split("=") 24 25 if user=='Yuan' and pwd=="123": 26 return [b"login,welcome"] 27 else: 28 return [b"user or pwd is wriong"]
templates目录下的html文件:
alex.html
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <meta http-equiv="x-ua-compatible" content="IE=edge"> 6 <meta name="viewport" content="width=device-width, initial-scale=1"> 7 <title>Title</title> 8 </head> 9 <body> 10 <div>alex</div> 11 </body> 12 </html>
login.html
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 </head> 7 <body> 8 <h2>登录页面</h2> 9 <form action="http://127.0.0.1:9700/auth"> 10 <p>姓名:<input type="text" name="user"></p> 11 <p>密码:<input type="password" name="pwd"></p> 12 <p> 13 <input type="submit"> 14 </p> 15 </form> 16 </body> 17 </html>
下面如图,是目录结构
访问ip+prot+路径 即为相应的html,功能简单,只是为了熟悉django
转载于:https://www.cnblogs.com/ArmoredTitan/p/7412573.html
手写一个类django框架相关推荐
- 从 0 开始手写一个 Spring MVC 框架,向高手进阶
转载自 从 0 开始手写一个 Spring MVC 框架,向高手进阶 Spring框架对于Java后端程序员来说再熟悉不过了,以前只知道它用的反射实现的,但了解之后才知道有很多巧妙的设计在里面.如 ...
- 自己手写一个Spring MVC框架
想要了解Spring MVC框架的原理,探究框架是如何设计的,不错的学习方式是阅读源码,然后自己手写一个框架.本文带领大家简化的手写一个Spring MVC框架. Spring框架对于Java后端程序 ...
- 手写一个微前端框架(内含源码地址)
来源:伊撒尔 https://zhuanlan.zhihu.com/p/169800579 halo,大家好,我是 132,前阵子冥思了一会儿微前端,然后周六日趁热打铁,马上写了一个微前端框架,名叫 ...
- 手写一个简单rpc框架(一)
扑街前言:前面说了netty的基本运用.Java的NIO等一系列的知识,这些知识已经可以做一个简单的rpc框架,本篇和下篇我们一起了解一个怎么完成一个rpc框架,当然个只是为了更好的了解rpc框架的基 ...
- 利用反射和xml配置文件手写一个小型的框架
通用的增删改查 1. 利用xml配置实体类和数据库表名的映射关系 2. 根据xml设计,用正确的数据结构映射类封装好xml信息 3. 得到数据库连接前,读取xml信息,用map封装成映射数据 4. 写 ...
- 手写一个山寨版的springmvc框架
文章目录 一,环境准备 二,项目结构搭建 三,简易版的前端控制器 DnDispatcherServlet 四,测试springmvc的性能 五,结束语 首先贴出来一张从网上copy下来的 spring ...
- 【RPC框架、RPC框架必会的基本知识、手写一个RPC框架案例、优秀的RPC框架Dubbo、Dubbo和SpringCloud框架比较】
一.RPC框架必会的基本知识 1.1 什么是RPC? RPC(Remote Procedure Call --远程过程调用),它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络的技术. ...
- 仿照源码,手写一个自定义 Spring MVC 框架
毫无疑问,Spring 框架目前已经成为 Java 开发的行业标准,Spring MVC 作为其 Web 解决方案,是所有 Java 开发者都必须掌握的基本技能,理解其底层原理,才能更好地应用它进行实 ...
- 肝一波 ~ 手写一个简易版的Mybatis,带你深入领略它的魅力!
零.准备工作 <dependencies><dependency><groupId>mysql</groupId><artifactId>m ...
- zookeeper springboot_摊牌了!我要手写一个“Spring Boot”
❝ 目前的话,已经把 Spring MVC 相关常用的注解比如@GetMapping .@PostMapping .@PathVariable 写完了.我也已经将项目开源出来了,地址:https:// ...
最新文章
- Google发布App Engine第二代运行时,提供Python 3.7和PHP 7.2支持
- 同一个网站别人能打开我打不开_做网站建设需要注意的五大事项
- 【6】Zookeeper脚本及API
- 内嵌iframe撑高父容器,底部有4px留白问题解决办法
- struts2.1.6教程七、国际化
- in the java search_elasticsearch which: no java in (/sbin:/bin:/usr/sbin:/usr/bin)
- 当你使用微信和QQ的时候,请不要忘记ICQ这个伟大的公司!
- python3解释器执行'abcdd'.endswith('cd')的结果是___python3解释器执行for x
- 最受欢迎中文机器学习课程,台大李宏毅老师公开课2019版上线!
- graphviz安装以及入门
- [翻译]Log Everything All the Time
- 六万字最全总结Java数据库编程MyBatis(+收藏)
- 向量的方向余弦公式_方向余弦怎么求
- 【已解决】【V2版本】如何使用脚本关闭Win10自动更新服务并阻止其自动启动?
- Alphago进化史 漫画告诉你Zero为什么这么牛
- 使用anysdk打包android渠道
- 探花交友06-即时通信
- 2022广东省安全员A证第三批(主要负责人)考试题库模拟考试平台操作
- r语言赋值为na_R语言数据框中,用0替代NA缺失值
- 实现全托管,腾讯云服务网格的架构演进