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 functools模块学习总结
May 09 Python
深入解析Python中的WSGI接口
May 11 Python
python实现单线程多任务非阻塞TCP服务端
Jun 13 Python
Python之用户输入的实例
Jun 22 Python
Django中的文件的上传的几种方式
Jul 23 Python
python将txt文件读入为np.array的方法
Oct 30 Python
Python代码打开本地.mp4格式文件的方法
Jan 03 Python
简单了解python PEP的一些知识
Jul 13 Python
python中将两组数据放在一起按照某一固定顺序shuffle的实例
Jul 15 Python
如何使用Flask-Migrate拓展数据库表结构
Jul 24 Python
Django User 模块之 AbstractUser 扩展详解
Mar 11 Python
jupyter notebook 恢复误删单元格或者历史代码的实现
Apr 17 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
全国FM电台频率大全 - 14 江西省
2020/03/11 无线电
简单易用的计数器(数据库)
2006/10/09 PHP
PHP中使用file_get_contents post数据代码例子
2015/02/13 PHP
php实现RSA加密类实例
2015/03/26 PHP
PHP $O00OO0=urldecode &amp; eval 解密,记一次商业源码的去后门
2020/09/13 PHP
基于jquery实现图片广告轮换效果代码
2011/07/07 Javascript
javascript学习笔记(六) Date 日期类型
2012/06/19 Javascript
jquery easyui使用心得
2014/07/07 Javascript
轻松创建nodejs服务器(5):事件处理程序
2014/12/18 NodeJs
浅析Javascript中“==”与“===”的区别
2014/12/23 Javascript
个人网站留言页面(前端jQuery编写、后台php读写MySQL)
2016/05/03 Javascript
$.browser.msie 为空或不是对象问题的多种解决方法
2017/03/19 Javascript
webpack4.x开发环境配置详解
2018/08/04 Javascript
浅谈vue方法内的方法使用this的问题
2018/09/15 Javascript
微信小程序分包加载代码实现方法详解
2019/09/23 Javascript
Angular单元测试之事件触发的实现
2020/01/20 Javascript
[06:33]3.19 DOTA2发布会 海涛、冷冷、2009见证希望
2014/03/21 DOTA
Python学习笔记_数据排序方法
2014/05/22 Python
bat和python批量重命名文件的实现代码
2016/05/19 Python
Python实现屏幕截图的代码及函数详解
2016/10/01 Python
python实现微信跳一跳辅助工具步骤详解
2018/01/04 Python
基于python的图片修复程序(实现水印去除)
2018/06/04 Python
Sanic框架流式传输操作示例
2018/07/18 Python
python多个模块py文件的数据共享实例
2019/01/11 Python
国外平面设计第一市场:99designs
2016/10/25 全球购物
我能否用void** 指针作为参数, 使函数按引用接受一般指针
2013/02/16 面试题
环境工程专业个人求职信
2013/12/05 职场文书
农村婚礼证婚词
2014/01/08 职场文书
考试作弊被抓检讨书
2014/01/10 职场文书
创业计划书撰写原则
2014/01/25 职场文书
《恐龙》教学反思
2014/04/27 职场文书
中职三好学生事迹材料
2014/08/24 职场文书
如何写股份合作协议书
2014/09/11 职场文书
2015年农村党员干部主题教育活动总结
2015/03/25 职场文书
安全生产隐患排查制度
2015/08/05 职场文书
2019年特色火锅店的创业计划书模板
2019/08/28 职场文书