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 29 Python
Python中装饰器的一个妙用
Feb 08 Python
Python中的并发处理之asyncio包使用的详解
Apr 03 Python
python的dataframe转换为多维矩阵的方法
Apr 11 Python
numpy中的高维数组转置实例
Apr 17 Python
Python实现繁体中文与简体中文相互转换的方法示例
Dec 18 Python
pandas.cut具体使用总结
Jun 24 Python
django 文件上传功能的相关实例代码(简单易懂)
Jan 22 Python
python 的numpy库中的mean()函数用法介绍
Mar 03 Python
Python pandas 列转行操作详解(类似hive中explode方法)
May 18 Python
Django一小时写出账号密码管理系统
Apr 29 Python
python基础之文件处理知识总结
May 23 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
用DBSQL类加快开发MySQL数据库程序的速度
2006/10/09 PHP
基于PHP选项与信息函数的使用详解
2013/05/10 PHP
PHP 面向对象程序设计(oop)学习笔记(三) - 单例模式和工厂模式
2014/06/12 PHP
JavaScript的Function详细
2006/11/14 Javascript
JSON.parse 解析字符串出错的解决方法
2010/07/08 Javascript
用函数模板,写一个简单高效的 JSON 查询器的方法介绍
2013/04/17 Javascript
js中数组Array的一些常用方法总结
2013/08/12 Javascript
jquery选择器、属性设置用法经验总结
2013/09/08 Javascript
js验证IP及子网掩码的合法性有效性示例
2014/04/30 Javascript
jQuery实现仿Google首页拖动效果的方法
2015/05/04 Javascript
谈谈jQuery Ajax用法详解
2015/11/27 Javascript
轻松理解JavaScript闭包
2017/03/14 Javascript
vue拦截器Vue.http.interceptors.push使用详解
2017/04/22 Javascript
JavaScript实现简单的四则运算计算器完整实例
2017/04/28 Javascript
cocos creator Touch事件应用(触控选择多个子节点的实例)
2017/09/10 Javascript
angular5 httpclient的示例实战
2018/03/12 Javascript
快速搭建Node.js(Express)用户注册、登录以及授权的方法
2019/05/09 Javascript
vue axios封装httpjs,接口公用配置拦截操作
2020/08/11 Javascript
[01:08:00]Fnatic vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
[07:54]DOTA2-DPC中国联赛 正赛 iG vs VG 选手采访
2021/03/11 DOTA
python字符串编码识别模块chardet简单应用
2015/06/15 Python
Python中的复制操作及copy模块中的浅拷贝与深拷贝方法
2016/07/02 Python
python对DICOM图像的读取方法详解
2017/07/17 Python
Python功能点实现:函数级/代码块级计时器
2019/01/02 Python
python实现树的深度优先遍历与广度优先遍历详解
2019/10/26 Python
Python openpyxl模块原理及用法解析
2020/01/19 Python
解决Python logging模块无法正常输出日志的问题
2020/02/21 Python
Python 忽略文件名编码的方法
2020/08/01 Python
three.js模拟实现太阳系行星体系功能
2019/09/03 HTML / CSS
Shopee菲律宾:在线购买和出售
2019/11/25 全球购物
百度吧主申请感言
2014/01/12 职场文书
2015年政府采购工作总结
2015/05/21 职场文书
电工生产实习心得体会
2016/01/22 职场文书
担保书范文
2019/07/09 职场文书
Nginx+SpringBoot实现负载均衡的示例
2021/03/31 Servers
浅谈Redis跟MySQL的双写问题解决方案
2022/02/24 Redis