Python之web框架浅谈

来源:互联网 发布:silverlight.js 编辑:程序博客网 时间:2024/05/08 21:34
Web application frameworks(网络应用框架),简称:web框架,用于构建web应用。

以下是Pup自制的一张简图(错了另刂扌丁我):


工作原理简易说明:
1、web服务器(中间件)收到来自客户端(浏览器)的请求(request)
2、中间件对request做一些预处理或者直接response请求
3、再经路由系统查找对应的视图函数来处理请求
4、视图函数根据`业务逻辑控制`的需求将`模板`与`数据`进行渲染耦合
5、视图函数处理完返回响应给web服务器
6、web服务器将响应发送给客户端

大致就这样子哈...

web框架本质>>>其实就是socket

下面来构造一个简易的web框架
首先介绍总体结构>>>

miniwebfwPup:
基于Python27-wsgiref自定义的简易web框架,
以下是框架目录,根据MVC模式构建...
=====================
miniwebfwPup

── controllers

│ └── __init__.py
└── index.py
└── ...

│── models
└── __init__.py
└── ...
└── ...

│── views
└── index.html
└── ...
└── ...

│── __init__.py

│── manage.py

│── urls.py

└ ─  README.md


只是简易浅谈
所以
示例中未使用数据库,也没有使用静态文件...


下面所有代码展示:

# manage.py/# -*- coding:utf-8 -*-from wsgiref.simple_server import make_serverfrom urls import URLSdef Runserver(environ,start_response):start_response('200 OK' ,[('Content-Type', 'text/html')])# wsgiref将请求封装到参数environ里,start_response参数为响应# 获取用户urlurl = environ['PATH_INFO']if url in URLS.keys():func_name = URLS[url]ret = func_name()else:ret = '<h1>404<h1>'return retdef run():httpd = make_server('', 8000, Runserver)httpd.serve_forever()if __name__=='__main__':run()
# 对上代码简易说明:此可以说是控制整个程序运行的文件


# urls.py/from controllers import indexURLS ={'/': index.index,'/new': index.new,}
# 对上代码简易说明:此是路由系统,也就是路由映射,处理url与视图函数关系的

# controllers/index.py/  # -*- coding:utf-8 -*-  import os  import datetime  from jinja2 import Template  import sys    reload(sys)  sys.setdefaultencoding('utf-8')    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))  # print os.path.join(BASE_DIR, 'views', 'index.html')    def index():      # 无jinja2的渲染      # f = open(os.path.join(BASE_DIR, 'views', 'index.html'), 'r')      # data = f.read()      # f.close()      # now_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S %p')      # new_data = data.replace('{{ time }}',str(now_time))      # return new_data        # 使用jinja2渲染      f = open(os.path.join(BASE_DIR, 'views', 'index.html'), 'r')      result = f.read()      template = Template(result)      now_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S %p')      data = template.render(time=now_time)      return data.encode('utf-8')      def new():      new = 'hello new'      return new
# 对上代码简易说明:此便是重要的业务逻辑控制文件,处理模板与数据之间的渲染耦合


<!--# views/index.html/--><!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>index</title></head><body><div class="main" style="border: 1px dashed gray;width: 255px;height: auto"><p>nowtime:</p><p>    {{ time }}</p></div><div><h1>hello web</h1><div>this is foo</div></div></body></html>
# 对上代码简易说明:此是一个简易的模板

Uh-oh,
完了...


原创粉丝点击