如何制作基于Python的web框架,如django?

And*_*son 9 python django

我只是想知道制作像django这样的web框架需要哪些知识或技术.

所以webframework能够作为一个云计算(一个网站可以通过发送一些必须解决的东西水平扩展到其他服务器).如果需要,可以用来像django一样快速建立一个网站,如果开发人员想要的话建立一个简单的网站.

抱歉.因为我是韩国人,我的英语非常尴尬.

只是给我一些方法或说明,了解构建Web框架或我必须做或学习的内容所需的技术.

非常感谢.

Mar*_*eth 37

你在这里问几个问题:

如何制作像Django这样的Web框架

首先,查看本文,如何在Web上使用Python.它为进入框架的各个部分提供了非常好的想法.

接下来,您需要问自己自己想要创造多少.

从头开始

如果你这样做是为了学习框架的细节,你应该阅读WSGI.WSGI是Django(和大多数其他python框架)用来与实际处理请求的Web服务器(如Apache,nginx和lighthttpd)进行交互的API.它不一定是库(虽然有些库可以帮助创建WSGI应用程序),但更多的标准API在使用时承诺您的代码可以与其他服务器一起使用.

它看起来像这样:

def application(environ, start_response):
    # your implementation here
Run Code Online (Sandbox Code Playgroud)

而已.environ是包含所有CGI环境变量的字典.start_response是一个回调函数,您可以使用响应标头和状态代码调用它.最后,函数应该返回一个迭代器,它是响应体.您可以在WSGI网站上找到更多相关信息.

使用"包装"库

如果你不想处理WSGI的细节(它确实有一些可能导致一些令人头疼的陷阱),那么有一些不同的库可以将WSGI接口包装成更加用户友好的东西.例如,不是让repsponse标题成为字符串元组的列表:

response_headers = [('Content-Type', 'text/plain'),
  ('Content-Length', str(len(response_body)))]
Run Code Online (Sandbox Code Playgroud)

...他们可能允许你有一个响应对象,可以通过字典设置标题...

response.headers['Content-Type'] = 'text/plain'
response.headers['Content-Length'] = len(response_body))
Run Code Online (Sandbox Code Playgroud)

Django拥有自己的请求和响应API,但还有其他人可以查看.在我的头顶,werkzeugWebOb.

使用现有框架(推荐)

但是,如果你的目标只是创建一个网站,并认为Django不能做你想要的(可能不是这样,但我离题),那么你不想自己做框架.有很多比Django更轻量级,并允许您更自由地选择自己的库来工作("模块化").这意味着它们的设计理念是您可能出于任何目的使用它们,而不是像Django这样的框架,它试图引导您使用所有工具.查看Flask,BottleCherryPy等框架.

意识到所有这些框架,库和API都只是达到目的的手段.您想要做的任何事情都可以在其中任何一个中完成,所以只需找到一个能够为您提供正确组合的内置工具的工具,这些工具可以执行您不必执行的所有低级代码在不妨碍你的方式增加高级别的东西.

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

这实际上不是Web框架本身的要求.即使以典型的方式使用Django(使用他们的ORM和SQL数据库)也可以在很大程度上水平扩展(请参阅Django BookDeployment部分中的"Scaling"部分,了解如何完成此操作;表示实际上可以用于大多数水平扩展Web应用程序).通过以允许其水平扩展的方式实际编写应用程序,可以实现合理的水平可伸缩性.这通常意味着以假定它可能处理不同物理服务器上的请求的方式编写服务器代码.因此,例如,如果将cookie数据存储在Web服务器上的平面文件中,则可能会出现问题,因为下一个请求可能会转到另一个服务器,因此无法找到该cookie数据.该数据需要存储在所有服务器都可以访问它的数据库中.

所以,希望这足以让你知道,为了创建一个可扩展的框架,你真的只需要理解扩展,并以不会做出任何会影响你的网站能力的决策的方式构建或使用你想要的框架扩大规模.然后,由框架的用户来扩展它.

您可以采用不同的方向,并使框架强制用户使用它自己的API来处理所有事情,并以您知道在某些情况下可扩展的方式编写API.然后,让用户在该特定情况下设置站点.这与Google App Engine的工作方式类似.虽然这是一个巧妙的想法,但这确实限制了用户使用Google允许的内容.

  • 只要继续做东西,你就会继续学习东西:) (2认同)