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写的创建文件夹自定义函数mkdir()
Aug 25 Python
Python自动登录126邮箱的方法
Jul 10 Python
详解在Python程序中自定义异常的方法
Oct 16 Python
Python3中的真除和Floor除法用法分析
Mar 16 Python
Flask实现图片的上传、下载及展示示例代码
Aug 03 Python
Python3爬虫学习入门教程
Dec 11 Python
解决项目pycharm能运行,在终端却无法运行的问题
Jan 19 Python
Django+Xadmin构建项目的方法步骤
Mar 06 Python
python过滤中英文标点符号的实例代码
Jul 15 Python
解决Pytorch 训练与测试时爆显存(out of memory)的问题
Aug 20 Python
python对Excel的读取的示例代码
Feb 14 Python
python使用pymysql模块操作MySQL
Jun 16 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 彩色文字实现代码
2009/06/29 PHP
深入解析PHP中的(伪)多线程与多进程
2013/07/01 PHP
php实现专业获取网站SEO信息类实例
2015/04/02 PHP
PHP实现的注册,登录及查询用户资料功能API接口示例
2017/06/06 PHP
PhpStorm2020.1 安装 debug - Postman 调用的详细教程
2020/08/17 PHP
用于table内容排序
2006/07/21 Javascript
十个优秀的Ajax/Javascript实例网站收集
2010/03/31 Javascript
ExtJS TabPanel beforeremove beforeclose使用说明
2010/03/31 Javascript
javascript学习笔记(十四) window对象使用介绍
2012/06/20 Javascript
php常见的页面跳转方法汇总
2015/04/15 Javascript
解决js函数闭包内存泄露问题的办法
2016/01/25 Javascript
再谈Javascript中的基本类型和引用类型(推荐)
2016/07/01 Javascript
vuejs父子组件通信的问题
2017/01/11 Javascript
bootstrap按钮插件(Button)使用方法解析
2017/01/13 Javascript
基于cookie实现zTree树刷新后展开状态不变
2017/02/28 Javascript
json的结构与遍历方法实例分析
2017/04/25 Javascript
利用纯JS实现像素逐渐显示的方法示例
2017/08/14 Javascript
实例分析JS与Node.js中的事件循环
2017/12/12 Javascript
swiper移动端轮播插件(触碰图片之后停止轮播)
2017/12/28 Javascript
webpack4之SplitChunksPlugin使用指南
2018/06/12 Javascript
Vue实现table上下移动功能示例
2019/02/21 Javascript
微信公众号平台接口开发 获取access_token过程解析
2019/08/14 Javascript
[01:37]PWL S2开团时刻DAY1&2——这符有毒
2020/11/20 DOTA
浅谈pyhton学习中出现的各种问题(新手必看)
2017/05/17 Python
PyQt5每天必学之组合框
2018/04/20 Python
几行Python代码爬取3000+上市公司的信息
2019/01/24 Python
Python谱减法语音降噪实例
2019/12/18 Python
pycharm 代码自动补全的实现方法(图文)
2020/09/18 Python
环境工程与管理大学毕业生求职信
2013/10/02 职场文书
教师的实习鉴定
2013/12/15 职场文书
办公室主任主任岗位责任制
2014/02/11 职场文书
安全生产标语
2014/06/06 职场文书
开发房地产协议书
2014/09/14 职场文书
家装业务员岗位职责
2015/04/03 职场文书
React Fragment介绍与使用详解
2021/11/11 Javascript
一文简单了解MySQL前缀索引
2022/04/03 MySQL