Django: Почему моя пользовательская команда запускает сервер?
Я пытаюсь использовать Scrapy
с Django
, поэтому я определил следующую пользовательскую команду управления:
from django.core.management.base import BaseCommand
from scraper.spiders.sparerooms import SpareroomsSpider
from scrapy.crawler import CrawlerProcess
from scrapy.utils.project import get_project_settings
from scrapy.settings import Settings
import os
class Command(BaseCommand):
help = "Release the spiders"
def handle(self, *args, **options):
os.environ.setdefault('SCRAPY_SETTINGS_MODULE', 'scraper.settings')
process = CrawlerProcess(get_project_settings())
process.crawl(SpareroomsSpider)
process.start()
Когда я выполняю команду python3 manager.py crawl
сервер инстанцируется; я вижу, что библиотеки и файлы из другого приложения загружаются до начала ползания, что очень раздражает, так как мне нужно загрузить большое количество данных (30 минут ожидания).
Это не было бы такой проблемой, если бы сервер был пригоден для использования. Однако, request.META
не установлен (невозможно использовать request.build_absolute_uri()
) и конечные точки не достижимы Error 111: Connection Refused.
Все это работает нормально, если я запускаю сервер с помощью python3 manage.py runserver
и затем использую пользовательскую команду (которая снова загружает сервер).
Что я делаю неправильно? Можно ли это исправить?
Сервер не запущен, он проверяется django
автоматически.
Это поведение можно отключить, установив requires_system_checks
на False
следующим образом;
class Command(BaseCommand):
help = "Release the spiders"
requires_system_checks = False
def handle(self, *args, **options):
# code goes here
Или с помощью аргумента skip-checks
с командой;
python3 manage.py crawl --skip-checks