Python之Web框架

 

  Python之Web框架:

        

 

一.  Web框架的本质:

    对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端。

 1 #!/usr/bin/env python
 2 #coding:utf-8
 3 
 4 #web框架的基础结构,几乎所有开发者都是基于此基础结果进行扩展。
 5 
 6 import socket
 7   
 8 def handle_request(client):
 9     buf = client.recv(1024)
10     client.send("HTTP/1.1 200 OK\r\n\r\n")
11     client.send("Hello, Seven")
12   
13 def main():
14     sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
15     sock.bind(('localhost',8000))
16     sock.listen(5)
17   
18     while True:
19         connection, address = sock.accept()
20         handle_request(connection)
21         connection.close()
22   
23 if __name__ == '__main__':
24     main()

 

二. Web框架的实现:

  1. 基于WSGI规范:

    WSGI(Web Server Gateway Interface)是一种规范, 其目标是在Web服务器和Web框架层之间提供一个通用的API标准,减少之间的互操作性并形成统一的调用方式。解决了现在众多框架,如:Django ,Flask, web.py等共用一个标准,Django应用比较广泛。

  2. 自定义socket,代表有Tornado.

   

Python标准库中提供了简单的参考服务器(wsgirefs): wsgiref.simple_server.WSGIServer.

 1 #!/usr/bin/env python
 2 #coding:utf-8
 3  
 4 from wsgiref.simple_server import make_server
 5  
 6 def RunServer(environ, start_response):
 7     start_response('200 OK', [('Content-Type', 'text/html')])
 8     return '<h1>Hello, web!</h1>'
 9  
10 if __name__ == '__main__':
11     httpd = make_server('', 8000, RunServer)
12     print "Serving HTTP on port 8000..."
13     httpd.serve_forever()

三. 自定义一个Web框架:

   1. 通过python标准库提供的wsgiref模块开发一个自己的Web框架

 1 #!/usr/bin/env python
 2 #coding:utf-8
 3 from wsgiref.simple_server import make_server
 4  
 5 def index():
 6     return 'index'
 7  
 8 def login():
 9     return 'login'
10  
11 def routers():
12      
13     urlpatterns = (
14         ('/index/',index),
15         ('/login/',login),
16     )
17      
18     return urlpatterns
19  
20 def RunServer(environ, start_response):
21     start_response('200 OK', [('Content-Type', 'text/html')])
22     url = environ['PATH_INFO']
23     urlpatterns = routers()
24     func = None
25     for item in urlpatterns:
26         if item[0] == url:
27             func = item[1]
28             break
29     if func:
30         return func()
31     else:
32         return '404 not found'
33      
34 if __name__ == '__main__':
35     httpd = make_server('', 8000, RunServer)
36     print "Serving HTTP on port 8000..."
37     httpd.serve_forever()

  2. 在上一步骤中,对于所有的login、index均返回给用户浏览器一个简单的字符串,在现实的Web请求中一般会返回一个复杂的符合HTML规则的字符串,所以我们一般将要返回给用户的HTML写在指定文件中,然后再返回。如:

 1 <!DOCTYPE html>
 2 <html>
 3 <head lang="en">
 4     <meta charset="UTF-8">
 5     <title></title>
 6 </head>
 7 <body>
 8     <h1>Index</h1>
 9 
10 </body>
11 </html>
12 
13 index.html
index
 1 <!DOCTYPE html>
 2 <html>
 3 <head lang="en">
 4     <meta charset="UTF-8">
 5     <title></title>
 6 </head>
 7 <body>
 8     <form>
 9         <input type="text" />
10         <input type="text" />
11         <input type="submit" />
12     </form>
13 </body>
14 </html>
15 
16 login.html
login
 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3  
 4 from wsgiref.simple_server import make_server
 5  
 6  
 7 def index():
 8     # return 'index'
 9     f = open('index.html')
10     data = f.read()
11     return data
12  
13  
14 def login():
15     # return 'login'
16     f = open('login.html')
17     data = f.read()
18     return data
19  
20  
21 def routers():
22  
23     urlpatterns = (
24         ('/index/', index),
25         ('/login/', login),
26     )
27  
28     return urlpatterns
29  
30  
31 def run_server(environ, start_response):
32     start_response('200 OK', [('Content-Type', 'text/html')])
33     url = environ['PATH_INFO']
34     urlpatterns = routers()
35     func = None
36     for item in urlpatterns:
37         if item[0] == url:
38             func = item[1]
39             break
40     if func:
41         return func()
42     else:
43         return '404 not found'
44  
45  
46 if __name__ == '__main__':
47     httpd = make_server('', 8000, run_server)
48     print "Serving HTTP on port 8000..."
49     httpd.serve_forever()

注: 实际生产环境中,网页很多,不可能创建多个def函数来实现,需要分类管理,这样就引出了MVC/MTV两种框架。

 

四. MVC/MTV框架:

   1. MVC框架:

     MVC是一种使用 MVC(Models Views Controllers 模型-视图-控制器)设计创建 Web 应用程序的模式: 
    • Models(模型)表示应用程序核心,操作数据库(比如数据库记录列表)。
    • Views(视图)显示数据,放置HTML模板(数据库记录)。
    • Controllers(控制器)处理用户请求(写入数据库记录)。
 
   2. MTV框架:
     MTV是一种使用MTV(Models Templates  Views 模型-模板-视图)设计创建Web应用程序的模式:
     
      Models: (模型)表示应用程序核心,操作数据库(比如数据库记录列表)。
      Templates: (模板)主要放置HTML模板(数据库记录)。
      Views: (视图)处理用户请求(写入数据库记录)。
 
注: Django为 MTV框架。
 
 
 
 
 
 
posted @ 2016-09-02 01:09  浮光掠影转瞬间  阅读(356)  评论(0编辑  收藏  举报