【问题标题】:django class based delete view and validation基于 django 类的删除视图和验证
【发布时间】:2015-08-25 03:48:10
【问题描述】:

我的看法:

class ModEmailDeleteView(DetailView):
    model = EmailModel
    template_name = "email_delete.html"
    success_url = reverse_lazy('moderator_profile', request.user.id)

这里我想检查特定字段的用户是否是请求用户,然后只有他可以删除。喜欢

if obj.user == request.user

那么只有他可以删除或抛出404

如果我在 url 中有多个主键怎么办?并希望使用这些主键进行不同的验证

【问题讨论】:

标签: python django django-class-based-views


【解决方案1】:

你可以这样做:

class ModEmailDeleteView(DeleteView):
    model = EmailModel
    template_name = "email_delete.html"
    success_url = reverse_lazy('moderator_profile', request.user.id)

    def delete(self, request, *args, **kwargs):
       self.object = self.get_object()
       if self.object.user == request.user:
          self.object.delete()
          return HttpResponseRedirect(self.get_success_url())
       else:
          raise Http404 #or return HttpResponse('404_url')

【讨论】:

    【解决方案2】:

    django Deleview 有 mixin,你只需覆盖删除 在你看来功能,

    class DeletionMixin(object):
    """
    A mixin providing the ability to delete objects
    """
    success_url = None
    
    def delete(self, request, *args, **kwargs):
        """
        Calls the delete() method on the fetched object and then
        redirects to the success URL.
        """
        if self.object.user = request.user:
          self.object.delete()        
        success_url = self.get_success_url()
        self.object.delete()
        return HttpResponseRedirect(success_url)
    

    【讨论】:

      猜你喜欢
      • 2011-10-01
      • 2020-08-25
      • 1970-01-01
      • 1970-01-01
      • 2015-07-10
      • 1970-01-01
      • 2015-08-03
      • 1970-01-01
      • 2017-04-06
      相关资源
      最近更新 更多