Web框架

Web框架本质

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

 1 #!/usr/bin/env python
 2 #coding:utf-8
 3
 4 import socket
 5
 6 def handle_request(client):
 7     buf = client.recv(1024)
 8     client.send("HTTP/1.1 200 OK\r\n\r\n")
 9     client.send("Hello, Seven")
10
11 def main():
12     sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
13     sock.bind((‘localhost‘,8000))
14     sock.listen(5)
15
16     while True:
17         connection, address = sock.accept()
18         handle_request(connection)
19         connection.close()
20
21 if __name__ == ‘__main__‘:
22     main()

上述通过socket来实现了其本质,而对于真实开发中的python web程序来说,一般会分为两部分:服务器程序和应用程序。服务器程序负责对socket服务器进行封装,并在请求到来时,对请求的各种数据进行整理。应用程序则负责具体的逻辑处理。为了方便应用程序的开发,就出现了众多的Web框架,例如:Django、Flask、web.py 等。

web框架分为两种:

1.通过自己写socket,自己处理请求. 如:tornado(1.自己处理 2.用wsgi处理)

2.通过WSGI,在其基础上来处理请求,编写框架。如:django.

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

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

WSGI主要是做了三件事:

1、接收http请求

2、预处理http请求

3、将预处理请求的结果交给函数去处理。

 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()

其中environ里包含了所有的请求有关的信息:

通过WSGI自定义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()
时间: 2025-01-04 05:17:54

Web框架的相关文章

python/web框架

web框架 Web框架本质 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 #!/usr/bin/env python #coding:utf-8    import socket    def handle_request(client):     buf = client.recv(1024)     clien

Tornado Web 框架

一.简介 Tornado 是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本.这个 Web 框架看起来有些像web.py 或者 Google 的 webapp,不过为了能有效利用非阻塞式服务器环境,这个 Web 框架还包含了一些相关有用工具及优化. Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快.得利于其非阻塞的方式和对 epoll 的运用,Tornado 每秒可以处理数以

web框架--bottle

安装 bottle框架只由一个 .py 文件,除了Python的标准库外,其不依赖任何其他模块 1 2 3 4 pip install bottle easy_install bottle apt-get install python-bottle wget http://bottlepy.org/bottle.py bottle介绍 Bottle是一个快速.简洁.轻量级的基于WSIG的微型Web框架 Bottle框架大致可以分为以下部分: 路由系统,将不同请求交由指定函数处理 模板系统,将模板

自己动手写web框架----2

在上一节,我们自己写的web框架,只能运行显示一个HelloWorld.现在我们对其进行一次加工,让他至少能运行一个登陆程序. 首先看login.jsp <%@ page contentType="text/html; charset=UTF-8" language="java" import="java.sql.*" errorPage="" %> <%@ page import=" java.u

Web框架的引入

为什么会有web框架 有了上一篇内容,静态.动态web服务器的实现,已经掌握了客户端请求到服务器处理的机制.在动态资源处理中,根据请求 .py 导入模块应用,然后调用应用入口程序实现动态处理.但是在真实的项目中,肯定有很多应用(.py文件),按照这种处理机制(每个应用中都要写一个入口,设置状态码.headers)不符合架构设计原则,这一部分肯定是可以复用的,所用应用应该公用一个入口,这就引入一个概念web框架. 设计思路 把每个应用中入口 application(env,start_respon

Web 框架

一. 简单web框架 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> body{ margin: 0; } .pg-header{ height: 48px; min-width: 1190px; background-color: #204d74;

Python之Web框架介绍

所有的语言Web框架本质其实就是起一个socket服务端,监听一个端口,然后运行起来 Web框架包含两部分,一部分是socket,另外一部分是业务的逻辑处理,根据请求的不同做不同的处理 Python的Web框架分成了两类, 即包含socket也包含业务逻辑处理的(tornado) 不包含socket(框架本身通过第三方模块实现socket)只包含业务逻辑处理(django,Flask) WSGI的全称是Web Server Gateway Interface,翻译过来就是Web服务器网关接口.具

web框架之Tornado

Tornado 是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本. 这个 Web 框架看起来有些像web.py 或者 Google 的 webapp,不过为了能有效利用非阻塞式服务器环境,这个 Web 框架还包含了一些相关的有用工具 和优化. Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快. 得利于其 非阻塞的方式和对 epoll 的运用,Tornado 每秒可以处理数以

【Python之路】第十五篇--Web框架

Web框架本质 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. #!/usr/bin/env python #coding:utf-8 import socket def handle_request(client): buf = client.recv(1024) client.send("HTTP/1.1 200 OK\r\n\r\n") client.send("Hello, Seven")

Python开发【第二十二篇】:Web框架之Django【进阶】

Python开发[第二十二篇]:Web框架之Django[进阶] 猛击这里:http://www.cnblogs.com/wupeiqi/articles/5246483.html 博客园 首页 新随笔 联系 订阅 管理 随笔-124  文章-127  评论-205 Python之路[第十七篇]:Django[进阶篇 ] Model 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据库,并编写数据访问层代码 业务逻