web框架-django方式添加路由
2017-12-22 20:42
441 查看
在说框架之前,先要了不同的资源请求。
什么是静态资源?
一般不需要经常变化的资源—文件系统
什么是动态资源?
需要经常变化的数据—数据库
为什么有了web服务器还有web框架?
web应用程序会经常变动,如果和web服务器一起,会影响服务器,将它们分开可以更好的修改
当浏览器发来动态请求的时候,它会将请求转给浏览器框架来处理,减轻了服务器的压力,各司其职更好的完善自己
静态资源为什么不用web框架处理? 动态资源需要呢?
静态资源是基本不变化,处理发送都比较简单,web服务器可以直接处理
动态资源和业务相关,需要经常变化,处理起来比较麻烦,需要单独的用web框架来处理
web服务器和web框架之间需要协议就是上文所说的WSGI 协议
在WSGI的协议中,我们将每次请求的路径分别的与各个函数比较,在函数少的时候,还可以接受
但是当函数很多,就不适用了。我们应该用另外一种方式来保存地址和地址对应的函数
所以要引入一个概念:路由
路由概念来源于路由器。
路由器中有一个列表,该列表使得路由器具有一种能力-根据数据包要送到的目的地址而决定下一站地址。
Web开发概念中的路由概念与此类似-根据HTTP请求路径的不同决定不同的执行代码。
在Django中用的就是这种方式
在路由列表中 每一条叫做路由 (路径,路径对应的执行的函数)
路由列表 [(),(),()]
如:
对照WSGI那篇文章的例子,相当于把查询数据进行了优化,虽然前提是,我们需要将每一个函数都写进去,
但是这样非常的一目了然的知道各个函数以及对应的路径
什么是静态资源?
一般不需要经常变化的资源—文件系统
什么是动态资源?
需要经常变化的数据—数据库
为什么有了web服务器还有web框架?
web应用程序会经常变动,如果和web服务器一起,会影响服务器,将它们分开可以更好的修改
当浏览器发来动态请求的时候,它会将请求转给浏览器框架来处理,减轻了服务器的压力,各司其职更好的完善自己
静态资源为什么不用web框架处理? 动态资源需要呢?
静态资源是基本不变化,处理发送都比较简单,web服务器可以直接处理
动态资源和业务相关,需要经常变化,处理起来比较麻烦,需要单独的用web框架来处理
web服务器和web框架之间需要协议就是上文所说的WSGI 协议
在WSGI的协议中,我们将每次请求的路径分别的与各个函数比较,在函数少的时候,还可以接受
但是当函数很多,就不适用了。我们应该用另外一种方式来保存地址和地址对应的函数
所以要引入一个概念:路由
路由概念来源于路由器。
路由器中有一个列表,该列表使得路由器具有一种能力-根据数据包要送到的目的地址而决定下一站地址。
Web开发概念中的路由概念与此类似-根据HTTP请求路径的不同决定不同的执行代码。
在Django中用的就是这种方式
在路由列表中 每一条叫做路由 (路径,路径对应的执行的函数)
路由列表 [(),(),()]
如:
g_route_list = [ ('/gettime.py', gettime), ('/index.py', index), ('/center.py', center), ('/update.py', update) ]
对照WSGI那篇文章的例子,相当于把查询数据进行了优化,虽然前提是,我们需要将每一个函数都写进去,
但是这样非常的一目了然的知道各个函数以及对应的路径
抛出web框架的代码:
import time
import re
# 指定模板文件资源 所在的根目录
TEMPLATE_ROOT = "./template"
def gettime(path_info):
"""当用户请求/gettime.py的时候执行该函数代码"""
return time.ctime()
def center(path_info):
"""当用户请求/index.py的时候执行该函数代码"""
# 读取模板文件
# /index.py ----》 /index.html
path_info = path_info.replace(".py", ".html")
with open(TEMPLATE_ROOT + path_info) as file:
html = file.read()
# 将模板文件的数据进行 替换 --正则替换 {%content%}
data_from_mysql = "这是从数据库中查询出来的相关信息"
html = re.sub(r"\{%content%\}",data_from_mysql,html)
return html
def update(path_info):
"""当用户请求/index.py的时候执行该函数代码"""
# 读取模板文件
# /index.py ----》 /index.html
path_info = path_info.replace(".py", ".html")
with open(TEMPLATE_ROOT + path_info) as file:
html = file.read()
# 将模板文件的数据进行 替换 --正则替换 {%content%}
data_from_mysql = "这是从数据库中查询出来的相关信息"
html = re.sub(r"\{%content%\}",data_from_mysql,html)
return html
def index(path_info):
path_info = path_info.replace(".py", ".html")
with open(TEMPLATE_ROOT + path_info) as file:
html = file.read()
data_from_mysql = "这是从数据库中查询出来的相关信息"
html = re.sub(r"\{%content%\}",data_from_mysql,html)
return html
g_route_list = [ ('/gettime.py', gettime), ('/index.py', index), ('/center.py', center), ('/update.py', update) ]
def app(environ, start_response):
path_info = environ['PATH_INFO']
# 当用户访问已经实现了功能的路径 就返回200 OK 其余的返回404 Not Found
# if path_info == '/gettime.py':
# start_response('200 OK', [('Content-Type', 'text/html'),
# ("Server", "PythonWebServer")])
# return gettime(path_info)
# elif path_info == '/index.py':
# # 读取模板文件 并且进行替换 然后通过返回值返回给web服务器
# start_response('200 OK', [('Content-Type', 'text/html'),
# ("Server", "PythonWebServer")])
# return index(path_info)
# elif path_info == '/center.py':
# # 读取模板文件 并且进行替换 然后通过返回值返回给web服务器
# start_response('200 OK', [('Content-Type', 'text/html'),
# ("Server", "PythonWebServer")])
# return center(path_info)
# elif path_info == '/update.py':
# # 读取模板文件 并且进行替换 然后通过返回值返回给web服务器
# start_response('200 OK', [('Content-Type', 'text/html'),
# ("Server", "PythonWebServer")])
# return update(path_info)
# 遍历路由列表 看其中哪一条信息符合用户的请求路径 如果符合就执行路径对应的函数
for url,func in g_route_list:
if path_info == url:
start_response('200 OK', [('Content-Type', 'text/html'),
("Server", "PythonWebSe
4000
rver")])
return func(path_info)
else:
# app函数的返回值就是响应体
start_response('404 Not Found', [('Content-Type', 'text/html'),
("Server", "PythonWebServer")])
return 'Hello World!!!!!' + str(environ)
就是把最后的对应查找部分进行了优化
相关文章推荐
- web框架-flask方式添加路由
- werkzeug实现简单Python web框架(3):添加动态路由
- web框架django初探
- 介绍两个Python web框架:Django & Tornado
- Golanger Web Framework(框架简单实现了MVC的设计方式)
- Python Web框架Django框架安装配置
- django学习记录-- 添加haystack搜索框架时报错:AttributeError: 'BlogIndex' object has no attribute 'fields'
- day15 web框架和Django基础
- python web框架Django学习(五)模板中的循环,条件判断,常用的标签,过滤器的使用
- Python web 框架之 Django 基础搭建服务
- 分析Python的Django框架的运行方式及处理流程
- Python Web框架Django (三)
- 基于 Django 框架的敏捷 Web 开发
- Django web框架之模板继承
- python-django开发web框架的setting.py
- Web框架之Django
- Django vs Flask vs Pyramid 选择你的WEB框架
- Django(一)--Web框架理解
- 简单学习Python的web框架Django(一)
- 第六篇:web之python框架之django