• python_MTV框架


    一、web框架

    web框架:

    1. 自己完成socket的web框架:如,Tornado等
    2. 由WSGI完成socket的web框架:如,Django、flash等

    两种实现过程:

    第二种WSGI方式的,由于自带socket所以可直接写后端代码。

    python标准库提供的独立WSGI服务器称为wsgiref,其他的一些接口格式:

    'cgi': CGIServer,
    'flup': FlupFCGIServer,
    'wsgiref': WSGIRefServer,
    'waitress': WaitressServer,
    'cherrypy': CherryPyServer,
    'paste': PasteServer,
    'fapws3': FapwsServer,
    'tornado': TornadoServer,
    'gae': AppEngineServer,
    'twisted': TwistedServer,
    'diesel': DieselServer,
    'meinheld': MeinheldServer,
    'gunicorn': GunicornServer,
    'eventlet': EventletServer,
    'gevent': GeventServer,
    'geventSocketIO':GeventSocketIOServer,
    'rocket': RocketServer,
    'bjoern' : BjoernServer,
    'auto': AutoServer,

    一个WSGI :(web框架最最最基础版:hello word!)

    from wsgiref.simple_server import make_server
    
    def RunServer(environ, start_response):  # web 框架
        # environ 参数,里面包含了用户请求的所有信息
        start_response('200 OK',[('Content_Type','text/html')])
        return ['<h1>Hello,web!</h1>'.encode()]
    
    if __name__=='__main__':    # wsgi
        # 创建socket server对象
        httpd = make_server('', 8000,RunServer)   # make_server 封装用户信息传给 environ 参数,里面包含了请求的所有信息
        print('serving http on port 8000')  # 只要有请求进来,执行RunServer函数
        httpd.serve_forever()   # while循环等待用户请求

    二、自定义web框架

    from wsgiref.simple_server import make_server
    
    def RunServer(environ, start_response):  # web 框架
        # environ 参数,里面包含了用户请求的所有信息
        start_response('200 OK',[('Content_Type','text/html')])
        url=environ['PATH_INFO']
        if url == '/index/':
           return ['index'.encode()]
        elif url == '/news/':
           return ['news'.encode()]
        else:
           return ['404'.encode()]
    
    
    if __name__=='__main__':    # wsgi
        # 创建socket server对象
        httpd = make_server('', 8000,RunServer)   # make_server 封装用户信息传给 environ 参数,里面包含了请求的所有信息
        print('serving http on port 8000..')  # 只要有请求进来,执行RunServer函数
        httpd.serve_forever()   # while循环等待用户请求
    自定义1号
    from wsgiref.simple_server import make_server
    
    def f1():
        return ['<h1>F1</h1>'.encode()]
    
    def f2():
        return ['<h1>F2</h1>'.encode()]
    # 定义的规则
    routers={
        '/index/':f1(),
        '/news/':f2()
    }
    def RunServer(environ, start_response):  # web 框架
        # environ 参数,里面包含了用户请求的所有信息
        start_response('200 OK',[('Content_Type','text/html')])
        url=environ['PATH_INFO']
        if url in routers.keys():
            func_name = routers[url]
            return func_name
        else:
            return ['<h1>404</h1>'.encode()]
    
    
    if __name__=='__main__':    # wsgi
        # 创建socket server对象
        httpd = make_server('', 8000,RunServer)   # make_server 封装用户信息传给 environ 参数,里面包含了请求的所有信息
        print('serving http on port 8000..')  # 只要有请求进来,执行RunServer函数
        httpd.serve_forever()   # while循环等待用户请求
    自定义2号
    from wsgiref.simple_server import make_server
    
    def f1():          # t1.html可以改为t1.tpl,两种写法,tpl=template
        f=open('D:/1.pycharm/day2019_03_06/templates/t1.html', 'rb')  # 注意这里是以二进制的形式读出
        data=f.read()
        f.close()
        return [data,]
    
    def f2():
        return ['F2'.encode()]
    
    routers={
        '/index/': f1(),
        '/news/': f2()
    }
    def RunServer(environ, start_response):  # web 框架
        start_response('200 OK',[('Content_Type','text/html')])
        url=environ['PATH_INFO']
    
        if url in routers.keys():
            func_name = routers[url]
            return func_name     # python3注意这里不能写为函数,返回的直接是这个值
        else:
            return ['<h1>404</h1>'.encode()]
    
    if __name__=='__main__':    # wsgi
        # 创建socket server对象
        httpd = make_server('', 9000,RunServer)   # make_server 封装用户信息传给 environ 参数,里面包含了请求的所有信息
        print('serving http on port 9000..')  # 只要有请求进来,执行RunServer函数
        httpd.serve_forever()   # while循环等待用户请求
    自定义3号
    注意:在复制代码测试时,打开文件的路径记得修改
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Hello Word</title>
    </head>
    <body>
    <div sytle="color:red;"><h1>我是一只小鸭子啦啦啦啦。。</h1></div>
        <hr/>
        <input type="text" value="请输入文字" />
        <input type="button" value="提交"/>
    </body>
    </html>
    自定义3号所要的HTML代码

     三、jinja2

    jinja2是一个模板系统,它提供了特殊的语法就能使用它进行语言的渲染

    在jinja2中,存在的三种语法:

    1. 控制结构{% %}
    2. 变量取值{{ }}
    3. 注释(# #)

    例:jinja2对HTML的处理称为:模板引擎进行的模板渲染

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>我是女生生</title>
    </head>
    <body>
        <h1>hello</h1>
        <hr/>
        <h1>{{name}}</h1>
        <ul>
        {%for item in user_list%}
            <li>{{item}}</li>
        {%endfor%}
        </ul>
    </body>
    </html>
    XXOO.html

    渲染: 相互整合

    from wsgiref.simple_server import make_server
    from jinja2 import Template
    def f1():
        return ['<h1>ok</h2>'.encode()]
    
    def f2():
        f=open('D:/1.pycharm/day2019_03_06/jinjia_222/XXOO.html', 'rb')
        result = f.read()
        result = result.decode()
        template = Template(result)
        # jinja2 渲染:接收值,进行特特殊的替换
        data = template.render(name='Presely', user_list = ['oo','xx'] )
        return [data.encode()]
    
    # 定义规则
    routers={
        '/index/': f1(),
        '/news/': f2()
    }
    def RunServer(environ, start_response):  # web 框架
        start_response('200 OK',[('Content_Type','text/html')])
        url=environ['PATH_INFO']
    
        if url in routers.keys():
            func_name = routers[url]
            return func_name     # 注意这里不能写为函数,返回的直接是这个值
        else:
            return ['404'.encode()]
    
    if __name__=='__main__':    # wsgi
        # 创建socket server对象
        httpd = make_server('', 8000,RunServer)   # make_server 封装用户信息传给 environ 参数,里面包含了请求的所有信息
        print('serving http on port 8000..')  # 只要有请求进来,执行RunServer函数
        httpd.serve_forever()   # while循环等待用户请求
    渲染

    有关jinja2:https://www.cnblogs.com/dachenzi/p/8242713.html

    四、web框架之MVC/MTV

    本质上两个所指的框架是一个样的;

     

    Django所用模式就是MTV模式,但需要额外的定义url映射关系

  • 相关阅读:
    上传文件,经过Zuul,中文文件名乱码解决办法
    Spring Cloud Sleuth进阶实战
    如何在IDEA启动多个Spring Boot工程实例
    深入理解Zuul之源码解析
    深入理解Hystrix之文档翻译
    Spring 之BeanFactory(转)
    spring之BeanFactoryAware接口
    ExecutorService线程池
    POJO
    newInstance 与new的区别
  • 原文地址:https://www.cnblogs.com/Vera-y/p/10500272.html
Copyright © 2020-2023  润新知