Django目录:https://blog.csdn.net/qq_41106844/article/details/105554082
什么是WEB框架
框架:即framework,特指未解决一个开放性问题而设计的具有一定约束性的支撑框架。使用框架可以用来快速开发特点的系统。
大白话就是,别人搭台,你唱戏。
Web框架(Web framework):是一种开发框架,用来支持动态网站、网络应用和网络服务的开发。
大多数的web框架都提供了一套开发和部署网站的方式,也为web行为提供了一套通用的方法。web框架已经实现了很多功能,开发人员使用框架提供的方法并且完成自己的业务逻辑,就能快速开发web应用了。
浏览器和服务器的是基于HTTP协议进行通信的,也可以说web框架就是在以上十几行代码基础张扩展出来的,有很多简单方便使用的方法,大大提高了开发的效率。
为DIV做准备
在div之前,我们要先知道几个概念:
WSGI:全称(Web Server Gateway Interface)。
简单的Web应用就是先把HTML用文件保存好,用一个现成的HTTP服务器软件,接收用户请求,从文件中读取HTML,返回。
如果要动态生成HTML,就需要把上述步骤自己来实现。不过,接受HTTP请求、解析HTTP请求、发送HTTP响应都是苦力活,如果我们自己来写这些底层代码,还没开始写动态HTML呢,就得花个把月去读HTTP规范。
正确的做法是底层代码由专门的服务器软件实现,我们用Python专注于生成HTML文档。
因为我们不希望接触到TCP连接、HTTP原始请求和响应格式,所以,需要一个统一的接口协议来实现这样的服务器软件,让我们专心用Python编写Web业务。这个接口就是WSGI。
wsgiref模块:就是python基于wsgi协议开发的服务模块。
我们先用wsgiref模块实现一个web应用
# 这样实现web应用与socket最大的区别是:
# 不需要在乎客户端或者服务端之间乱七八糟的连接和传输.
# 只需要在有连接在连接8080端口后返回给他页面数据。
from wsgiref.simple_serverimport make_server
#这两个参数,分别是包含HTTP信息的一个字典,发出HTTP响应的函数。
def application(environ, start_response):
#响应头的设置
start_response('200 OK', [('Content-Type', 'text/html')])
return [b'<h1>Hello, web!</h1>']
httpd = make_server('127.0.0.1', 8080, application)
print('Serving HTTP on port 8080...')
# 开始监听HTTP请求:
httpd.serve_forever()
我们再来看看 make_server这个函数:
第一个参数是IP,第二个参数是端口,第三个参数就直接是app。
如果查看environ
我们能在其中发现很多信息以k-v的形式保存,如果想要获得什么信息,可以从这里拿。
那么我们现在改一下需求,我们现在浏览 http://127.0.0.1/hanx 这个页面时,我们想让他出现 hello hanxuan!
我们这就需要去environ中找到负责管理路径的key。
我们发起 http://127.0.0.1/hanx 这个请求,然后我们想要找到的路径找到了。
from wsgiref.simple_serverimport make_server
def application(environ, start_response):
#获取路径
path=environ["PATH_INFO"]
start_response('200 OK', [('Content-Type', 'text/html')])
#简单处理一下之后拼接
strin="<h1>Hello, "+path[1:]+"!"
#将字符串转换成二进制串
return [bytes(strin,encoding="utf-8")]
httpd = make_server('127.0.0.1', 8080, application)
print('Serving HTTP on port 8080...')
# 开始监听HTTP请求:
httpd.serve_forever()
但是显然这么写有点不符合实际,显然我们的页面数量是有限的,那么我们接下来引用真实的HTML文件作为页面。
之后修改程序为:
from wsgiref.simple_serverimport make_server
def foo1():
f =open("index1.html","rb")
data = f.read()
return data
def foo2():
f =open("index2.html","rb")
data = f.read()
return data
def application(environ, start_response):
#获取路径
path=environ["PATH_INFO"]
start_response('200 OK', [('Content-Type', 'text/html')])
if path =="/HAN":
return [foo1()]
elif path =="/XUAN":
return [foo2()]
else:
return [b"404"]
httpd = make_server('127.0.0.1', 8080, application)
print('Serving HTTP on port 8080...')
# 开始监听HTTP请求:
httpd.serve_forever()
但是如果页面数量过多,我们需要大量的使用if--elif--else。那么有没有方便一点的呢,这就有了我们的路由表。
...
#路由表
def router():
URLpattern = [
("/HAN", foo1),
("/XUAN", foo2)
]
return URLpattern
def application(environ, start_response):
#获取路径
path=environ["PATH_INFO"]
start_response('200 OK', [('Content-Type', 'text/html')])
URLpattern = router()
for iin URLpattern:
if path == i[0]:
func = i[1]
return[func()]
else:
return [b"404"]
...
web访问照旧。
使用了路由表就可以自由的增加删除页面。