Python之web框架浅谈

"""

<axiner>声明:
(错了另刂扌丁我)
(如若有误,请记得指出哟,谢谢了!!!)

"""

Web application frameworks(网络应用框架),简称:web框架,用于构建web应用。

以下是axiner自制的一张简图:

工作原理简易说明:
1、web服务器(中间件)收到来自客户端(浏览器)的请求(request)
2、中间件对request做一些预处理或者直接response请求
3、再经路由系统查找对应的视图函数来处理请求
4、视图函数根据`业务逻辑控制`的需求将`模板`与`数据`进行渲染耦合
5、视图函数处理完返回响应给web服务器
6、web服务器将响应发送给客户端
大致就这样子哈...

web框架本质>>>其实就是socket

下面来构造一个简易的web框架
首先介绍总体结构>>>

MinWeb:
基于Python27-wsgiref自定义的简易web框架,
以下是框架目录,根据MVC模式构建...
=====================

MinWeb

│── controllers

│ └── __init__.py
│ └── index.py
│ └── ...

│── models
│ └── __init__.py
│ └── ...
│ └── ...

│── views
│ └── index.html
│ └── ...
│ └── ...

│── __init__.py

│── manage.py

│── urls.py

└ ─  README.md

只是简易浅谈
所以
示例中未使用数据库,也没有使用静态文件...

下面所有代码展示:

    # manage.py/  
    # -*- coding:utf-8 -*-  
    from wsgiref.simple_server import make_server  
    from urls import URLS  
      
    def Runserver(environ,start_response):  
        start_response('200 OK' ,[('Content-Type', 'text/html')])  
        # wsgiref将请求封装到参数environ里,start_response参数为响应  
        # 获取用户url  
        url = environ['PATH_INFO']  
        if url in URLS.keys():  
            func_name = URLS[url]  
            ret = func_name()  
        else:  
            ret = '<h1>404<h1>'  
        return ret  
      
      
    def run():  
        httpd = make_server('', 8000, Runserver)  
        httpd.serve_forever()  
      
    if __name__=='__main__':  
        run()  

# 对上代码简易说明:此可以说是控制整个程序运行的文件

    # urls.py/  
    from controllers import index  
      
    URLS ={  
        '/': index.index,  
        '/new': index.new,  
    }  

# 对上代码简易说明:此是路由系统,也就是路由映射,处理url与视图函数关系的

    # controllers/index.py/    
    # -*- coding:utf-8 -*-    
    import os    
    import datetime    
    from jinja2 import Template    
    import sys    
        
    reload(sys)    
    sys.setdefaultencoding('utf-8')    
        
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))    
    # print os.path.join(BASE_DIR, 'views', 'index.html')    
        
    def index():    
        # 无jinja2的渲染    
        # f = open(os.path.join(BASE_DIR, 'views', 'index.html'), 'r')    
        # data = f.read()    
        # f.close()    
        # now_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S %p')    
        # new_data = data.replace('{{ time }}',str(now_time))    
        # return new_data    
        
        # 使用jinja2渲染    
        f = open(os.path.join(BASE_DIR, 'views', 'index.html'), 'r')    
        result = f.read()    
        template = Template(result)    
        now_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S %p')    
        data = template.render(time=now_time)    
        return data.encode('utf-8')    
        
        
    def new():    
        new = 'hello new'    
        return new  

# 对上代码简易说明:此便是重要的业务逻辑控制文件,处理模板与数据之间的渲染耦合

<!--# views/index.html/-->  
<!DOCTYPE html>  
<html lang="en">  
<head>  
    <meta charset="UTF-8">  
    <title>index</title>  
</head>  
<body>  
<div class="main" style="border: 1px dashed gray;width: 255px;height: auto">  
    <p>nowtime:</p>  
    <p>    {{ time }}</p>  
</div>  
  
<div>  
    <h1>hello web</h1>  
    <div>this is foo</div>  
</div>  
  
</body>  
</html> 

# 对上代码简易说明:此是一个简易的模板
 

Uh-oh,

完了...

猜你喜欢

转载自blog.csdn.net/atpuxiner/article/details/79387500