xu1296634150

2.1 简介

  1. 对于真实开发中的python web程序来说,一般会分为两部分:服务器程序应用程序

  2. 服务器程序负责对socket服务端进行封装,并在请求到来时,对请求的各种数据进行整理。

  3. 应用程序则负责具体的逻辑处理。为了方便应用程序的开发,就出现了众多的Web框架,例如:Django、Flask、web.py 等。不同的框架有不同的开发方式,但是无论如何,开发出的应用程序都要和服务器程序配合,才能为用户提供服务。

  4. WSGI(Web Server Gateway Interface)就是一种规范,它定义了使用Python编写的web应用程序与web服务器程序之间的接口格式,实现web应用程序与web服务器程序间的解耦。

  5. 常用的WSGI服务器有uwsgi(线上)Gunicorn。而Python标准库提供的独立WSGI服务器叫wsgiref(性能较差,用于测试),Django开发环境用的就是这个模块来做服务器。

    • negix:把静态页面返回,不经过Django,动态交给uwsgi用于Django处理,再返回

2.2 wsgiref

  • 利用wsgiref模块替换socket server 部分

from wsgiref.simple_server import make_server

def home(url):
    s = \'这是页面{}\'.format(url)
    print(s)
    return s.encode(\'utf-8\')

def index(url):
    s = \'这是页面{}\'.format(url)
    print(s)
    return bytes(s, encoding=\'utf-8\')

url_li = {\'/index\': index, \'/home\': home}

def run(environ, start_response):
    # 设置http响应头
    start_response(\'200 ok\', [(\'Content-Type\', \'text/html;charset=utf8\'), ])
    url = environ[\'PATH_INFO\']
    print(url, )
    if url_li.get(url):
        response = url_li[url](url)
    else:response = b\'404 not found\'
    return [response, ]

if __name__ == \'__main__\':
    httpd = make_server(\'127.0.0.1\', 8000, run)
    print("我在8090等你哦...")
    httpd.serve_forever()

 

2.3 模版渲染模块jinja2

  • 模板的原理就是字符串替换,我们只要在HTML页面中遵循jinja2的语法规则写上,其内部就会按照指定的语法进行相应的替换,从而达到动态的返回内容。

#!/usr/bin/env python
# -*- coding:utf-8 -*-
from jinja2 import Template
from wsgiref.simple_server import make_server

def index(url):
    with open(\'./html/index2.html\', \'r\', encoding=\'utf-8\') as f:
        data = f.read()
        # 生成模版文件
        template = Template(data)
        # 把数据填充到模版
        res = template.render({\'name\': \'henry\', \'hobby\': [\'reading\', \'movies\', \'musics\']})
    return bytes(res, encoding=\'utf-8\')

def run_server(environ, start_response):
    start_response(\'200 ok\', [(\'Content-Type\', \'text/html;charset=utf8\'), ])
    url = environ[\'PATH_INFO\']
    reponse = index(url)
    return [response, ]

if __name__ == \'__main__\':
    httpd = make_server(\'127.0.0.1\', 8000, run_server)
    print(\'here\')
    httpd.serve_forever()

 

分类:

技术点:

相关文章: