在处理Django中的请求期间,我需要对同一个应用程序执行嵌套请求。考虑这个例子,在处理sendmail请求时,我尝试向同一服务器发出另一个请求以获取附件的内容(邮件正文和要附加的内容提供给sendmail视图函数的URL列表)通过POST参数):
def sendmail(request):
mail = #... create a mail object
for url in urls: # iterate over desired attachments urls
data = urllib.urlopen('http://127.0.0.1:8000' + url).read()
mail.attach(data)
这种方法存在一些问题。首先,它不能与开发服务器一起使用,因为它一次只能处理一个请求:因为它已经在处理sendmail请求,尝试从给定的URL读取将永远阻止。 其次,我必须指定服务器的ip和端口,这不是很好。
我想做一些类似的事情:
data = django_get(url).read()
假设的django_get方法不会真正发出http请求,而是直接调用带有url并返回HttpResponse的django组件。这将解决这两个问题,因为没有任何实际的套接字连接,并且没有必要在URL中包含服务器/端口。怎么可能实现呢?
答案 0 :(得分:3)
答案 1 :(得分:1)
这是Ignacio Vazquez-Abrams对懒惰的回答:
from django.core.urlresolvers import resolve
def sendmail(request):
mail = #... create a mail object
for url in urls: # iterate over desired attachments urls
resolved = resolve(url)
request.path = url
mail.attach(resolved.func(request, *resolved.args, **resolved.kwargs))
答案 2 :(得分:0)
将所需的功能放在一个单独的功能中,即sendmail功能和原始页面的功能都可以调用。