@Arturbalagur

Как взаимодействовать с кастомным python кодом?

Всем привет. Гугл не дал конкретный ответ на мой вопрос.
У меня есть parse.py, который парсит сайт и отправляет информацию в MySql.
1) Как мне запустить этот файл через обычную html кнопку?
Я нашёл временное решение, отправляю форму (методом POST ), во view

# view.py
import parse

def parse_site(request):
    if request.user.is_superuser: # Страница доступная только администратору
        if request.method == 'POST':
            parse.main() # Мой парсер
    
        return render(request, 'parse.html')

Но сразу возникают вопросы и проблемы:
  • Как отображать какую-то информацию на странице (не результат парсинга, а промежуточную, например, код ответа с отправленных запросов) , которая приходит из parse.py
  • Как например остановить процесс парсинга
  • Как передать какие то аргументы в parse.py
  • После того, как отправляю форму, страница виснет (происходит парсинг), а что если мне ещё нужно куда то нажать на этой странице


Я новичок и просто не понимаю как происходит взаимодействие между этими вещами.

Пните пожалуйста в нужную сторону, что почитать, посмотреть
  • Вопрос задан
  • 87 просмотров
Решения вопроса 1
2ord
@2ord
1) Как мне запустить этот файл через обычную html кнопку?

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

Поэтому изначально проектируется таким образом, что контроллер быстро передает управление стороннему компоненту все параметры пользователя и другие, необходимые для обработки, а сам возвращает ответ 200 или 202.
Сторонний компонент предоставляет из себя диспетчер очереди задач. В "упаковку"-задачу кладут все аргументы, "запаковывают" и помечают в БД, что создана задача X во время T и она в статусе ожидания.
Обработчиков очереди задач (отдельный от веб-приложения процесс) может быть как несколько, так и достаточно большое количество. Каждый такой обработчик помечает в той же БД, что задача X находится в обработке и приступает к парсингу с полученными аргументами. По окончанию помечает что выполнено, а результаты парсинга сохраняет в БД.

Как отображать какую-то информацию на странице (не результат парсинга, а промежуточную, например, код ответа с отправленных запросов) , которая приходит из parse.py
Это будет усложнением для системы, но вполне возможно. Ведь статусы ответов будут получены очень быстро и их надо будет сохранять в БД, а клиент должен периодически опрашивать статусы или получать их через SSE. И когда-то придется очищать БД от старых результатов.

Как например остановить процесс парсинга
Обработчик, который начал парсинг, должен определять по периодическому обращению к БД, что задача отменена.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Django
Седой и строгий
Celery
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы