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遍历一个目录,输出所有的文件名的实例
Apr 23 Python
Python中的TCP socket写法示例
May 11 Python
用Python将一个列表分割成小列表的实例讲解
Jul 02 Python
python之文件读取一行一行的方法
Jul 12 Python
python实现名片管理系统
Nov 29 Python
Python 计算任意两向量之间的夹角方法
Jul 05 Python
python3实现带多张图片、附件的邮件发送
Aug 10 Python
python实现登录密码重置简易操作代码
Aug 14 Python
Python 导入文件过程图解
Oct 15 Python
python使用matplotlib绘制折线图的示例代码
Sep 22 Python
pycharm2020.1.2永久破解激活教程,实测有效
Oct 29 Python
Python可以用来做什么
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
PHP中substr函数字符串截取用法分析
2016/01/07 PHP
PHP设计模式之原型模式定义与用法详解
2018/04/03 PHP
菜单效果
2006/10/14 Javascript
基于jquery的代码显示区域自动拉长效果
2011/12/07 Javascript
深入理解JavaScript系列(15) 函数(Functions)
2012/04/12 Javascript
如何在一个页面显示多个百度地图
2013/04/07 Javascript
jQuery中delegate和on的用法与区别详细解析
2014/01/26 Javascript
jQuery.lazyload+masonry改良图片瀑布流代码
2014/06/20 Javascript
JQuery的Ajax中Post方法传递中文出现乱码的解决方法
2014/10/21 Javascript
js实现div层缓慢收缩与展开的方法
2015/05/11 Javascript
jQuery表格行上移下移和置顶的实现方法
2015/10/08 Javascript
nodejs实现bigpipe异步加载页面方案
2016/01/26 NodeJs
Vue制作Todo List网页
2017/04/26 Javascript
详解webpack+angular2开发环境搭建
2017/06/28 Javascript
react-native-fs实现文件下载、文本存储的示例代码
2017/09/22 Javascript
layui点击按钮添加可编辑的一行方法
2018/08/15 Javascript
ES6中的class是如何实现的(附Babel编译的ES5代码详解)
2019/05/17 Javascript
JS实现的碰撞检测与周期移动完整示例
2019/09/02 Javascript
python爬虫常用的模块分析
2014/08/29 Python
python复制文件的方法实例详解
2015/05/22 Python
CentOS 6.5中安装Python 3.6.2的方法步骤
2017/12/03 Python
Python3实现的字典、列表和json对象互转功能示例
2018/05/22 Python
python训练数据时打乱训练数据与标签的两种方法小结
2018/11/08 Python
浅析Python 中几种字符串格式化方法及其比较
2019/07/02 Python
在pycharm中为项目导入anacodna环境的操作方法
2020/02/12 Python
python 负数取模运算实例
2020/06/03 Python
Python 使用Opencv实现目标检测与识别的示例代码
2020/09/08 Python
全球知名旅游社区巴西站点:TripAdvisor巴西
2016/07/21 全球购物
副总经理工作职责
2013/11/28 职场文书
创业女性典型材料
2014/05/02 职场文书
个人收入证明范本
2014/09/18 职场文书
建设办主任四风问题整改思路和措施
2014/09/20 职场文书
财务检查整改报告
2014/11/06 职场文书
解决Go gorm踩过的坑
2021/04/30 Golang
Java Socket实现Redis客户端的详细说明
2021/05/26 Redis
Python快速实现一键抠图功能的全过程
2021/06/29 Python