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基础教程之循环介绍
Aug 29 Python
python基于phantomjs实现导入图片
May 13 Python
Python轻量级ORM框架Peewee访问sqlite数据库的方法详解
Jul 20 Python
Python3实战之爬虫抓取网易云音乐的热门评论
Oct 09 Python
Django跨域请求问题的解决方法示例
Jun 16 Python
Python实现简单层次聚类算法以及可视化
Mar 18 Python
python实现处理mysql结果输出方式
Apr 09 Python
浅析python 动态库m.so.1.0错误问题
May 09 Python
Python模拟登入的N种方式(建议收藏)
May 31 Python
python interpolate插值实例
Jul 06 Python
Django实现文章详情页面跳转代码实例
Sep 16 Python
安装不同版本的tensorflow与models方法实现
Feb 20 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
多文件上传的例子
2006/10/09 PHP
php 数组使用详解 推荐
2011/06/02 PHP
thinkphp3.2实现在线留言提交验证码功能
2017/07/19 PHP
PHP数据对象映射模式实例分析
2019/03/29 PHP
JavaScript中“+”的陷阱深刻理解
2012/12/04 Javascript
JS实现随机化快速排序的实例代码
2013/08/01 Javascript
node.js集成百度UE编辑器
2015/02/05 Javascript
TypeScript具有的几个不同特质
2015/04/07 Javascript
在JavaScript中处理数组之reverse()方法的使用
2015/06/09 Javascript
Function.prototype.apply()与Function.prototype.call()小结
2016/04/27 Javascript
Bootstrap 3浏览器兼容性问题及解决方案
2017/04/11 Javascript
解决vuecli3.0热更新失效的问题
2018/09/19 Javascript
使用vue根据状态添加列表数据和删除列表数据的实例
2018/09/29 Javascript
使用TS来编写express服务器的方法步骤
2020/10/29 Javascript
详解vue-router的导航钩子(导航守卫)
2020/11/02 Javascript
python实现带验证码网站的自动登陆实现代码
2015/01/12 Python
Python 实现简单的shell sed替换功能(实例讲解)
2017/09/29 Python
tensorflow saver 保存和恢复指定 tensor的实例讲解
2018/07/26 Python
详谈Python 窗体(tkinter)表格数据(Treeview)
2018/10/11 Python
想学python 这5本书籍你必看!
2018/12/11 Python
在tensorflow中实现屏蔽输出的log信息
2020/02/04 Python
Django values()和value_list()的使用
2020/03/31 Python
如何利用Python识别图片中的文字
2020/05/31 Python
Python3如何使用tabulate打印数据
2020/09/25 Python
基于HTML5 Canvas的3D动态Chart图表的示例
2017/11/02 HTML / CSS
解释下面关于J2EE的名词
2013/11/15 面试题
计算机系毕业生推荐信
2013/11/06 职场文书
2014新年元旦活动策划方案
2014/02/18 职场文书
餐厅采购员岗位职责
2014/03/06 职场文书
移风易俗倡议书
2014/04/15 职场文书
企业员工集体活动方案
2014/08/17 职场文书
无房证明范本
2014/09/17 职场文书
师德师风个人总结
2015/02/06 职场文书
2015年建党94周年演讲稿
2015/03/19 职场文书
2016年教师节特级教师获奖感言
2015/12/09 职场文书
PHP获取学生成绩的方法
2021/11/17 PHP