所以我在我的django应用程序中添加了一个manage.py命令,它基本上从视图中获取结果并将它们通过电子邮件发送给特定用户。此命令将在cron计划上运行 - 基本上这是通过自动电子邮件报告完成的。
我已经想出如何添加命令,但我想现在调用视图。问题是我没有HttpRequest对象,每当我在HttpRequest上阅读django文档时,我的眼睛都会茫然,我很难跟上它。我不确定如何创建一个满足我需求的HttpRequest对象,也不确定是否有另一种方法可以完成。我也尝试将'None'作为请求对象传递,但这并没有带来任何结果。
帮助?
答案 0 :(得分:4)
我认为你的情况如下:
def superDuperView(request, params,...):
# The logic lies here which is intended to be reused.
......
......
return HttpResponse('template.html', {somedata})
您希望在管理命令中重用视图的逻辑。但调用视图是没有请求响应生命周期似乎是不可能的。因此,逻辑分离和你的观点会对你有所帮助:
def superDuberBusinessLogic(user, params,...):
#implement your logic here without a need of any request.
......
return result
你的观点将成为:
def superDuperView(request, params,...):
# You could pass user your logic if you need.
data = superDuberBusinessLogic(request.user, params,....)
return HttpResponse('template.html', {data})
您可以在管理命令中使用superDuberBusinessLogic
。
答案 1 :(得分:2)
我完全承认这种黑客性质,但是如果有效则是愚蠢的吗?
from django.test import Client
user = User.objects.filter(is_superuser=True)[0]
assert user.is_authenticated()
c = Client()
c.force_login(user)
resp = c.get( reverse('frontend:csv-view', kwargs={'company':company.name}) )
print resp.content
答案 2 :(得分:0)
如果有人遇到需要 request
对象的情况,
一个简单的解决方案可能是使用 curl
作业中的 cron
命令
这对于例如很有用。在电子邮件模板中建立绝对网址
例如
30 08 10 06 * curl http://localhost/your/view/param/etc/etc/
这绕过了对任何管理命令代码的需求。