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 25 Python
python中随机函数random用法实例
Apr 30 Python
详解Python编程中包的概念与管理
Oct 16 Python
python numpy函数中的linspace创建等差数列详解
Oct 13 Python
python http接口自动化脚本详解
Jan 02 Python
Python实现按中文排序的方法示例
Apr 25 Python
Python实现的根据IP地址计算子网掩码位数功能示例
May 23 Python
基于python plotly交互式图表大全
Dec 07 Python
python 读写文件包含多种编码格式的解决方式
Dec 20 Python
pymysql 插入数据 转义处理方式
Mar 02 Python
python实现处理mysql结果输出方式
Apr 09 Python
python实战之一步一步教你绘制小猪佩奇
Apr 22 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 正则表达式之正则处理函数小结(preg_match,preg_match_all,preg_replace,preg_split)
2012/10/05 PHP
PHP JS Ip地址及域名格式检测代码
2013/09/27 PHP
PHP读取大文件的几种方法介绍
2016/10/27 PHP
Yii 2.0实现联表查询加搜索分页的方法示例
2017/08/02 PHP
PHP封装的非对称加密RSA算法示例
2018/05/28 PHP
laravel框架创建授权策略实例分析
2019/11/22 PHP
js技巧--转义符&quot;\&quot;的妙用
2007/01/09 Javascript
JavaScript 判断浏览器类型及版本
2009/02/21 Javascript
jQuery(1.3.2) 7行代码搞定跟随屏幕滚动的层
2009/05/21 Javascript
js+css实现有立体感的按钮式文字竖排菜单效果
2015/09/01 Javascript
jquery.cookie.js用法实例详解
2015/12/25 Javascript
20分钟成功编写bootstrap响应式页面 就这么简单
2016/05/12 Javascript
Bootstrap所支持的表单控件实例详解
2016/05/16 Javascript
BootStrap入门教程(三)之响应式原理
2016/09/19 Javascript
如何使用JS在HTML中自定义字符串格式化
2017/07/20 Javascript
React Native中的RefreshContorl下拉刷新使用
2017/10/09 Javascript
vue实现图片滚动的示例代码(类似走马灯效果)
2018/03/03 Javascript
jQuery实现的回车触发按钮事件功能示例
2018/03/25 jQuery
layui对工具条进行选择性的显示方法
2019/09/19 Javascript
html2canvas属性和使用方法以及如何使用html2canvas将HTML内容写入Canvas生成图片
2020/01/12 Javascript
es6中let和const的使用方法详解
2020/02/24 Javascript
浅谈vue获得后台数据无法显示到table上面的坑
2020/08/13 Javascript
python中常用检测字符串相关函数汇总
2015/04/15 Python
浅谈Python中的私有变量
2018/02/28 Python
python 并发下载器实现方法示例
2019/11/22 Python
python模块和包的应用BASE_PATH使用解析
2019/12/14 Python
详解Python IO编程
2020/07/24 Python
python线程里哪种模块比较适合
2020/08/02 Python
css3 给页面加个半圆形导航条主要利用旋转和倾斜样式
2014/02/10 HTML / CSS
澳大利亚吉他在线:Artist Guitars
2017/03/30 全球购物
Holland & Barrett爱尔兰:英国领先的健康零售商
2019/03/31 全球购物
Footshop罗马尼亚:最好的运动鞋选择
2019/09/10 全球购物
报到证丢失证明
2014/01/11 职场文书
遗产继承公证书
2014/04/09 职场文书
休学证明范本
2015/06/19 职场文书
2016机关干部作风建设心得体会
2016/01/21 职场文书