Python之web框架浅谈
来源:互联网 发布:silverlight.js 编辑:程序博客网 时间:2024/05/08 21:34
Web application frameworks(网络应用框架),简称:web框架,用于构建web应用。
1、web服务器(中间件)收到来自客户端(浏览器)的请求(request)
2、中间件对request做一些预处理或者直接response请求
3、再经路由系统查找对应的视图函数来处理请求
4、视图函数根据`业务逻辑控制`的需求将`模板`与`数据`进行渲染耦合
5、视图函数处理完返回响应给web服务器
6、web服务器将响应发送给客户端
大致就这样子哈...
web框架本质>>>其实就是socket
下面来构造一个简易的web框架
首先介绍总体结构>>>
Uh-oh,
完了...
以下是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,
完了...
阅读全文
0 0
- Python之web框架浅谈
- 浅谈Python web框架
- 浅谈Python web框架
- 浅谈Python Web框架
- 浅谈Python web框架
- 浅谈Python web框架
- 浅谈Python Web的五大框架
- 浅谈五大Python Web框架
- 浅谈Python Web的五大框架
- 浅谈五大Python Web开发框架
- 浅谈五大Python Web框架[转]
- 浅谈五大Python Web框架
- 浅谈五大Python Web框架
- 浅谈五大Python Web框架
- 浅谈五大Python Web框架
- 浅谈五大Python Web框架
- 浅谈Python Web的五大框架
- 浅谈五大Python Web框架
- js数组方法大全
- 关于启动一个IOS程序的详细流程图
- Coordinator stopped because there were error(s) in the worker(s).
- [RK3399][Android6.0] 系统关机调用过程小结
- map遍历的几种方法
- Python之web框架浅谈
- BN
- CODE[VS]1026 逃跑的拉尔夫
- 钱币组合问题(二):(每种硬币次数受限)
- 使用unity Cinemachine做出相机沿固定轨道移动且镜头自动聚焦对象效果
- Unity封装Debug调试
- Eclipse搭建Python开发环境
- Python——读取二进制文件
- leetcode 228. Summary Ranges