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 list语法学习(带例子)
Nov 01 Python
Python SQLite3数据库日期与时间常见函数用法分析
Aug 14 Python
Python+matplotlib实现华丽的文本框演示代码
Jan 22 Python
tensorflow识别自己手写数字
Mar 14 Python
Python装饰器模式定义与用法分析
Aug 06 Python
详细介绍Python进度条tqdm的使用
Jul 31 Python
wxpython布局的实现方法
Nov 01 Python
Python FTP文件定时自动下载实现过程解析
Nov 12 Python
使用 django orm 写 exists 条件过滤实例
May 20 Python
基于python实现简单网页服务器代码实例
Sep 14 Python
记一次Django响应超慢的解决过程
Sep 17 Python
如何在vscode中安装python库的方法步骤
Jan 06 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
Linux系统下使用XHProf和XHGui分析PHP运行性能
2015/12/08 PHP
值得分享的php+ajax实时聊天室
2016/07/20 PHP
用php和jQuery来实现“顶”和“踩”的投票功能
2016/10/13 PHP
js继承 Base类的源码解析
2008/12/30 Javascript
jQuery each()方法的使用方法
2010/03/18 Javascript
将HTMLCollection/NodeList/伪数组转换成数组的实现方法
2011/06/20 Javascript
有关于JS构造函数的重载和工厂方法
2013/04/07 Javascript
JS操作图片(增,删,改) 例子
2013/04/17 Javascript
JS求平均值的小例子
2013/11/29 Javascript
详解JavaScript编程中正则表达式的使用
2015/10/25 Javascript
Jquery元素追加和删除的实现方法
2016/05/24 Javascript
JavaScript 对象字面量讲解
2016/06/06 Javascript
javascript正则表达式中分组详解
2016/07/17 Javascript
Angular2中Bootstrap界面库ng-bootstrap详解
2016/10/18 Javascript
nodejs中全局变量的实例解析
2017/03/07 NodeJs
jQuery选择器之属性过滤选择器详解
2017/09/28 jQuery
jquery实现图片跟随鼠标的实例
2017/10/17 jQuery
vue-cli 自定义指令directive 添加验证滑块示例
2017/10/19 Javascript
vuex中的 mapState,mapGetters,mapActions,mapMutations 的使用
2018/04/13 Javascript
小程序页面动态配置实现方法
2019/02/05 Javascript
微信实现自动跳转到用其他浏览器打开指定APP下载
2019/02/15 Javascript
vue 解决IOS10低版本白屏的问题
2020/11/17 Javascript
[07:47]DOTA2国际邀请赛采访专栏:探访Valve总部
2013/08/08 DOTA
python绘制直线的方法
2018/06/30 Python
分享Python切分字符串的一个不错方法
2018/12/14 Python
Python函数返回不定数量的值方法
2019/01/22 Python
Python实现账号密码输错三次即锁定功能简单示例
2019/03/29 Python
pycharm新建Vue项目的方法步骤(图文)
2020/03/04 Python
在css3中background-clip属性与background-origin属性的用法介绍
2012/11/13 HTML / CSS
迪斯尼商品官方网站:ShopDisney
2016/08/01 全球购物
DBA数据库管理员JAVA程序员架构师必看
2016/02/07 面试题
毕业实习个人鉴定范文
2013/12/10 职场文书
党员群众路线承诺书
2014/05/20 职场文书
毕业实习证明范本
2015/06/16 职场文书
JavaScript中MutationObServer监听DOM元素详情
2021/11/27 Javascript
实例详解Python的进程,线程和协程
2022/03/13 Python