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

相关文章:

  • 2021-12-11
  • 2022-12-23
  • 2021-10-29
  • 2021-10-29
  • 2022-12-23
  • 2022-12-23
  • 2021-11-22
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-01-01
  • 2021-09-08
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案