Python实现手写一个类似django的web框架示例


Posted in Python onJuly 20, 2018

本文实例讲述了Python实现手写一个类似django的web框架。分享给大家供大家参考,具体如下:

用与django相似结构写一个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>

下面如图,是目录结构

Python实现手写一个类似django的web框架示例

访问ip+prot+路径 即为相应的html,功能简单,只是为了熟悉django

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python计算时间差的方法
May 20 Python
TensorFlow实现非线性支持向量机的实现方法
Apr 28 Python
Python爬虫基础之XPath语法与lxml库的用法详解
Sep 13 Python
python使用Plotly绘图工具绘制水平条形图
Mar 25 Python
python实现银联支付和支付宝支付接入
May 07 Python
python3 常见解密加密算法实例分析【base64、MD5等】
Dec 19 Python
用 Python 制作地球仪的方法
Apr 24 Python
Python优秀开源项目Rich源码解析的流程分析
Jul 06 Python
Python使用jpype模块调用jar包过程解析
Jul 29 Python
python与js主要区别点总结
Sep 13 Python
手把手教你配置JupyterLab 环境的实现
Feb 02 Python
python UIAutomator2使用超详细教程
Feb 19 Python
python 实现求解字符串集的最长公共前缀方法
Jul 20 #Python
python实现求两个字符串的最长公共子串方法
Jul 20 #Python
Django基础知识与基本应用入门教程
Jul 20 #Python
opencv python 2D直方图的示例代码
Jul 20 #Python
Linux下python制作名片示例
Jul 20 #Python
Python爬虫的两套解析方法和四种爬虫实现过程
Jul 20 #Python
使用python脚本实现查询火车票工具
Jul 19 #Python
You might like
对text数据类型不支持代码页转换 从: 1252 到: 936
2011/04/23 PHP
开源php中文分词系统SCWS安装和使用实例
2014/04/11 PHP
PHP实现UTF-8文件BOM自动检测与移除实例
2014/11/05 PHP
PHP动态地创建属性和方法, 对象的复制, 对象的比较,加载指定的文件,自动加载类文件,命名空间
2016/05/06 PHP
JavaScript Event学习第二章 Event浏览器兼容性
2010/02/07 Javascript
defer属性导致引用JQuery的页面报“浏览器无法打开网站xxx,操作被中止”错误的解决方法
2010/04/27 Javascript
15条JavaScript最佳实践小结
2013/08/09 Javascript
js操作输入框中选择内容兼容IE及其他主流浏览器
2014/04/22 Javascript
实例讲解JavaScript中call、apply、bind方法的异同
2016/09/13 Javascript
自动适应iframe右边的高度
2016/12/22 Javascript
关于Promise 异步编程的实例讲解
2017/09/01 Javascript
Angular表格神器ui-grid应用详解
2017/09/29 Javascript
bootstrap table sum总数量统计实现方法
2017/10/29 Javascript
浅谈vue加载优化策略
2019/03/19 Javascript
vue组件间通信六种方式(总结篇)
2019/05/15 Javascript
微信小程序 如何保持登录状态
2019/08/16 Javascript
JS常见错误(Error)及处理方案详解
2020/07/02 Javascript
[01:04:01]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS DT第一场
2014/05/24 DOTA
Python计算一个文件里字数的方法
2015/06/15 Python
在python中pandas读文件,有中文字符的方法
2018/12/12 Python
python 与服务器的共享文件夹交互方法
2018/12/27 Python
python可视化实现KNN算法
2019/10/16 Python
Python Pandas 转换unix时间戳方式
2019/12/07 Python
tensorflow之tf.record实现存浮点数数组
2020/02/17 Python
Python学习之os模块及用法
2020/06/03 Python
python 实现音频叠加的示例
2020/10/29 Python
戴尔马来西亚官网:Dell Malaysia
2020/05/02 全球购物
木马的传播途径主要有哪些
2016/04/08 面试题
中英双版中文教师求职信
2013/10/27 职场文书
会计助理的岗位职责
2013/11/29 职场文书
工作室成员个人发展规划范文
2014/01/24 职场文书
赡养老人协议书
2014/04/21 职场文书
法学求职信
2014/06/22 职场文书
幼儿园卫生保健制度
2015/08/05 职场文书
MySQL库表名大小写的选择
2021/06/05 MySQL
SQL实现LeetCode(176.第二高薪水)
2021/08/04 MySQL