Django Class Based View - Как получить доступ к POST данным вне метода post()
У меня есть CBV, основанный на TemplateView
.
У него есть метод post(self) для доступа к пользовательскому вводу.
Также у него есть свойство template_name, которое должно быть заполнено данными из post().
Никакие модели или формы Django здесь не используются.
Попытка извлечения данных в рамках метода post:
# views.py
class ReturnCustomTemplateView(TemplateView):
def post(self, *args, **kwargs):
chosen_tmplt_nm = self.request.POST.get('tmplt_name')
print(chosen_tmplt_nm) # correct value.
# how do I use it outside this method? (like bellow)
template_name = chosen_tmplt_nm
... или есть другой способ получить данные из request.POST без def post()?
Заранее спасибо!
Вы можете переопределить метод get_template_names()
[Django-doc], который возвращает итерабельность (например, список) имен шаблонов для поиска при определении имени шаблона, так:
class ReturnCustomTemplateView(TemplateView):
def get_template_names(self):
return [self.request.POST.get('tmplt_name')]
def post(self, *args, **kwargs):
return self.get(*args, **kwargs)
Однако я бы посоветовал быть осторожным с этим: POST-запрос может быть подделан, поэтому хакер может сделать POST-запрос с другим именем шаблона и таким образом попытаться получить, например, содержимое файла settings.py
или другого файла, содержащего конфиденциальные данные.