如何将参数“请求”从脚本传递给视图的函数? [关闭]
Posted
技术标签:
【中文标题】如何将参数“请求”从脚本传递给视图的函数? [关闭]【英文标题】:How can I pass the parameter "request" from a script to a view's function? [closed] 【发布时间】:2016-08-10 09:41:42 【问题描述】:我有一个脚本,它假装在我的站点中创建一个表单并接收响应,我们称之为 script.py。 这个脚本需要调用views.py中的一个函数:
opc = newproject.views.Menu_Options(request, ask, Options)
这个函数需要使用request.POST,所以需要接收“request”作为参数。 问题是: Script.py 不知道什么是“请求”。我导入了这个:
import newproject.views
import django
from django.http import request
我运行了这个项目,但只是忽略了参数“request”,并在这一行给了我一个错误:
opc = newproject.views.Menu_Options(ask, Options)
Exception Type: TypeError at /
Exception Value: Menu_Opctions() missing 1 required positional argument: 'Options'
我是否导入了“错误请求”? 在views.py中是否有其他方法可以在函数中导入对象“请求”而不将其作为参数传递? 提前致谢! :)
【问题讨论】:
信息不足。例如,这个脚本 py 是什么?至少显示此视图的一部分。换句话说,这不是一个 MVCE 【参考方案1】:导入from django.http import request
只是导入模块django.http.request
,当你调用Menu_Options
方法时它不会神奇地传递request
。
你可以如下构造一个假请求对象:
from django.http import HttpRequest
fake_request = HttpRequest()
fake_request.method = 'post'
fake_request.POST['foo'] = bar
# call the view with your fake request
opc = newproject.views.Menu_Options(fake_request, ask, Options)
但是,这非常 hacky。您的脚本不应该创建一个虚假的请求对象。 Menu_Options
视图中可能有一些通用功能,您应该将其分解为单独的方法。然后您的视图和脚本都可以调用新方法,但脚本不必创建假请求对象。
【讨论】:
第一件事:感谢您的回答和这个非常 hacky 的方法,如果我找不到其他解决方案,我会尝试 :) 第二件事:@e4c5 是正确的,我没有给你足够的信息。所有信息都在这里:[链接]***.com/questions/38802294/… 我决定提出一个更简单的问题,因为我还没有得到解决方案,尽管我需要简化问题和问题。现在看来我说得太短了,对不起。 对于您的其他问题,我真的无能为力。如果您正在编写脚本来测试您的代码,那么您应该查看testing tutorial。您可能会发现测试客户端很有用,而不是编写自己的脚本来伪造请求。 我测试了我的脚本并且它工作正常,我真的在使用 django 让它在一个站点中工作(现在我使用本地主机作为站点)感谢你让我使用测试无论如何 django :) 这很有趣 我很遗憾地告诉你,hacky 方法不起作用 :( 我在同一行遇到了完全相同的错误。这次“fake_request”被忽略了。有什么可以解释这种奇怪的行为吗? 我的代码可能不起作用,但它不应该给你和以前一样的错误。它正在调用Menu_Options(fake_request, ask, Options)
,因此它不应该抱怨缺少参数。我没有任何其他建议,希望您设法让您的脚本正常工作。【参考方案2】:
我修好了!我意识到当我调用我的脚本主函数时我忘记传递“请求”参数。这就是为什么我的外部脚本“不知道”什么是“请求”。
【讨论】:
以上是关于如何将参数“请求”从脚本传递给视图的函数? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
django - 将参数从模板传递到 models.py 的函数
如何将传递给我的 bash 脚本的所有参数传递给我的函数? [复制]