Имитация HTTP-запроса из автономного скрипта Python и из командной строки - PullRequest
0 голосов
/ 16 декабря 2018

Мне было поручено разработать сценарий, который можно запускать из командной строки, и в качестве аргумента используется url (таким образом, имитирующий запрос браузера).В приложении был успешно создан соответствующий механизм кэширования.Чтобы это запустить, я использую RequestFactory для имитации запросов.Мой сценарий:

class FetchCacheTest(TestCase):
    def setUp(self):
        self.factory = RequestFactory()
        self.user = User.objects.create_user(
            username='thatsme', email='thatsme@hotmail.com', password='secret')

    def cache_details(self, url):
        request = self.factory.get(url)
        print("get_request: {0}".format(request))
        request.user = self.user
        print("request.user: {0}".format(request.user))
        request.user = AnonymousUser()

        response = MyView.as_view()(request)
        response.render()
        self.assertEqual(response.status_code, 200)

if __name__ == '__main__':
    #######
    #import django
    #os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myapp.settings')
    #django.setup()
    ##########################
    script = sys.argv[0]
    url = sys.argv[1]
    print ("Script: {0}\nURL: {1}".format(script, url))

    fct = FetchCacheTest
    t = fct.cache_details(url)

В одной вкладке в терминале я делаю python manage.py runserver В другой вкладке python fetch_myapp.py https://report/failed

Трассировка, которую я получаю:

django.core.exceptions.ImproperlyConfigured: Requested setting INSTALLED_APPS, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.

Я опробовал закомментированный код прямо под if __name__ == '__main__', но безрезультатно.

Есть идеи, как обойти это сообщение?Любые дальнейшие советы по сбору stas кеша в целом приветствуются.

...