Django/Python-帮助将is_authenticated和user==model.user移动到视图



首先,如果我不清楚我要做什么,或者如果我没有提供足够的信息,很抱歉,我对Django/Python还是比较陌生的。

我目前有一个视图,它呈现的东西就像一篇博客文章:

class SingleCharacter(LoginRequiredMixin,generic.DetailView):
model = models.Character
def get_context_data(self, **kwargs):
context = super(SingleCharacter, self).get_context_data(**kwargs)
return context

而且,在这个视图的模板中,我有一个模板标记,用于检查用户是否通过了身份验证以及帖子的所有者:

{% if user.is_authenticated and user == character.user %}

然而,我目前正在将xhtml2pdf合并到我的项目中,这种只向创建帖子的用户保护帖子的方法会导致一些问题。

我想知道是否可以将user.is_authenticated和user==character.user移动到视图中,而不是模板标记,如果可以,我可以用一个简单的if语句,比如这样做吗?

class SingleCharacter(LoginRequiredMixin,generic.DetailView):
model = models.Character
if user.is_authenticated and user == character.user:
def get_context_data(self, **kwargs):
context = super(SingleCharacter, self).get_context_data(**kwargs)
return context
else:
<I'll include some redirect to a 404 page>

我想看看是否有其他方法可以做到这一点,但我想我会把它扔给更有经验的人,希望能弄清楚。

谢谢你的帮助!

您可以覆盖DetailView的get方法并处理那里的逻辑:

class SingleCharacter(LoginRequiredMixin,generic.DetailView):
model = models.Character
def get(self, request, *args, **kwargs):
self.object = self.get_object()
if self.request.user.is_authenticated and self.request.user == self.object.user:
context = self.get_context_data(object=self.object)
return self.render_to_response(context)
else:
# redirect

最新更新