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练习程序批量修改文件名
Jan 16 Python
Python中if __name__ == '__main__'作用解析
Jun 29 Python
Python 自动化表单提交实例代码
Jun 08 Python
Python用户推荐系统曼哈顿算法实现完整代码
Dec 01 Python
python ddt实现数据驱动
Mar 14 Python
Python解析并读取PDF文件内容的方法
May 08 Python
Python使用cx_Freeze库生成msi格式安装文件的方法
Jul 10 Python
详解Appium+Python之生成html测试报告
Jan 04 Python
使用python实现mqtt的发布和订阅
May 05 Python
Python实现多线程/多进程的TCP服务器
Sep 03 Python
python读取mysql数据绘制条形图
Mar 25 Python
pycharm安装深度学习pytorch的d2l包失败问题解决
Mar 25 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
如何突破PHP程序员的技术瓶颈分析
2011/07/17 PHP
PHP和MYSQL实现分页导航思路详解
2017/04/11 PHP
laravel框架 laravel-admin上传图片到oss的方法
2019/10/13 PHP
seajs中模块的解析规则详解和模块使用总结
2014/03/12 Javascript
jQuery实现响应鼠标滚动的动感菜单效果
2015/09/21 Javascript
Javascript自执行匿名函数(function() { })()的原理浅析
2016/05/15 Javascript
javascript实现文字无缝滚动
2016/12/27 Javascript
div中文字内容溢出常见的解决方法
2017/03/16 Javascript
ES6正则表达式扩展笔记
2017/07/25 Javascript
webpack写jquery插件的环境配置
2017/12/21 jQuery
在ES5与ES6环境下处理函数默认参数的实现方法
2018/05/13 Javascript
jQuery实现仿京东防抖动菜单效果示例
2018/07/06 jQuery
在vue 中使用 less的教程详解
2018/09/26 Javascript
Vue.js 中的实用工具方法【推荐】
2019/07/04 Javascript
layui自定义ajax左侧三级菜单
2019/07/26 Javascript
Vue 权限控制的两种方法(路由验证)
2019/08/16 Javascript
react 原生实现头像滚动播放的示例
2020/04/21 Javascript
微信小程序仿抖音视频之整屏上下切换功能的实现代码
2020/05/24 Javascript
Vue+Spring Boot简单用户登录(附Demo)
2020/11/12 Javascript
python比较两个列表大小的方法
2015/07/11 Python
Python第三方库h5py_读取mat文件并显示值的方法
2019/02/08 Python
Python3远程监控程序的实现方法
2019/07/15 Python
Python networkx包的实现
2020/02/14 Python
Numpy(Pandas)删除全为零的列的方法
2020/09/11 Python
不同浏览器对CSS3和HTML5的支持状况
2009/10/31 HTML / CSS
html5 sessionStorage会话存储_动力节点Java学院整理
2017/07/06 HTML / CSS
世界上最大的乐器零售商:Guitar Center
2017/11/07 全球购物
化学教师自荐信范文
2013/12/28 职场文书
人事部专员岗位职责
2014/03/04 职场文书
微笑服务演讲稿
2014/05/13 职场文书
效能监察建议书
2014/05/19 职场文书
员工离职通知函
2015/04/25 职场文书
申请吧主发表的感言
2015/08/03 职场文书
想要创业,那么你做好准备了吗?
2019/07/01 职场文书
对Golang中的FORM相关字段理解
2021/05/02 Golang
python中的getter与setter你了解吗
2022/03/24 Python