Мне было поручено разработать сценарий, который можно запускать из командной строки, и в качестве аргумента используется 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 кеша в целом приветствуются.