博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python之Web框架
阅读量:4455 次
发布时间:2019-06-07

本文共 4136 字,大约阅读时间需要 13 分钟。

 

  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 '

Hello, web!

' 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 urlpatterns19  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 = None25     for item in urlpatterns:26         if item[0] == url:27             func = item[1]28             break29     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  2  3  4     
5 6 7 8

Index

9 10 11 12 13 index.html
index
1  2  3  4     
5 6 7 8
9
10
11
12
13 14 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 data12  13  14 def login():15     # return 'login'16     f = open('login.html')17     data = f.read()18     return data19  20  21 def routers():22  23     urlpatterns = (24         ('/index/', index),25         ('/login/', login),26     )27  28     return urlpatterns29  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 = None36     for item in urlpatterns:37         if item[0] == url:38             func = item[1]39             break40     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框架。
 
 
 
 
 
 

转载于:https://www.cnblogs.com/python-nameless/p/5831983.html

你可能感兴趣的文章
SignalR主动通知订阅者示例
查看>>
golang的表格驱动测试
查看>>
用python实现矩阵转置
查看>>
linux 小技巧(磁盘空间搜索)
查看>>
iOS开发——捕获崩溃信息
查看>>
(for 循环)编程找出四位整数 abcd 中满足 (ab+cd)(ab+cd)=abcd 的数
查看>>
js 基础
查看>>
tomcat使用spring-loaded实现应用热部署
查看>>
boost1.53中的lock-free
查看>>
链表_leetcode203
查看>>
hdu4746:2013杭州网络赛I 莫比乌斯反演
查看>>
ubuntu linux下火狐跨版本升级方法详解(也同样适合linux下安装火狐中国版)
查看>>
基于ajax 的 几个例子 session ,ajax 实现登录,验证码 ,实现ajax表单展示
查看>>
OSX: 10.9的SMB网络共享连接可能破坏其权限设置
查看>>
连接不上sql server服务器的解决方案
查看>>
记录安装oracle的那些事(二)之双系统安装
查看>>
c3po数据库连接池中取出连接
查看>>
bootstrap-table 分页
查看>>
使用本机IP调试web项目
查看>>
【Java面试题】58 char型变量中能不能存贮一个中文汉字?为什么?
查看>>