【问题标题】:How can perform a task from superuser in django如何在 django 中执行超级用户的任务
【发布时间】:2021-08-29 20:57:44
【问题描述】:

我正在尝试从超级用户接受/拒绝任务执行操作,但从超级用户登录后它显示错误。即使我从非超级用户登录如果显示相同的错误

  403 Forbidden 

我正在尝试第一次从超级用户执行操作我不知道如何解决这个问题

查看.py

from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin

class Approval(LoginRequiredMixin, UserPassesTestMixin, TemplateView):
    def test_func(self):
        if self.request.user == User.is_superuser:
           return True
        else:
           return False

    template_name = 'approve.html'

    def get(self, request, *args, **kwargs):
        return render(request, self.template_name)

    def post(self, request):
        

网址.py

urlpatterns = [
        path('approve',Approval.as_view(), name='approve')
]

【问题讨论】:

    标签: django django-views decorator


    【解决方案1】:

    您检查用户是否是超级用户:

    from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin
    
    class Approval(LoginRequiredMixin, UserPassesTestMixin, TemplateView):
        template_name = 'approve.html'
        
        def test_func(self):
            return self.request.user.is_superuser
    
        def get(self, request, *args, **kwargs):
            return render(request, self.template_name, {'all_saloon': all_saloon})

    然而all_saloon 很奇怪:这意味着如果它是一个列表或QuerySet,它将每次都使用相同 数据,因此如果稍后新的Saloon 是构造,它不会考虑到这一点。

    您可以更改handle_no_permission 函数以确定在测试失败时该怎么做:

    from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin
    from django.shortcuts import redirect
    
    class Approval(LoginRequiredMixin, UserPassesTestMixin, TemplateView):
        template_name = 'approve.html'
        
        def test_func(self):
            return self.request.user.is_superuser
        
        def handle_no_permission(self):
            return redirect('name-of-some-view')
        
        def get(self, request, *args, **kwargs):
            return render(request, self.template_name, {'all_saloon': all_saloon})

    您可能想改用ListView [Django-doc]

    【讨论】:

    猜你喜欢
    • 2017-11-10
    • 1970-01-01
    • 2016-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-14
    • 1970-01-01
    相关资源
    最近更新 更多