zoukankan      html  css  js  c++  java
  • 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映射关系

  • 相关阅读:
    Android 解决小米手机Android Studio安装app 报错的问题It is possible that this issue is resolved by uninstalling an existi
    Android Unresolved Dependencies
    Android studio 自定义打包apk名
    Android Fragment与Activity交互的几种方式
    魅族和三星Galaxy 5.0webView 问题Android Crash Report
    Android几种常见的多渠道(批量)打包方式介绍
    Android批量打包 如何一秒内打完几百个apk渠道包
    上周热点回顾(9.30-10.6)团队
    上周热点回顾(9.23-9.29)团队
    上周热点回顾(9.16-9.22)团队
  • 原文地址:https://www.cnblogs.com/Vera-y/p/10500272.html
Copyright © 2011-2022 走看看