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检查字符串是否是正确ISBN的方法
Jul 11 Python
Python爬虫爬取美剧网站的实现代码
Sep 03 Python
Python实现类的创建与使用方法示例
Jul 25 Python
python 实现在txt指定行追加文本的方法
Apr 29 Python
Python判断是否json是否包含一个key的方法
Dec 31 Python
Python3读写Excel文件(使用xlrd,xlsxwriter,openpyxl3种方式读写实例与优劣)
Feb 13 Python
Python爬虫JSON及JSONPath运行原理详解
Jun 04 Python
深入了解python列表(LIST)
Jun 08 Python
python 监控logcat关键字功能
Sep 04 Python
提高python代码运行效率的一些建议
Sep 29 Python
Pycharm创建文件时自动生成文件头注释(自定义设置作者日期)
Nov 24 Python
python制作微博图片爬取工具
Jan 16 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
PHP4实际应用经验篇(4)
2006/10/09 PHP
PHP读取大文件末尾N行的高效方法推荐
2016/06/03 PHP
PHP session会话操作技巧小结
2016/09/27 PHP
thinkPHP分页功能实例详解
2017/05/05 PHP
PHP SPL 被遗落的宝石【SPL应用浅析】
2018/04/20 PHP
thinkPHP5框架auth权限控制类与用法示例
2018/06/12 PHP
php中file_get_contents()函数用法实例
2019/02/21 PHP
javascript 三种编解码方式
2010/02/01 Javascript
Js 去掉字符串中的空格(实现代码)
2013/11/19 Javascript
JS实现仿京东淘宝竖排二级导航
2014/12/08 Javascript
JavaScript设置body高度为浏览器高度的方法
2015/02/09 Javascript
详解AngularJS中module模块的导入导出
2015/12/10 Javascript
BootStrap tooltip提示框使用小结
2016/10/26 Javascript
BootStrap轮播HTML代码(推荐)
2016/12/10 Javascript
简化vuex的状态管理方案的方法
2018/06/02 Javascript
JavaScript中发出HTTP请求最常用的方法
2018/07/12 Javascript
vue 解决无法对未定义的值,空值或基元值设置反应属性报错问题
2020/07/31 Javascript
[03:24]CDEC.Y赛前采访 努力备战2016国际邀请赛中国区预选赛
2016/06/25 DOTA
[33:15]2018DOTA2亚洲邀请赛3月30日 小组赛B组 VP VS Mineski
2018/03/31 DOTA
python访问mysql数据库的实现方法(2则示例)
2016/01/06 Python
Python正确重载运算符的方法示例详解
2017/08/27 Python
Python基于pyCUDA实现GPU加速并行计算功能入门教程
2018/06/19 Python
Pycharm如何运行.py文件的方法步骤
2020/03/03 Python
Pycharm pyuic5实现将ui文件转为py文件,让UI界面成功显示
2020/04/08 Python
Jupyter notebook快速入门教程(推荐)
2020/05/18 Python
简单了解如何封装自己的Python包
2020/07/08 Python
Python Matplotlib绘图基础知识代码解析
2020/08/31 Python
Python接口自动化系列之unittest结合ddt的使用教程详解
2021/02/23 Python
细说CSS3中的选择符
2008/10/17 HTML / CSS
canvas里面如何基于随机点绘制一个多边形的方法
2018/06/13 HTML / CSS
new修饰符是起什么作用
2015/06/28 面试题
创业者迈进成功第一步:如何写创业计划书?
2014/03/22 职场文书
公务员四风问题对照检查材料整改措施
2014/09/26 职场文书
2014光棍节大学生联谊活动方案
2014/10/10 职场文书
卡特教练观后感
2015/06/08 职场文书
Python手拉手教你爬取贝壳房源数据的实战教程
2021/05/21 Python