Запуск скрипта python в Django из submit

Возможно, есть другой способ решить эту проблему, но я довольно новичок в использовании Django.

Я написал собственный скрипт python и хотел бы запустить функцию или .py-файл, когда пользователь нажимает кнопку «отправить» на веб-странице.

Как я могу получить параметр, который нужно передать в функцию python из кнопки отправки с помощью Django?

  • Использование Lambda и кортежей для отправки нескольким функциям: Python, Tkinter
  • Расширение профиля пользователя в Django. Создание пользователей пользователями
  • Кластеризация с scipy-кластерами через матрицу расстояний, как вернуть исходные объекты
  • Использование formset_factory в Django
  • Pandas: SettingWithCopy Предупреждение:
  • Почему добавление конечной запятой после имени переменной делает ее кортежем?
  • argparse с требуемыми подкомандами
  • Каков рекомендуемый способ использования Vim folding для кода Python
  • 3 Solutions collect form web for “Запуск скрипта python в Django из submit”

    Как правило, что бы вы делали, ваша форма должна отправить запрос на отправку. Затем вы перехватите запрос в своем urls.py, где вы будете называть свою функцию. Поэтому, если ваша форма выглядит так:

    <form action="submit" method="post"> <input type="text" name="info"><br> <input type="submit" value="Submit"> </form> 

    у вашего urls.py будет что-то вроде этого:

     url(r'^submit', views.submit) 

    и ваш view.py будет иметь функцию, которая получит параметры, которые были переданы через сообщение:

     def submit(request): info=request.POST['info'] # do something with info 

    Эта ссылка дает более подробное объяснение.

    После поиска в Интернете на пару дней мне удалось собрать какое-то решение по этому вопросу, которое мне было необходимо для моего проекта.

    SwankSwashbucklers дал общий подход, и я просто хотел добавить к нему, чтобы закончить круг. Это может быть не единственное решение, поэтому я просто даю один рабочий пример. Итак, ваш шаблон должен содержать следующий код (как указано выше с некоторыми дополнительными функциями):

    your_template.html

     {% extends base.html %} {% block main_content %} <form action="your_view_url" method="post">{% csrf_token %} {{ form.as_table }} // <input type="text" name="info_name" value="info_value"> <input type="submit" value="Submit"> </form> <p> Post Data: {{ info }} </p> <p> Result: {{ output }} </p> {% endblock main_content %} 

    Если вы определили форму в формах.py и / или с помощью своих моделей для рендеринга формы, просмотрите визуализированный HTML, чтобы узнать, что было дано атрибутам «значение», предоставленным Django в форме. «значение» – это то, что будет представлено в вашем запросе POST.

    Ваше определенное представление отобразит форму, а также обработает ее после отправки, так что у вас будет 2 раздела в ней с инструкцией «if». Django использует «GET» для открытия представлений, поэтому первоначальная визуализация отображает пустую форму

    views.py

     import subprocess def your_view_name(request): if request.method == 'GET': form = your_form_name() else: if form.is_valid(): info = request.POST['info_name'] output = script_function(info) // Here you are calling script_function, // passing the POST data for 'info' to it; return render(request, 'your_app/your_template.html', { 'info': info, 'output': output, }) return render(request, 'your_app/your_template.html', { 'form': form, }) def script_function( post_from_form ) print post_from_form //optional,check what the function received from the submit; return subprocess.check_call(['/path/to/your/script.py', post_from_form]) 

    forms.py

     class your_form_name(forms.Form): error_css_class = 'error' //custom css for form errors - ".error"; required_css_class = 'required' //custom css for required fields - ".required"; info_text = forms.CharField() 

    «Info_text» – это то, что будет отображаться в шаблоне, как в поле «input», когда вы вызываете form = your_form_name () . Подробнее о формах Django можно найти здесь https://docs.djangoproject.com/en/1.9/ref/forms/fields/

    Когда вы нажмете submit, форма вернет данные обратно к себе, поэтому ваше представление выберет, что его POST и запустит is_valid , а затем значением вывода будет код ошибки, возвращаемый subprocess.check_call . Если ваш скрипт работает нормально, значение «output» будет «0».

    Это для «Django 1.4» и «Python 2.6». В последних версиях есть subprocess.check_output, которые могут фактически вернуть результат из сценария, чтобы вы могли вернуть его обратно в шаблон.

    Надеюсь это поможет:)

    То, что говорит @SwankSwashbucklers, – это путь.

    Если вы также хотите сохранить свой сценарий отдельно от представления, вы также можете использовать собственную команду управления и использовать call_command для вызова ее в представлении. Таким образом, вы можете запустить сценарий из командной строки, а также с помощью команды manage.py mycommand [myargument] .

    Python - лучший язык программирования в мире.