首先,很抱歉,如果我不清楚我要做什么或没有提供足够的信息,那么我对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语句来执行此操作吗? / p>
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>
我正在尝试是否还有另一种方法,但我想我会把这里扔给更有经验的人,希望能弄清楚。
感谢您的帮助!
答案 0 :(得分:0)
您可以覆盖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
答案 1 :(得分:0)
我认为您可以创建一个 CustomPermissionMixin 并使用它代替 LoginRequiredMixin
作为
from django.shortcuts import get_object_or_404
class MyCustomPermissionMixin(LoginRequiredMixin):
def dispatch(self, request, *args, **kwargs):
if not request.user.is_authenticated and request.user != get_object_or_404(models.Character, kwargs['pk']).user:
return self.handle_no_permission()
return super(LoginRequiredMixin, self).dispatch(request, *args, **kwargs)
class SingleCharacter(MyCustomPermissionMixin, generic.DetailView):
model = models.Character
def get_context_data(self, **kwargs):
context = super(SingleCharacter, self).get_context_data(**kwargs)
return context