我有一个假装在我的网站上创建表单并接收响应的脚本,我们称之为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中是否有任何其他方法可以在函数中导入对象“请求”而不将其作为参数传递? 提前致谢! :)
答案 0 :(得分:2)
导入from django.http import request
只需导入模块django.http.request
,当您调用request
方法时,它不会神奇地传递Menu_Options
。
您可以按如下方式构建虚假请求对象:
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
视图中可能存在一些常见功能,您应该将其分解为单独的方法。然后您的视图和脚本都可以调用新方法,但脚本不必创建伪请求对象。
答案 1 :(得分:0)
我修好了!我意识到当我调用脚本主要功能时,我忘记传递“request”参数。这就是为什么我的外部脚本“不知道”是什么“请求”。