Python之web框架浅谈(已移至另号)

Web application frameworks(网络应用框架),简称:web框架,用于构建web应用。

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


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

大致就这样子哈...

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

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

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

── 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_server
from urls import URLS

def Runserver(environ,start_response):
	start_response('200 OK' ,[('Content-Type', 'text/html')])
	# wsgiref将请求封装到参数environ里,start_response参数为响应
	# 获取用户url
	url = environ['PATH_INFO']
	if url in URLS.keys():
		func_name = URLS[url]
		ret = func_name()
	else:
		ret = '<h1>404<h1>'
	return ret


def run():
	httpd = make_server('', 8000, Runserver)
	httpd.serve_forever()

if __name__=='__main__':
	run()
# 对上代码简易说明:此可以说是控制整个程序运行的文件


# urls.py/
from controllers import index

URLS ={
	'/': 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,
完了...


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值