Джанго перенаправить на страницу результатов после окончания терапии - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть проект Django с приложением scrapy.

После того, как пользователь заполнил некоторые поля формы, я передаю заполненные данные пауку и сканирую несколько страниц.

Все работает как шарм, база данных заполняется. За исключением одной вещи.

Когда пользователь нажимает кнопку отправки, страница результатов становится пустой, поскольку паук не завершил сканирование, а данные отсутствуют в базе данных.

Как я могу, внутри вида Джанго, того же, что называл паука, узнать, что это сканирование завершено?

Вот мой код:

def search_process(request):
    """
    Get data from the user and redirect him to results page.
    """
    db = get_db()

    process_number = request.POST.get('process_number', '').strip()
    court = request.POST.get('court', '').strip()

    start_crawl(process_number, court)

    process = db.processes.find_one({
        'process_number': process_number,
        'court': court
    })

    context = {
        'process': process,
    }

    return render(request, 'process_result.html', context)


def start_crawl(process_number, court):
    """
    Starts the crawler.

        Args:
            process_number (str): Process number to be found.
            court (str): Court of the process.
    """
    runner = CrawlerRunner()
    dispatcher.connect(reactor.stop, signal=signals.spider_closed)
    process_info = runner.crawl(ProcessesSpider,
                                process_number=process_number,
                                court=court)
    process_info.addBoth(lambda _: reactor.stop())

1 Ответ

0 голосов
/ 04 сентября 2018

Не уверен, сработает ли мой ответ, но вы можете попробовать его или если у кого-то есть идея получше, поделитесь.

в вашей функции сканирования возвращает логическое значение

def start_crawl(process_number, court):
    ....rest of your code....
    return True

и на ваш взгляд функция

 def search_process(request):
    ...rest of your code...
    crawling = start_crawl(process_number, court)
    if crawling:
        return render(request, 'process_result.html', context)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...