Member 12564006 Ответов: 1

Как взаимодействовать между моим скриптом Python и моим представлением django (импорт, запрос)?


Я объясняю свою проблему как можно лучше:

У меня есть программа, написанная в 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 -- & gt; 2 --> 3 --> 4
Я мог бы импортировать из сценария в "views.py" без проблем функции и переменные, которые сделали процесс 1 --> 4 работать правильно, но у меня есть проблема с функцией " Menu_Options" :
Я использую метод "POST" для получения данных со страницы, поэтому мне нужно передать аргумент "request" моей функции в "views.py" но я вызываю эту функцию из скрипта, поэтому мне нужно импортировать этот "запрос" в модуль. Я пробовал с этими:

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 () отсутствует 1 обязательный позиционный аргумент: '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) <--(Request?)

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


Я делаю что-то не так или есть лучший способ сделать это?
Пожалуйста, подумайте, что я новичок в этом языке.
Заранее спасибо.

Что я уже пробовал:

Я попытался импортировать объект запроса в скрипт таким образом:

импорт django
из запроса на импорт django. http

но это, кажется, " игнорируется"

1 Ответов

Рейтинг:
2

Member 12564006

Я все исправил! Я понял, что забыл передать параметр "request", когда вызываю свою основную функцию скрипта. Вот почему мой внешний сценарий "не знал", что такое" запрос".


Member 14430943

Эй, ты можешь объяснить свое решение? я застрял в той же проблеме