Python 从django向自身发送请求

Python 从django向自身发送请求,python,django,Python,Django,我有一个Django项目,其中包含第二个第三方Django应用程序。在我的一个视图中,我需要从另一个应用程序(在同一个Django项目中)查询一个视图 目前,它的工作原理如下: 导入请求 定义我的视图(请求): data=requests.get('http://localhost/foo/bar').json() #损坏数据 返回一些响应 有没有一种干净的方法可以发送请求,而不必完全通过DNS和Web服务器,直接转到其他应用程序的视图(当然最好也通过中间件)Django view函数接受请求

我有一个Django项目,其中包含第二个第三方Django应用程序。在我的一个视图中,我需要从另一个应用程序(在同一个Django项目中)查询一个视图

目前,它的工作原理如下:

导入请求
定义我的视图(请求):
data=requests.get('http://localhost/foo/bar').json()
#损坏数据
返回一些响应

有没有一种干净的方法可以发送请求,而不必完全通过DNS和Web服务器,直接转到其他应用程序的视图(当然最好也通过中间件)

Django view函数接受请求并返回响应对象。视图没有理由不能通过构造请求(或克隆或传递自己的请求)并解释响应来调用另一个视图。(c.f.测试框架)


当然,如果另一个视图有不希望的副作用,那么控制视图将不得不释放它们。在事务中工作应该允许它深入研究它调用的视图的结果,然后中止事务并执行自己的操作

Django视图函数接受请求并返回响应对象。视图没有理由不能通过构造请求(或克隆或传递自己的请求)并解释响应来调用另一个视图。(c.f.测试框架)


当然,如果另一个视图有不希望的副作用,那么控制视图将不得不释放它们。在事务中工作应该允许它深入研究它调用的视图的结果,然后中止事务并执行自己的操作

您可以使用urllib,如下所示

import urllib, urllib3, urllib.request
            url = "http://abcd.com" # API URL
            postdata = urllib.parse.urlencode(values).encode("utf-8") 
            req = urllib.request.Request(url)

            with urllib.request.urlopen(req, data=postdata) as response:
                resp = response.read()
                print(resp)


您可以使用urllib,如下所示

import urllib, urllib3, urllib.request
            url = "http://abcd.com" # API URL
            postdata = urllib.parse.urlencode(values).encode("utf-8") 
            req = urllib.request.Request(url)

            with urllib.request.urlopen(req, data=postdata) as response:
                resp = response.read()
                print(resp)


如果是同一个django应用程序,那么向自身发出请求的速度将比直接调用python函数慢。您可以使用RequestFactory创建请求,然后将其直接发送到view函数:至少这样您就不会有任何网络开销。@samfrances跳过中间件
localhost
请求不使用DNS。如果你真的需要使用真实的url,然后将其添加到
/etc/hosts
以避免DNS查找。如果是同一个django应用程序,则向其自身发出请求的速度将慢于直接调用python函数。您可以使用RequestFactory创建请求,然后将其直接发送到view函数:至少这样您就没有任何网络开销。@跳过中间件
localhost
请求的samfrance不使用DNS。如果您确实需要使用真实的url,那么只需将其添加到
/etc/hosts
以避免DNS查找。我知道这一点,并且(在本例中)非常希望产生副作用。然而,我更喜欢浏览路由(URL),因为另一个应用程序没有“普通”视图功能(它是graphql/grapene应用程序)。我知道这一点,副作用(在本例中)非常理想。然而,我更喜欢浏览路由(URL),因为另一个应用程序没有“普通”视图功能(它是graphql/grapene应用程序)。这是我已经在做的(使用请求)。问题更多的是如何避免HTTP调用并完全停留在Django
urllib中。request
是一个更难使用的HTTP API,文档建议您改用
requests
。告诉某人不要使用请求在这里不是一个有用的解决方案,因为
请求
实际上可以做得更多。使用
urllib.request
对一开始试图不发出HTTP请求的人没有帮助。为什么导入
urllib3
然后不使用它呢?这就是我已经在做的事情(使用请求)。问题更多的是如何避免HTTP调用并完全停留在Django
urllib中。request
是一个更难使用的HTTP API,文档建议您改用
requests
。告诉某人不要使用请求在这里不是一个有用的解决方案,因为
请求
实际上可以做得更多。使用
urllib.request
对一开始试图不发出HTTP请求的人没有帮助。为什么导入
urllib3
,然后不使用它呢?