用与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框架相关推荐

  1. 从 0 开始手写一个 Spring MVC 框架,向高手进阶

    转载自   从 0 开始手写一个 Spring MVC 框架,向高手进阶 Spring框架对于Java后端程序员来说再熟悉不过了,以前只知道它用的反射实现的,但了解之后才知道有很多巧妙的设计在里面.如 ...

  2. 自己手写一个Spring MVC框架

    想要了解Spring MVC框架的原理,探究框架是如何设计的,不错的学习方式是阅读源码,然后自己手写一个框架.本文带领大家简化的手写一个Spring MVC框架. Spring框架对于Java后端程序 ...

  3. 手写一个微前端框架(内含源码地址)

    来源:伊撒尔 https://zhuanlan.zhihu.com/p/169800579 halo,大家好,我是 132,前阵子冥思了一会儿微前端,然后周六日趁热打铁,马上写了一个微前端框架,名叫 ...

  4. 手写一个简单rpc框架(一)

    扑街前言:前面说了netty的基本运用.Java的NIO等一系列的知识,这些知识已经可以做一个简单的rpc框架,本篇和下篇我们一起了解一个怎么完成一个rpc框架,当然个只是为了更好的了解rpc框架的基 ...

  5. 利用反射和xml配置文件手写一个小型的框架

    通用的增删改查 1. 利用xml配置实体类和数据库表名的映射关系 2. 根据xml设计,用正确的数据结构映射类封装好xml信息 3. 得到数据库连接前,读取xml信息,用map封装成映射数据 4. 写 ...

  6. 手写一个山寨版的springmvc框架

    文章目录 一,环境准备 二,项目结构搭建 三,简易版的前端控制器 DnDispatcherServlet 四,测试springmvc的性能 五,结束语 首先贴出来一张从网上copy下来的 spring ...

  7. 【RPC框架、RPC框架必会的基本知识、手写一个RPC框架案例、优秀的RPC框架Dubbo、Dubbo和SpringCloud框架比较】

    一.RPC框架必会的基本知识 1.1 什么是RPC? RPC(Remote Procedure Call --远程过程调用),它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络的技术. ...

  8. 仿照源码,手写一个自定义 Spring MVC 框架

    毫无疑问,Spring 框架目前已经成为 Java 开发的行业标准,Spring MVC 作为其 Web 解决方案,是所有 Java 开发者都必须掌握的基本技能,理解其底层原理,才能更好地应用它进行实 ...

  9. 肝一波 ~ 手写一个简易版的Mybatis,带你深入领略它的魅力!

    零.准备工作 <dependencies><dependency><groupId>mysql</groupId><artifactId>m ...

  10. zookeeper springboot_摊牌了!我要手写一个“Spring Boot”

    ❝ 目前的话,已经把 Spring MVC 相关常用的注解比如@GetMapping .@PostMapping .@PathVariable 写完了.我也已经将项目开源出来了,地址:https:// ...

最新文章

  1. Google发布App Engine第二代运行时,提供Python 3.7和PHP 7.2支持
  2. 同一个网站别人能打开我打不开_做网站建设需要注意的五大事项
  3. 【6】Zookeeper脚本及API
  4. 内嵌iframe撑高父容器,底部有4px留白问题解决办法
  5. struts2.1.6教程七、国际化
  6. in the java search_elasticsearch which: no java in (/sbin:/bin:/usr/sbin:/usr/bin)
  7. 当你使用微信和QQ的时候,请不要忘记ICQ这个伟大的公司!
  8. python3解释器执行'abcdd'.endswith('cd')的结果是___python3解释器执行for x
  9. 最受欢迎中文机器学习课程,台大李宏毅老师公开课2019版上线!
  10. graphviz安装以及入门
  11. [翻译]Log Everything All the Time
  12. 六万字最全总结Java数据库编程MyBatis(+收藏)
  13. 向量的方向余弦公式_方向余弦怎么求
  14. 【已解决】【V2版本】如何使用脚本关闭Win10自动更新服务并阻止其自动启动?
  15. Alphago进化史 漫画告诉你Zero为什么这么牛
  16. 使用anysdk打包android渠道
  17. 探花交友06-即时通信
  18. 2022广东省安全员A证第三批(主要负责人)考试题库模拟考试平台操作
  19. r语言赋值为na_R语言数据框中,用0替代NA缺失值
  20. 实现全托管,腾讯云服务网格的架构演进

热门文章

  1. OSPF路由控制原理与实验
  2. Linux之DNS配置及案例
  3. Vulnhub-HackInOS
  4. 中国老工业基地吉林对外贸易重回历史高水平
  5. python中的变量的学习
  6. linux下常用文件传输命令(转)
  7. zabbix+ldap认证故障解决一例
  8. Android 获取有规律资源Id解决方案
  9. js中for循环的优化写法
  10. linux下apache2两种工作模式及两者切换