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 相关文章推荐
linux系统使用python获取内存使用信息脚本分享
Jan 15 Python
vc6编写python扩展的方法分享
Jan 17 Python
使用Python脚本将Bing的每日图片作为桌面的教程
May 04 Python
python实现随机森林random forest的原理及方法
Dec 21 Python
python队列queue模块详解
Apr 27 Python
简单了解python中的与或非运算
Sep 18 Python
python接口自动化如何封装获取常量的类
Dec 24 Python
Docker部署Python爬虫项目的方法步骤
Jan 19 Python
基于Python组装jmx并调用JMeter实现压力测试
Nov 03 Python
matplotlib运行时配置(Runtime Configuration,rc)参数rcParams解析
Jan 05 Python
手把手教你用Django执行原生SQL的方法
Feb 18 Python
pytho matplotlib工具栏源码探析一之禁用工具栏、默认工具栏和工具栏管理器三种模式的差异
Feb 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者的疑难问答(2)
2006/10/09 PHP
WINDOWS下php5.2.4+mysql6.0+apache2.2.4+ZendOptimizer-3.3.0配置
2008/03/28 PHP
dedecms集成财付通支付接口
2014/12/28 PHP
PHP判断是否为空的几个函数对比
2015/04/21 PHP
PHP基于Redis消息队列实现发布微博的方法
2017/05/03 PHP
php单元测试phpunit入门实例教程
2017/11/17 PHP
JavaScript中Math对象使用说明
2008/01/16 Javascript
jquery控制listbox中项的移动并排序的实现代码
2010/09/28 Javascript
js中escape对应的C#解码函数 UrlDecode
2012/12/16 Javascript
体验js中splice()的强大(插入、删除或替换数组的元素)
2013/01/16 Javascript
在JavaScript中typeof的用途介绍
2013/04/11 Javascript
javascript中判断json的方法总结
2015/08/27 Javascript
js实现图片放大和拖拽特效代码分享
2015/09/05 Javascript
使用jsonp实现跨域获取数据实例讲解
2016/12/25 Javascript
layer弹出层父子页面事件相互调用方法
2018/08/17 Javascript
JS 自执行函数原理及用法
2019/08/05 Javascript
vuex 实现getter值赋值给vue组件里的data示例
2019/11/05 Javascript
Vue清除定时器setInterval优化方案分享
2020/07/21 Javascript
[51:34]Ti4主赛事胜者组 DK vs EG 2
2014/07/19 DOTA
linux安装Python3.4.2的操作方法
2018/09/28 Python
django将网络中的图片,保存成model中的ImageField的实例
2019/08/07 Python
python tkinter canvas使用实例
2019/11/04 Python
python使用turtle库绘制奥运五环
2020/02/24 Python
HTML5拖拽API经典实例详解
2018/04/20 HTML / CSS
GEOX鞋美国官方网站:意大利会呼吸的鞋
2017/07/12 全球购物
新加坡最佳婴儿用品店:Mamahood.com.sg
2018/08/26 全球购物
简述进程的启动、终止的方式以及如何进行进程的查看
2013/07/12 面试题
宿舍使用违章电器检讨书
2014/01/12 职场文书
运动会通讯稿50字
2014/01/30 职场文书
自主招生自荐信指南
2014/02/04 职场文书
亲子拓展活动方案
2014/02/20 职场文书
2014副镇长民主生活会个人对照检查材料思想汇报
2014/09/30 职场文书
2015年中学团委工作总结
2015/07/22 职场文书
通讯稿格式及范文
2015/07/22 职场文书
Oracle 区块链表创建过程详解
2021/05/15 Oracle
sql server偶发出现死锁的解决方法
2022/04/10 SQL Server