如何将参数“请求”从脚本传递给视图的函数? [关闭]

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 脚本的所有参数传递给我的函数? [复制]

如何将curent_user 从flask-security 传递给可插入的视图函数?

将第二个参数从视图中的模型传递给 AJAX 函数

如何将参数(不是命令行参数)传递给批处理脚本中的函数

将 $@ 传递给 shell 脚本中的函数