zoukankan      html  css  js  c++  java
  • python web框架

    Model (数据库操作)        View (模板文件)       Controller(业务处理)

    简称MVC

    也可以称MTV

    Model        Template (类似View)      Controller

    一个简单web框架

    # -*- coding:utf-8 -*-
    # Author:Brownyangyang
    from wsgiref.simple_server import make_server
    
    def RunServer(environ,start_response):
        #environ  封装客户端发来的数据
        #start_response  封装要返回给用户的数据
        start_response('200 OK',[('Content-Type','text/html')])
        return ['<h1>Hello,web!</h1>'.encode('utf-8'),]
    
    if __name__ == '__main__':
        # 把ip,端口,函数传给make_server
        httpd = make_server('',8000,RunServer)
        print("Serving HTTP on port 8000......")
        httpd.serve_forever()

    访问不同后缀

    # -*- coding:utf-8 -*-
    # Author:Brownyangyang
    from wsgiref.simple_server import make_server
    
    def handle_index():
        return ['<h1>This is index!</h1>'.encode ('utf-8'), ]
    
    def handle_data():
        return ['<h1>This is data!</h1>'.encode ('utf-8'), ]
    
    def RunServer(environ,start_response):
        #environ  封装客户端发来的数据
        #start_response  封装要返回给用户的数据
        start_response('200 OK',[('Content-Type','text/html')])
        current_url = environ['PATH_INFO']
        if current_url == '/index':
            return handle_index()
        elif current_url == '/data':
            return handle_data()
        else:
            return ['<h1>404</h1>'.encode ('utf-8'), ]
    
    
    if __name__ == '__main__':
        # 把ip,端口,函数传给make_server
        httpd = make_server('',8000,RunServer)
        print("Serving HTTP on port 8000......")
        httpd.serve_forever()
    View Code

    再优化下

    # -*- coding:utf-8 -*-
    # Author:Brownyangyang
    from wsgiref.simple_server import make_server
    
    def handle_index():
        return ['<h1>This is index!</h1>'.encode ('utf-8'), ]
    
    def handle_data():
        return ['<h1>This is data!</h1>'.encode ('utf-8'), ]
    
    URL_DICT = {
    
        "/index":handle_index,
        "/data":handle_data,
    }
    
    def RunServer(environ,start_response):
        #environ  封装客户端发来的数据
        #start_response  封装要返回给用户的数据
        start_response('200 OK',[('Content-Type','text/html')])
        current_url = environ['PATH_INFO']
        func = None
        if current_url in URL_DICT:
            func = URL_DICT[current_url]
        if func:
            return func()
        else:
            return ['<h1>404!</h1>'.encode ('utf-8'), ]
    
    
    if __name__ == '__main__':
        # 把ip,端口,函数传给make_server
        httpd = make_server('',8000,RunServer)
        print("Serving HTTP on port 8000......")
        httpd.serve_forever()
    
    
    如何把上面拆分成MVC呢:
    
    执行脚本a.py如下:
    
    # -*- coding:utf-8 -*-
    # Author:Brownyangyang
    from wsgiref.simple_server import make_server
    from Controller import account
    URL_DICT = {
    
        "/index":account.handle_index,
        "/data":account.handle_data,
    }
    
    def RunServer(environ,start_response):
        #environ  封装客户端发来的数据
        #start_response  封装要返回给用户的数据
        start_response('200 OK',[('Content-Type','text/html')])
        current_url = environ['PATH_INFO']
        func = None
        if current_url in URL_DICT:
            func = URL_DICT[current_url]
        if func:
            return func()
        else:
            return ['<h1>404!</h1>'.encode ('utf-8'), ]
    
    
    if __name__ == '__main__':
        # 把ip,端口,函数传给make_server
        httpd = make_server('',8000,RunServer)
        print("Serving HTTP on port 8000......")
        httpd.serve_forever()

    在a.py当前路径新建View、Controller和Model

    View下面建一个index.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <h1>index @uu</h1>
    
    </body>
    </html>

    Controller下面建一个account.py,专门存放自定义方法

    # -*- coding:utf-8 -*- 
    # Author:Brownyangyang
    import time
    
    def handle_index():
        current_time = str(time.time())
        f = open('View/index.html',mode='rb')
        data = f.read()
        f.close()
        data = data.replace(b'@uu',current_time.encode('utf-8'))
        return [data, ]
    
    def handle_data():
        return ['<h1>This is data!</h1>'.encode ('utf-8'), ]

    Model没写,还没有这么复杂

    ps:了解下wsgiref模块吧

    WSGI(Web Server Common Interface)是专门为Python语言制定的web服务器与应用程序之间的网关接口规范,通俗的来说,只要一个服务器拥有一个实现了WSGI标准规范的模块(例如apache的mod_wsgi模块),那么任意的实现了WSGI规范的应用程序都能与它进行交互。因此,WSGI也主要分为两个程序部分:服务器部分和应用程序部分。 
    wsgiref则是官方给出的一个实现了WSGI标准用于演示用的简单Python内置库,它实现了一个简单的WSGI Server和WSGI Application(在simple_server模块中),主要分为五个模块:simple_server, util, headers, handlers, validate。

  • 相关阅读:
    java.lang.IllegalAccessError: tried to access field org.slf4j.impl.StaticLoggerBinder.SINGLETON from class org.slf4j.LoggerFactory
    项目开发中关于权限的实现方案简单描述(帮助以后回忆)
    一些比较有用的模板
    递归之遍历部门
    关于s2sh框架关于hibernate懒加载问题的说明和解决方案
    Hibernate实体映射配置(XML)简单三步完美配置
    项目添加性能监控日志
    redis常用命令大全
    redis主从同步
    redis之哨兵部署运行日志解读
  • 原文地址:https://www.cnblogs.com/brownyangyang/p/9310707.html
Copyright © 2011-2022 走看看