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连接MySQL、MongoDB、Redis、memcache等数据库的方法
Nov 15 Python
Python实现把回车符\r\n转换成\n
Apr 23 Python
Django返回json数据用法示例
Sep 18 Python
Python设计模式之代理模式简单示例
Jan 09 Python
python实现微信自动回复功能
Apr 11 Python
Python实现输入二叉树的先序和中序遍历,再输出后序遍历操作示例
Jul 27 Python
详解Python 装饰器执行顺序迷思
Aug 08 Python
解决Shell执行python文件,传参空格引起的问题
Oct 30 Python
利用python在excel里面直接使用sql函数的方法
Feb 08 Python
pytorch GAN生成对抗网络实例
Jan 10 Python
Python3通过chmod修改目录或文件权限的方法示例
Jun 08 Python
一些关于python 装饰器的个人理解
Aug 31 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中使用strpos函数实现屏蔽敏感关键字功能
2014/08/21 PHP
PHP简单数据库操作类实例【支持增删改查及链式操作】
2016/10/10 PHP
php+mysql+jquery实现简易的检索自动补全提示功能
2017/04/15 PHP
javascript 表单规则集合对象
2009/07/21 Javascript
jQuery在vs2008及js文件中的无智能提示的解决方法
2010/12/30 Javascript
JQuery select控件的相关操作实现代码
2012/09/14 Javascript
jquery操作复选框(checkbox)的12个小技巧总结
2014/02/04 Javascript
使用纯javascript实现放大镜效果
2015/03/18 Javascript
ECMA5数组的新增方法有哪些及forEach()模仿实现
2015/11/03 Javascript
javaScript如何跳出多重循环break、continue
2016/09/01 Javascript
详谈表单格式化插件jquery.serializeJSON
2017/06/23 jQuery
JS实现颜色的10进制转化成rgba格式的方法
2017/09/04 Javascript
用Axios Element实现全局的请求loading的方法
2018/03/15 Javascript
微信小程序自定义组件实现tabs选项卡功能
2018/07/14 Javascript
React中使用async validator进行表单验证的实例代码
2018/08/17 Javascript
JS中DOM元素的attribute与property属性示例详解
2018/09/04 Javascript
JS随机密码生成算法
2019/09/23 Javascript
[52:02]完美世界DOTA2联赛PWL S2 FTD.C vs SZ 第一场 11.27
2020/11/30 DOTA
python3使用urllib示例取googletranslate(谷歌翻译)
2014/01/23 Python
python中的多线程实例教程
2014/08/27 Python
在 Python 应用中使用 MongoDB的方法
2017/01/05 Python
python编程使用selenium模拟登陆淘宝实例代码
2018/01/25 Python
Python版名片管理系统
2018/11/30 Python
python字典排序的方法
2019/10/12 Python
python多维数组分位数的求取方式
2020/03/03 Python
HTML5中如何显示视频呢 HTML5视频播放demo
2013/06/08 HTML / CSS
size?丹麦官网:英国伦敦的球鞋精品店
2019/04/15 全球购物
Penhaligon’s英国官网:成立于1870年的英国香水制造商
2021/02/18 全球购物
机电专业大学生职业规划书范文
2014/02/25 职场文书
社保转移委托书范本
2014/10/08 职场文书
运动会搞笑广播稿
2014/10/14 职场文书
廉洁自律承诺书2015
2015/01/22 职场文书
幼儿园六一主持词
2015/06/30 职场文书
2016年教师党员创先争优承诺书
2016/03/24 职场文书
彻底解决MySQL使用中文乱码的方法
2022/01/22 MySQL
MySQL Server层四个日志的实现
2022/03/31 MySQL