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 布尔操作实现代码
Mar 23 Python
Python中的探索性数据分析(功能式)
Dec 22 Python
python pyheatmap包绘制热力图
Nov 09 Python
Python遍历文件夹 处理json文件的方法
Jan 22 Python
在Python中如何传递任意数量的实参的示例代码
Mar 21 Python
python 如何去除字符串头尾的多余符号
Nov 19 Python
Python实现数字的格式化输出
Aug 01 Python
Python三维绘图之Matplotlib库的使用方法
Sep 20 Python
python分布式爬虫中消息队列知识点详解
Nov 26 Python
Python爬虫之Selenium实现键盘事件
Dec 04 Python
selenium+超级鹰实现模拟登录12306
Jan 24 Python
python可视化大屏库big_screen示例详解
Nov 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
一首老MP3,致敬WAR3经典
2021/03/08 魔兽争霸
php初始化对象和析构函数的简单实例
2014/03/11 PHP
PHP+jQuery 注册模块的改进(一):验证码存入SESSION
2014/10/14 PHP
PHP+MySQL修改记录的方法
2015/01/21 PHP
在CentOS系统上从零开始搭建WordPress博客的全流程记录
2016/04/21 PHP
微信支付扫码支付php版
2016/07/22 PHP
ajax处理php返回json数据的实例代码
2013/01/24 Javascript
在每个匹配元素的外部插入新元素的方法
2013/12/20 Javascript
使用AngularJS 应用访问 Android 手机的图片库
2015/03/24 Javascript
JQuery工具函数汇总
2015/06/15 Javascript
jQuery 判断是否包含在数组中Array[]的方法
2016/08/03 Javascript
Angular4项目中添加i18n国际化插件ngx-translate的步骤详解
2017/07/02 Javascript
JavaScript异步上传图片文件的实例代码
2017/07/04 Javascript
详解Web使用webpack构建前端项目
2017/09/23 Javascript
深入理解Node module模块
2018/03/26 Javascript
说说如何利用 Node.js 代理解决跨域问题
2019/04/22 Javascript
微信小程序云开发之新手环境配置
2019/05/16 Javascript
vue以组件或者插件的形式实现throttle或者debounce
2019/05/22 Javascript
Vue响应式原理Observer、Dep、Watcher理解
2019/06/06 Javascript
layui表格分页 记录勾选的实例
2019/09/02 Javascript
JS数组扁平化、去重、排序操作实例详解
2020/02/24 Javascript
JS深入学习之数组对象排序操作示例
2020/05/01 Javascript
python访问抓取网页常用命令总结
2017/04/11 Python
Python 中pandas索引切片读取数据缺失数据处理问题
2019/10/09 Python
Python Selenium操作Cookie的实例方法
2021/02/28 Python
英国领先的男士服装和时尚零售商:Burton
2017/01/09 全球购物
伯利陶器:Burleigh Pottery
2018/01/03 全球购物
拓展培训心得体会
2014/01/04 职场文书
高中体育教学反思
2014/01/29 职场文书
我们的节日国庆活动方案
2014/08/19 职场文书
离婚协议书应该怎么写
2014/10/12 职场文书
奖学金感谢信
2015/01/21 职场文书
初中生思想道德自我评价
2015/03/09 职场文书
vue如何批量引入组件、注册和使用详解
2021/05/12 Vue.js
详细了解java监听器和过滤器
2021/07/09 Java/Android
JavaScript流程控制(循环)
2021/12/06 Javascript