Форум сайта python.su
Доброго времени суток,
Недавно начал изучать джангу. Подскажите в следующем примере, как передать значение input формы команде Subprocess.Popen() для запуска dig и вывода результата в шаблон dig.html
Попробовал сделать через файл forms.py и определение класса DigForm.
forms.py
from django import forms class DigForm(forms.Form): ip = forms.CharField()
from django.urls import path from . import views urlpatterns = [ path('dig', views.dig, name='dig'), ]
from django.shortcuts import render from .forms import DigForm def dig(request): form = DigForm(request.POST) return render(request, 'myblog/dig.html', {'form': form})
{% extends 'myblog/base.html' %} {% block content_dig %} <p>Use this DNS lookup tool to easily view the standard DNS records for a domain.</p> {{ form }} <br><br><input type="submit" value="GET THE DNS RECORDS" /> {% endblock %}
def dig(request): cmd = subprocess.Popen(["dig", google.com], shell=True, stdout=subprocess.PIPE) rez_dig = cmd.communicate()[0].decode() return render(request, 'myblog/dig.html', {'rez_dig': rez_dig})
Отредактировано r0x (Окт. 28, 2018 22:29:36)
Прикреплённый файлы:
input.png (19,9 KБ)
Офлайн
r0x
Вообще все не так. Если вы хотите запустить некую отвязанную от wsgi-скрипта задачу в отдельном процессе, то вам в любом случае придется костылить некое межпроцессное взаимодействие. Только на самом деле все гораздо хуже, потому что в продакшене ваш сайт сам по себе будет запущен в нескольких (в десятках) процессах, и вам понадобится некая шина для передачи данных из задачи в “сайт” и назад, а постольку поскольку задач может работать несколько одновременно, то понадобится очередь таких сообщений и вообще, проблем и подводных камней здесь слишком много для начинающего. Так что же делать? А как это обычно бывает в мире питона - все уже давно решено за нас. Вам нужна http://www.celeryproject.org или подобная система диспетчеризации задач и было бы хорошо, чтобы она из коробки работала с джангой.
Офлайн
подводные камни везде. есть с чем разбираться это понятно. мне это не в продакшн нужно. а для себя. и все таки, в данном случае как взять значение input и подставить как переменную в команду dig ?
Офлайн
r0xЧто имеется в виду под командой dig? Ваша функция что ли? Ну так дорогой, у вас функция уже принимает request, а вот где искать значение инпута как не в реквесте?
значение input и подставить как переменную в команду dig
Офлайн