如何在我的 python 脚本和我的 Django 视图(导入、请求)之间进行交互?

How to Interact between my python script and my Django view (import, request)?

我尽我所能解释我的问题:

我有一个用 3 个模块编写的程序。我想从站点(现在我正在使用本地主机进行测试)保存一些数据到一些变量,并以这种方式在索引页面中显示一些变量的值:

1.- [Script: Text_Variable] <-- [localhost: ask_for_text]
  2.- [Script: Menu_Options] --> [localhost: show_menu]
  3.- [Script: Option_Variable] <-- [localhost: user_option]
4.- [Script: Response_Variable] --> [localhost: show_response]

根据 "Text_Variable" 的值,程序执行:1 --> 4 或 1 --> 2 --> 3 --> 4 我可以从 "views.py" 中的脚本导入而不会出现问题,函数和变量使过程 1 --> 4 正常工作,但函数 "Menu_Options" 有问题: 我使用 "POST" 方法从页面获取数据,所以我需要将参数 "request" 传递给我在 "views.py" 中的函数,但我从脚本中调用了这个函数,所以我需要在模块中导入 "request"。我试过这些:

import newproject.views
import django
from django.http import request

script_module.py:

...
Pregunta = 'question?'
Opciones = [op1, op2...]

opc = boletin.views.Menu_Opciones(request, Pregunta, Opciones)
...

views.py:

...
def Menu_Opciones(request, Pregunta, Opciones):
    request.session['ops'] = Opciones
    request.session['preg'] = Pregunta
    Menu_Opc(request)

    opcion = request.session['op']
    return opcion
...

...
def Menu_Opc(request):
    Opciones = request.session['ops']
    Pregunta = request.session['preg']
    form = OpcionesForm(request.POST or None)
    form.Campo_Opciones.widget.choices = Opciones
    context = {
        'pregunta': Pregunta,
        'form': form,
    }
    if form.is_valid():
        opcion = form.instance.ops.value() + 1
        request.session['op'] = opcion
    return render(request, "inicio.html", context)
...

但是我有这个错误:"Menu_Opciones() missing 1 required positional argument: 'Opciones'"

这是回溯:

Environment:


Request Method: POST
Request URL: http://127.0.0.1:8000/

Django Version: 1.9.8
Python Version: 3.4.2
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'boletin',
 'proyectoapp']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware']



Traceback:

File "C:\Users\ATI\Desktop\probardjango\lib\site-packages\django\core\handlers\base.py" in get_response
  149.                     response = self.process_exception_by_middleware(e, request)

File "C:\Users\ATI\Desktop\probardjango\lib\site-packages\django\core\handlers\base.py" in get_response
  147.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "C:\Users\ATI\Desktop\probardjango\src\boletin\views.py" in inicio
  42.         salida = main(pregunta)

File "C:\Users\ATI\Proyecto\ESI\Main.py" in main
  52.             Respuesta = construir_respuesta(pregunta_lista, 'Profesores', CSin, TMaxCoin)

File "C:\Users\ATI\Proyecto\ESI\Entrada_Salida.py" in construir_respuesta
  127.             opc = boletin.views.Menu_Opciones(Pregunta, Opciones)

Exception Type: TypeError at /
Exception Value: Menu_Opciones() missing 1 required positional argument: 'Opciones'

我这样做是不是做错了,或者有更好的方法吗? 请考虑我是这种语言的新手。 提前致谢。

编辑:

我解决了一个问题!我告诉你怎么做:

首先我将 python 模块的路径添加到 setting.py,然后我决定复制所有脚本模块并粘贴到我的 django 项目中但忘记更改路径...然后,每次我编辑了我的模块,我真的编辑了错误的文件...这就是为什么回溯似乎没有意义。

但现在我收到一个新错误:

"'module' 对象没有属性 'session'"

Environment:


Request Method: POST
Request URL: http://127.0.0.1:8000/

Django Version: 1.9.8
Python Version: 3.4.2
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'boletin',
 'proyectoapp']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware']



Traceback:

File "C:\Users\ATI\Desktop\probardjango\lib\site-    packages\django\core\handlers\base.py" in get_response
  149.                     response =     self.process_exception_by_middleware(e, request)

File "C:\Users\ATI\Desktop\probardjango\lib\site-    packages\django\core\handlers\base.py" in get_response
  147.                     response = wrapped_callback(request,     *callback_args, **callback_kwargs)

File "C:\Users\ATI\Desktop\probardjango\src\boletin\views.py" in inicio
  42.         salida = main(pregunta)

File "C:\Users\ATI\Desktop\probardjango\src\boletin\Main.py" in main
  52.             Respuesta = construir_respuesta(pregunta_lista,     'Profesores', CSin, TMaxCoin)

File "C:\Users\ATI\Desktop\probardjango\src\boletin\Entrada_Salida.py" in     construir_respuesta
  127.             opc = boletin.views.Menu_Opciones(request, Pregunta,     Opciones)

File "C:\Users\ATI\Desktop\probardjango\src\boletin\views.py" in     Menu_Opciones
  137.     request.session['ops'] = Opciones

Exception Type: AttributeError at /
Exception Value: 'module' object has no attribute 'session'

如果我这样更改导入代码:

from django.http import request

至:

from django.http import HttpRequest
request = HttpRequest()

我还有这个错误:

"'HttpRequest' 对象没有属性 'session'"

并且回溯完全相同但是那个错误。

不是"request"和"HttpRequest"的对象吗? "django.http"里面不就是"HttpRequest"吗? "HttpRequest" 的对象没有属性 'session' 吗? 我做错了什么?

从堆栈跟踪来看,文件 "C:\Users\ATI\Proyecto\ESI\Entrada_Salida.py" 的第 127 行似乎有错误。在调用 Menu_Opciones 函数

时,您没有传递 'request' 参数

我修好了!我意识到我在调用脚本主函数时忘记传递 "request" 参数。这就是为什么我的外部脚本 "didn't know" 是 "request" 的原因。