odoo缺点,odoo教程

  odoo缺点,odoo教程

  转载自https://blog.csdn.net/kami DOX/文章/详情/39756299

  blog.csdn.net/perfect悲伤街3359号/文章/详情/80237066

  基础知识:

  Werkzeug简介Werkzeug官网的描述是什么?

  werkzeugisawsgiutitylibraryforpython .它是经过许可的。泽尔克泽格

  还有什么是WSGI?WGI的全称是web服务器网关接口,是一个用来定义Web服务器接口的规范。简单来说,就是定义http服务应该如何成长,可以处理哪些事情。PEP333是本规范的详细说明。

  Werkzeug是一个使用python实现WSGI的通用库。这是Flask使用的基本WSGI库。

  Werkzeug的源代码托管在GitHub上,目前开发非常活跃。

  用于实现请求和响应对象的基于JavaScript脚本语言的交互式浏览器调试器,100%兼容WSGI 1.0规范,很容易分析Werkzeug中包含的内容。HTTP头2.7和3.3Unicode支持HTTP会话和签名Cookie,以及URI和IRI处理功能。Unicode支持内置的非标准WSGI服务器和浏览器的兼容性。Werkzeug的创造者是高产程序员阿明罗纳彻。从Werkzeug到Flask,再到Jinja2,几乎所有人都是圆的。那个博客也经常分享有价值的文章,对Python编程感兴趣的人可以看看。

  我看过Werkzeug和Flask对源代码的评论:

  mostpythoniccodeandwriteforhumanbeing

  Werkzeug详细信息

  首先介绍一下werkzeug是什么。Werkzeug是Web框架的基本WSGI工具包。这里稍微解释一下,werkzeug既不是web服务器,也不是web框架,而是一个工具包。根据官方介绍,它是一个WSGI工具包,可以作为web框架的基础库。因为它封装了很多web框架比如请求和响应。

  比如我最常用的Flask框架就是基于Werkzeug开发的。因此,分析Werkzeug的基础。因为我想知道Flask的实现逻辑和基本控制。虽然Flask在本文中没有涉及,但是我们已经使用Werkzeug创建了一个简单的web APP演示,并以这个web APP演示为例分析了请求处理和响应生成的过程。

  让我们从一个简单的例子开始。我们先来看看werkzeug的用法,再来探究werkzeug的实现原理。

  安装werkzeug,希望读者在virtualenv环境下跟随我的脚步。如果你还不知道什么是virtualenv,请在我的博客上搜索virtualenv,并在继续之前修复它。因为数据库冲突等问题,很有可能看不到本文介绍的内容。

  好,那就开始安装werkzeug。

  一个

  pip安装Werkzeug

  如果这个命令继续,几秒钟后就可以使用werkzeug了。

  在一个简单的web服务器之后,我们开始使用werkzeug创建一个简单的web服务器。这个服务器只返回‘Hello Werkzeug’,没有别的。

  一个

  2

  三

  四

  五

  六

  七

  八

  九

  10

  11

  12

  13

  14

  15

  16

  17

  18

  19

  20

  21

  22

  23

  24

  25

  26

  27

  28

  29

  30

  31

  #!/usr/wldcjl/env python

  #编码:utf-8

  导入操作系统

  fromwerkzeug . servingimportrun _ simple

  fromwerkzeug . wrappersimportrequest,Response

  fromwerkzeug . wsgiimportshareddatamiddleware

  p

  不久类(对象):

  def dispatch_request(自身,请求):

  返回响应(“你好,Werkzeug!”)

  def wsgi_app(self,environ,start_response):

  请求=请求(环境)

  response=self.dispatch_request(请求)

  返回响应(environ,start_response)

  def __call__(self,environ,start_response):

  return self.wsgi_app(environ,start_response)

  def create_app(with_static=True):

  app=Shortly()

  if with_static:

  app . wsgi _ app=SharedDataMiddleware(app . wsgi _ app,{

  /static :OS . path . join(OS . path . dirname(_ _ file _ _), static )

  })

  返回应用程序

  if __name__==__main__ :

  app=create_app()

  run_simple(127.0.0.1 ,6666,app,use_debugger=True,use_reloader=True)

  这段代码实现了我说的功能,那么我们来看看这段代码是如何工作的。

  首先,一切都要回到最初。从main开始可以发现main非常简单,只有一个初始化函数,然后调用werkzeug的run_simple函数。好的,我们可以发现这个应用实际上是一个Shortly对象。这个类只实现了三个方法,一个是dispatch _ request,WSIG _ app,call。就这么简单。然后我们知道关键代码不是这些,应该是run_simple。

  Run_simple Parses好了,我们博客系列的目的是解析werkzeug源代码,所以获取werkzeug源代码肯定是我们要做的事情。所以第一步,我们需要克隆werkzeug克隆github:

  一个

  git克隆https://github.com/mitsuhiko/werkzeug.git

  然后,我们来寻找run_simple的代码。

  一个

  vim werkzeug/serving.py

  转到559行

  我们可以看到这个函数的定义。秉承关注重点的原则,我们会忽略条件判断,用最简单的方式看代码。假设是这样的:

  一个

  2

  三

  use _调试器=False

  静态文件=假

  use_reloader=False

  好了,那么这里,其实run_simple调用的是内部,那么我们来看看内部代码:

  一个

  2

  三

  四

  五

  六

  七

  八

  九

  10

  11

  646:尝试:

  647:FD=int(OS . environ[ WERKZEUG _ SERVER _ FD ])

  648: except (LookupError,ValueError):

  649: fd=无

  650: srv=make_server(主机名,端口,应用程序,线程,

  651:进程,请求处理程序,

  652:直通错误,ssl上下文,

  653: fd=fd)

  654:如果fd为无:

  655: log_startup(srv .套接字)

  656: srv.serve_forever()

  忽略fd,那么还剩下一点点:

  一个

  2

  三

  四

  五

  六

  650: srv=make_server(主机名,端口,应用程序,线程,

  651:进程,请求处理程序,

  652:直通错误,ssl上下文,

  653: fd=fd)

  656: srv.serve_forever()

  好了,你应该和我一样有兴趣知道这个make_server里面有什么,我也很期待,那就跟进看看吧。

  make_server的代码我就不贴了。还是最简单的原理,忽略各种条件,所以假设如下:

  一个

  2

  线程=假

  流程=1

  然后代码也很简单,留下:

  一个

  2

  546:返回BaseWSGIServer(主机,端口,app,request_handler,

  547:直通错误,ssl上下文,fd=fd)

  很好,这个很难追查,最后关键是这个BaseWSGIServer。我们来看看这个类实现了哪些功能。

  先看看这个类的定义:

  一个

  443:class BaseWSGIServer(http server,object):

  这个类继承自HTTPServer,所以我们在底部。这就差不多结束了,我们已经见过Python的API了。好了,既然是继承自HTTPServer,那就当是HTTPServer吧,然后继续看run_simple的代码。我们一路跟踪,发现656行中有一个srv.serve_forever(),那么这不就是HTTPServer的用法吗?server.serve_forever().

  好了,到此为止,事情已经告一段落,虽然很多事情还不清楚,比如请求是如何封装的,响应在哪里处理,如何工作,比如URL路由。不过我们对Werkzeug已经有了一个大概的印象,知道他的下层是用HTTPServer实现的,没有太多特别的自定义协议。下一章,我们将逐步进行更深入的解密。敬请关注。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: