wsgi(Python Web Server Gateway Interface)服务器网关接口,是Python语言定义的web服务器和web服务程序或者框架之间的一种简单而通用的接口。
谈到wsgi,就不得不提到cgi(Common Gateway Interface/CGI)通用网关接口,因为没有经过那个用cgi写网络程序的年代,只能从当前的一些模块猜测一下当时的情形,有空再去了解了解。
首先从通信的角度来看看网络web程序的流程。
http服务器是一个在一个端口监听请求的程序。暂时不考虑现有web服务器的复杂性,假如是自己需要写这么一个程序,首先得写上一个通信服务器程序,在指定端口(通常是80)端口监听请求,由于是web程序,所以客户端通常还是使用浏览器来完成,于是乎,最简单的通信程序是通过浏览器向指定ip和端口发送请求。
在上面的简单的实例中,我们每次发送请求,如果不进行数据处理,每个端口只能负责一件事情,如果需要完成更多的功能,就需要诉web服务器根据我们的“要求”做不同的服务,怎么办呢?首先得告诉web服务器要做什么,同时需要给他传递相应需要的参数。告诉web服务器做什么,常用方法就是url地址,当然用查询字符串也可以,不过建议用url地址来区分。至于服务需要的参数信息可以通过查询字符串或者form传递(如果不是web服务器,而是自己的通信程序,怎么定义都行,只要你能解析就行,当然采用通用的格式最好,这里因为客户端就是浏览器,需要遵循http协议)。服务器端该怎么办呢,当然根据不同url选择不同的服务不同的处理。从面向过程来看,基本每种请求差不多一个处理函数,然后使用传说中的swich(字典映射也行,其实正则判断也不错,而且现在流行的mvc的框架的url处理模块基本都是类似的处理方法),即需要服务器具备通常的分发功能,即根据不同的url传递相应的参数调用不同的服务,然后返回处理结果。
经过上面的处理,我们的服务器可以具备简单的逻辑处理,比如处理一些查询任务等等。但是和我们通常理解的web服务器有点不同,谈论web服务器基本都是谈论并发、吞吐量、安全、稳定等通信问题,很少有人把web服务器和数据业务混在一起。而且从我们经常使用的web服务器来看,貌似基本都是c和c++这中底层语言写的服务器居多(apache,iis,nginx,lighttp),当然tomcat和jetty这种用java的。从专一的角度看,通信处理关心的主要是通信过程。通信服务器基本不关心里面传输的是什么数据,而是关心数据的安全和完整性,同时保证吞吐量、并发等问题。谈到这,基本也可以判断处理具体数据的业务是独立与服务器。事实也是如此。
数据业务的处理,简单的可以利用文件系统来完成,如果想偷懒,仅仅根据服务器的请求地址转换成相对文件地址,然后读取返回回去即可,其实简单的静态页面就可以这么做。不过貌似没人愿意经常去改web服务器,同时web服务器也不希望被修改。所以web服务器基本提供扩展。他指定一个调用方式,指定接口参数,然后让开发数据业务系统的人把自己的扩展放进去(其实很多成熟的第三方,毕竟这个东西是可以公用),web服务器调用自定义的扩展即可(不好意思对于linux和win32里面c的跨程序调用不是很熟),对于其他的c#、java自动装载还是很容易的。这里知道有这个就行。不过对于java的web服务器没仔细研究过,不过从功能拉开,他可能还包括实现了java的servelet标准,而对于apache、iis、nginx等,他们基本不关注具体的业务数据,所以可以简单理解,能从他们那里得到的基本是原生态的http请求(当然是格式化为http)。所以如果自己写扩展,web服务器指定的回调或者其他格式处理方式必定会有几个包括http请求基本参数的参数。暂且就当这种接口就是一组函数定义及其相应的数据结构,实际也差不多。扩展接口实现里面可以访问到请求地址等http一系列参数,我们可以根据这些参数来处理实际的业务。
但是随着最近几年,各种语言相继出现,而服务器基本还是c/c++的市场,如果是c/c++扩展,问题倒不是太大,但是为使用一种web服务器来修改自己的业务处理系统,这种耦合性似乎太过,这种问题在其他的语言更甚。同时现在处理数据业务的系统很少用c/c++来处理了,或者至少页面处理这块,基本很少见c/c++。所以怎样保证现在成熟的web服务器可以应用在这些相对比较新的语言或者框架上面,或者说可以让新的语言或者框架可以使用这些成熟稳定的web服务器,这是个很重要的事情。最简单的方式即是适配,即每种语言都定义一套自己web开发的交互规范。这种规范仅仅限于语言自己的特征和开发习惯,他在某种程度上可以认为和web服务器无关(当然还是得遵循基本的http和web开发的习惯)。如果需要使用某种服务器,仅仅需要开发一个介于语言或者框架与web服务器之间适配程序或者中间件。这样,无论语言或者框架和web服务器怎么发送变化,他们都可以独立的发展,仅仅可能需要修改他们之间的适配器中间件。自己觉得wsgi就是python自己定义的一套python语言web开发的标准,如果需要在apache、iis或者nginx等服务器上使用,需要相应的适配中间件。当然可以自己开发一个简单的中间件,只要满足wsgi的标准即可。下节可以简单的看看wsgi的简单应用。
引用
- 大小: 5.3 KB
- 大小: 15.9 KB
- 大小: 31.9 KB
- 大小: 48.4 KB
分享到:
相关推荐
本笔记将深入探讨Django的基础概念、核心功能以及实际应用。 1. **Django简介**: Django是由两位美国开发者在2005年创建的开源项目,它遵循MVC(模型-视图-控制器)设计模式,但更倾向于MTV(模型-模板-视图)...
### Django框架学习笔记 #### 软件框架概述 软件框架是软件开发中的一种结构化设计,它提供了一种组织代码、数据和其他资源的方式,使得开发者可以更容易地构建应用程序。框架通常包含了一些预设的解决方案,这些...
**Python学习笔记-WSGI接口** 在Python web开发中,WSGI(Web Server Gateway Interface)是一种标准接口,用于web服务器与web应用之间的通信。这个接口定义了一种规范,使得不同的服务器和应用程序可以协同工作,...
【标题】:“django框架学习笔记” 【描述】:“django学习” 在Python的世界里,Django是一个强大且受欢迎的Web框架,它遵循模型-视图-控制器(MVC)设计模式,用于快速开发高效且可维护的网站。Django强调代码...
Django学习笔记 本文档是 Django 学习笔记,基于 b 站千锋教育的视频课程,涵盖了 Django 的基础知识和应用实践。 知识点一:Django 项目结构 * 项目结构:manage.py、__init__.py、settings.py、urls.py、wsgi....
### Python Django框架学习笔记 #### 一、Django框架简介及环境搭建 **1.1 Django框架概述** Django是一个用Python编写的开源Web框架,它遵循MVC(Model-View-Controller)设计模式,旨在简化网站开发过程,提供...
Django学习笔记--阉割版 Django是Python下的一个免费开源的Web应用框架,使用它可以快速构建可维护、可扩展、灵活的网站。下面是 Django 学习笔记的总结,涵盖了 Django 的安装、项目结构、应用程序、视图、模型、...
【描述】:这个项目是一个学习笔记网站,使用了Python的Web框架Django以及前端UI框架Bootstrap3进行开发。Django以其MVT(Model-View-Template)架构模式,提供了强大的后端功能,而Bootstrap3则为网站提供了响应式...
**Django 学习笔记** 在深入探讨Django这一强大的Python Web框架之前,我们首先要理解其基本概念。Django是一个开放源代码的Web框架,它遵循模型-视图-控制器(MVC)架构模式,但Django将其称为模型-视图-模板(MVT...
这个“python基于django的学习笔记系统源码.zip”文件包含了一个使用Django框架构建的学习笔记系统的源代码。通过分析这个项目,我们可以深入理解Django的工作机制和开发流程。 1. **项目结构**:Django项目通常...
Python1903笔记系列是针对初学者和进阶者的一系列教程,专注于Python编程语言的应用,特别是针对Django框架的深入学习。Django是一个基于Python的免费且开源的Web应用框架,它遵循模型-视图-控制器(MVC)架构模式。...
本项目包含一系列围绕Django点餐系统的课件、源代码和课堂笔记,旨在帮助学习者深入理解Django框架以及如何应用于实际项目开发。 1. **Django框架基础** Django遵循MTV(Model-Template-View)设计模式,其中: -...
【Python编程从入门到实践项目】是初学者到进阶者的一个重要阶段,这个学习笔记“learning_log”聚焦于Python的Web应用程序开发,特别提到了使用Django框架进行实践。Django是Python中最受欢迎的Web框架之一,它以其...
根据压缩包子文件的文件名称“资料”,我们可以推测压缩包内可能包含一系列文档、笔记、代码示例或者视频教程,这些资料将帮助用户深入理解Django的工作原理和最佳实践。 以下是一些可能包含在“django-python.7z”...
Django入门笔记主要涵盖以下几个关键知识点: 1. **创建项目**:Django是Python的一款Web框架,用于快速开发高效、可维护的网站。创建项目是使用Django的第一步,通过命令行工具`django-admin startproject project...
Python1903笔记系列是针对初学者和进阶者的一套教程,专注于Django框架的学习。Django是一个高级的Python Web框架,它鼓励快速开发和实用主义设计,遵循“干(Don't Repeat Yourself)”的原则。这个压缩包"08-...
**Django 框架简介** Django 是一个高级的 Python Web 开发框架,它遵循“干(DRY)”原则,旨在使开发者能够快速、高效地构建高...对于初学者来说,这是一个很好的学习资源,可以帮助他们快速掌握 Django 的核心概念。
Django框架是Python web开发领域中的一个重要工具,它以其高效、可扩展和“ batteries included ”...在提供的压缩包资料中,包含了思维导图、教学资料、源代码和学习笔记,这些都为理解和掌握Django提供了宝贵的资源。
在本项目"基于Django实现云笔记项目.zip"中,我们探索了如何使用Python的Django框架构建一个云笔记应用程序。这个项目可以帮助开发者学习Django的基本概念,以及如何将其应用于实际项目开发。以下是对该项目涉及的...