Django permission_required 装饰器 method_decorator 在 CreateView 中用于 get_success_url(self)

标签 django django-models django-views

    from django.contrib.auth.decorators import permission_required  
    from django.utils.decorators import method_decorator  
    class EnvCreate(CreateView):

           model = Capacity.models.Env
           fields = ["name","dns","manager"]
           template_name_suffix = '_create_form'

           @method_decorator(permission_required('Capacity.add_env'))
           def get_success_url(self):
                  return reverse("envapps", kwargs={"envid": self.object.pk})

我想让用户只有在获得许可的情况下才能添加“环境”。
我已经阅读了许多消息和博客,执行相同操作的方法与上述相同。
但是到处都在使用 dispatch() ,但我想在 get_success_url 之前使用它(不确定这是不是问题)

当我尝试创建 env(由具有权限的用户)时出现的错误,
    TypeError at /Capacity/create/
    _wrapped_view() takes at least 1 argument (0 given)
    Request Method: POST
    Request URL:    http://172.16.68.20:7000/Capacity/create/
    Django Version: 1.6.1
    Exception Type: TypeError
    Exception Value: _wrapped_view() takes at least 1 argument (0 given)
    Exception Location: /usr/lib/python2.6/site-packages/django/utils/decorators.py in _wrapper, line 29

关于我做错了什么或解决方案有什么想法?

最佳答案

得到了答案。在理解 dispatch 的用法时犯了一个错误。

    from django.contrib.auth.decorators import permission_required
    from django.utils.decorators import method_decorator
    class EnvCreate(CreateView):

       model = Capacity.models.Env
       fields = ['name','dns','manager']
       template_name_suffix = '_create_form'

       @method_decorator(permission_required('Capacity.add_env',raise_exception=True))
       def dispatch(self, request):
            return super(EnvCreate, self).dispatch(request)

       def get_success_url(self):
            return reverse('envapps', kwargs={'envid': self.object.pk})

关于Django permission_required 装饰器 method_decorator 在 CreateView 中用于 get_success_url(self),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21254866/

相关文章:

python - 如何使 Django 开发服务器公开?基因有可能吗?

python - 如何在Django中内连接4个表?

django - 无法解析 : type object 'Member' has no attribute '_default_manager, django 1.10

python - Django - 使用过滤器获取项目列表

django - 将 python 列表传递给 django 模板

javascript - Django + Chart.js : Cannot get two bar charts on the same graph with appropriate data

django - 如何将 intersphinx 链接到 django 特定的构造(如设置)?

python - Django:定义插入长文本的表单的最佳方式?

django - 如何在 Django 中导入日期时间模块?

Django:在 ValidationError 上停止模型实例创建