Django基于类的视图-如何在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

…或者有其他方法我可以从请求中获得数据。POST没有def POST ()?

您可以覆盖get_template_names()方法[Django-doc]返回一个模板名称的可迭代对象(例如一个列表),以便在确定模板名称时进行搜索,因此:

class ReturnCustomTemplateView(TemplateView):
defget_template_names(self):
return[self.request.POST.get('tmplt_name')]
def post(self, *args, **kwargs):
return self.get(*args, **kwargs)

然而,我建议小心: POST请求可能是伪造的,因此黑客可以使用不同的模板名称发出POST请求,从而尝试获取例如settings.py文件的内容或其他包含敏感数据的文件。