zoukankan      html  css  js  c++  java
  • 循序渐进Python3(十二) --0--  web之框架

    web框架的本质

    众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端。
    1. #!/usr/bin/env python
    2. #coding:utf-8
    3. import socket
    4. def handle_request(client):
    5. buf = client.recv(1024)
    6. client.send("HTTP/1.1 200 OK ")
    7. client.send("Hello, Seven")
    8. def main():
    9. sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    10. sock.bind(('localhost',8000))
    11. sock.listen(5)
    12. while True:
    13. connection, address = sock.accept()
    14. handle_request(connection)
    15. connection.close()
    16. if __name__ == '__main__':
    17. main()

    上述通过socket来实现了其本质,而对于真实开发中的python web程序来说,一般会分为两部分:服务器程序和应用程序。服务器程序负责对socket服务器进行封装,并在请求到来时,对请求的各种数据进行整理。应用程序则负责具体的逻辑处理。为了方便应用程序的开发,就出现了众多的Web框架,例如:Django、Flask、web.py 等。不同的框架有不同的开发方式,但是无论如何,开发出的应用程序都要和服务器程序配合,才能为用户提供服务。这样,服务器程序就需要为不同的框架提供不同的支持。这样混乱的局面无论对于服务器还是框架,都是不好的。对服务器来说,需要支持各种不同框架,对框架来说,只有支持它的服务器才能被开发出的应用使用。这时候,标准化就变得尤为重要。我们可以设立一个标准,只要服务器程序支持这个标准,框架也支持这个标准,那么他们就可以配合使用。一旦标准确定,双方各自实现。这样,服务器可以支持更多支持标准的框架,框架也可以使用更多支持标准的服务器。

    WSGI(Web Server Gateway Interface)是一种规范,它定义了使用python编写的web app与web server之间接口格式,实现web app与web server间的解耦。

    python标准库提供的独立WSGI服务器称为wsgiref。

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

    自定义web框架

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

    1. #!/usr/bin/env python
    2. #coding:utf-8
    3. from wsgiref.simple_server import make_server
    4. def index():
    5. return 'index'
    6. def login():
    7. return 'login'
    8. def routers():
    9. urlpatterns = (
    10. ('/index/',index),
    11. ('/login/',login),
    12. )
    13. return urlpatterns
    14. def RunServer(environ, start_response):
    15. start_response('200 OK', [('Content-Type', 'text/html')])
    16. url = environ['PATH_INFO']
    17. urlpatterns = routers()
    18. func = None
    19. for item in urlpatterns:
    20. if item[0] == url:
    21. func = item[1]
    22. break
    23. if func:
    24. return func()
    25. else:
    26. return '404 not found'
    27. if __name__ == '__main__':
    28. httpd = make_server('', 8000, RunServer)
    29. print "Serving HTTP on port 8000..."
    30. httpd.serve_forever()
     
           python中的WEB框架分为:即写Socket又写(处理请求)的WEB框架比如Tornado,
    还有就是不写Socket然后自己写处理请求的WEB框架:Django
  • 相关阅读:
    Android OpenGL ES 2.0 (四) 灯光perfragment lighting
    Android OpenGL ES 2.0 (五) 添加材质
    冒泡排序函数
    javascript object 转换为 json格式 toJSONString
    Liunx CentOS 下载地址
    jquery 图片切换特效 鼠标点击左右按钮焦点图切换滚动
    javascript 解析csv 的function
    mysql Innodb Shutdown completed; log sequence number解决办法
    Centos 添加 yum
    javascript 键值转换
  • 原文地址:https://www.cnblogs.com/wumingxiaoyao/p/6141976.html
Copyright © 2011-2022 走看看