第十二章 Django框架 12.1 服务器程序和应用程序
服务器程序负责对socket服务器进行封装,并在请求到来时,对请求的各种数据进行整理。应用程序则负责具体的逻辑处理。为了方便应用程序的开发,就出现了众多的Web框架,例如:Django、Flask、web.py 等。不同的框架有不同的开发方式,但是无论如何,开发出的应用程序都要和服务器程序配合,才能为用户提供服务。
WSGI(Web Server Gateway Interface)就是一种规范,它定义了使用Python编写的web应用程序与web服务器程序之间的接口格式,实现web应用程序与web服务器程序间的解耦。
常用的WSGI服务器有uwsgi、Gunicorn,而Python标准库提供的独立WSGI服务器叫wsgiref,Django开发环境用的就是这个模块来做服务器。
12.11 用wsgiref代替socket serverimport time from wsgiref.simple_server import make_server def home(url): # 将返回不同的内容部分封装成函数 s = "this is {} page!".format(url) return bytes(s, encoding="utf8") def index(url): return b\'<h1>index page</h1>\' def user(url): # 不同的用户得到的页面上显示不同的时间 c_time = str(time.time()) with open("user.html", "r") as f: data_s = f.read() data_s = data_s.replace("@@xx@@", c_time) return bytes(data_s, encoding="utf8") url2func = [ # url和实际要执行的函数的对应关系 ("/index/", index), ("/home/", home), ("/user/", user),] def run_server(environ, start_response):# 按照wsgiref的要求定义一个run_server函数 start_response(\'200 OK\',[(\'Content-Type\',\'text/html;charset=utf8\'),])#设置HTTP响应的状态码和头信息 url = environ[\'PATH_INFO\'] # 取到用户输入的url func = None for i in url2func: if url == i[0]: func = i[1] # 拿到将要执行的函数 break if func: msg = func(url) # 执行对应的函数 else: msg = b\'<h1>404</h1>\' # 找不到要执行的函数就返回404 return [msg, ] # 发送消息到客户端 if __name__ == \'__main__\': httpd = make_server(\'127.0.0.1\', 8090, run_server) print("我在8090等你哦...") httpd.serve_forever()