首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何像django一样制作基于Python的web框架?

如何像django一样制作基于Python的web框架?
EN

Stack Overflow用户
提问于 2011-09-11 21:11:36
回答 4查看 12.4K关注 0票数 14

我只是想知道做一个像django这样的web框架需要什么知识或技术。

因此,webframework能够作为云计算(一个网站可以通过发送一些必须解决的东西到其他服务器来水平扩展)。当需要时,如果开发人员想要构建一个简单的网站,可以使用它来快速构建一个网站,比如django。

抱歉的。我的英语很笨拙,因为我是韩国人。

只要给我一些方法或说明,关于需要什么技术来构建一个web框架,或者我必须做什么或学习什么。

非常感谢。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-09-11 22:25:02

你在这里问了几个问题:

如何创建像Django这样的Web框架

首先,看看这篇文章,How to use Python on the Web。它为框架中的各个部分提供了非常好的想法。

接下来,你需要问自己,你有多想创造自己。

从头开始

如果您将此作为学习框架细节的练习,那么您应该阅读WSGI。WSGI是Django (和大多数其他python框架)用来与实际处理请求的web服务器(如Apache、nginx和lighthttpd)交互的API。它不一定是一个库(尽管有一些库可以帮助创建WSGI应用程序),但它更像是一个标准API,在使用时,它可以保证您的代码可以与其他服务器协同工作。

它看起来是这样的:

代码语言:javascript
复制
def application(environ, start_response):
    # your implementation here

就这样。environ是一个包含所有CGI环境变量的字典。start_response是一个回调函数,您可以使用响应头和状态码来调用它。最后,函数需要返回一个迭代器,它是响应体。你可以在WSGI site上找到更多关于这方面的信息。

使用"Wrapper“库

如果您不想处理WSGI的细节(它确实有一些陷阱,可能会引起一些令人头疼的问题),有几个不同的库可以将WSGI界面包装成稍微更用户友好的东西。例如,而不是让repsponse报头是一个字符串元组列表:

代码语言:javascript
复制
response_headers = [('Content-Type', 'text/plain'),
  ('Content-Length', str(len(response_body)))]

...they可能允许您拥有一个响应对象,该对象可以通过字典设置报头...

代码语言:javascript
复制
response.headers['Content-Type'] = 'text/plain'
response.headers['Content-Length'] = len(response_body))

Django有它自己的request and response API,但也有其他的可以查看。在我脑海中,werkzeugWebOb

使用现有框架(推荐)

然而,如果你的目标真的只是创建一个网站,并且认为Django不能做你想做的事情(可能不是这样的,但我离题了),那么你根本就不想做你自己的框架。有很多比Django更轻量级的,允许你更自由地挑选和选择你自己的库来使用(“模块化”)。这意味着他们的设计理念是,你可以将他们用于任何目的,而不是像Django这样的框架,后者试图引导你使用他们所有的工具。了解FlaskBottleCherryPy等框架。

认识到所有这些框架、库和API只是达到目的的手段。你想做的任何事情都可以在它们中的任何一个中完成,所以问题只是找到一个能给你提供正确的内置工具组合的工具,这些工具可以完成你不需要实现的所有低级代码,而不会增加很多阻碍你的高级东西。

允许Web框架在云中提供服务,以便可以水平扩展

这真的不是web框架本身的要求。即使以典型的方式使用Django (使用它们的对象关系管理和SQL数据库)也可以水平扩展到很好的程度(参见Deployment chapter of the Django Book中的" scaling“部分,了解如何实现这一点的概述;在那里表达的想法实际上可以用于大多数水平扩展web应用程序)。合理的水平可伸缩性将通过以允许其水平扩展的方式实际编写应用程序来实现。这通常意味着以一种假设它可能处理不同物理服务器上的请求的方式编写服务器代码。因此,例如,如果您将cookie数据存储在web服务器上的平面文件中,您可能会遇到问题,因为下一个请求可能会转到另一个服务器,因此将找不到该cookie数据。这些数据需要存储在所有服务器都可以访问的数据库中。

所以,希望这足以让你知道,为了创建一个可伸缩的框架,你真的只需要了解可伸缩性,并以一种不会影响网站可伸缩性的决策的方式来构建或使用你想要的框架。然后,由框架的用户对其进行扩展。

你可以走一个不同的方向,让框架强迫用户使用它自己的API来做任何事情,并以一种你知道在某些情况下会扩展的方式来编写API。然后,让用户在这种情况下设置站点。这类似于Google App Engine的工作方式。虽然这是一个巧妙的想法,但它确实限制了用户使用谷歌允许的内容。

票数 44
EN

Stack Overflow用户

发布于 2011-09-11 21:40:04

现代的Python web框架应该实现WSGI。您可以阅读它背后的基本原理和来自PEP 333的一些很好的示例。

这是一个another tutorial,它经历了创建一个a的整个过程。

票数 4
EN

Stack Overflow用户

发布于 2011-09-11 21:24:59

web应用程序框架应该处理http requests并提供实用程序,例如,以简化响应计算。

你也应该看看其他的Python web框架,比如bottle (一个微框架)和Web2py (基于MVC架构模式)。Bottle API是指导性的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7378398

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档