【问题标题】:mixins Django how to enable staff-user post, edit, delete permission in html templatemixins Django 如何在 html 模板中启用员工用户发布、编辑、删除权限
【发布时间】:2021-05-12 10:26:33
【问题描述】:

我在视图中使用 mixins 来限制未经身份验证的用户访问我的博客文章页面、编辑页面和删除页面。现在只有管理员用户可以访问这些页面,但我也授予员工用户访问这些页面的权限。看图片:

我的员工用户在尝试访问这些页面时仍然收到 404 错误。这是我的代码:

#views.py

class blog_publish_view(PermissionRequiredMixin,CreateView):
      raise_exception = True
      permission_required = "blog_add_blog"
      model = Post
      form_class = BlogPost
      template_name = "blog_post.html"
      #fields = ['title','author','body']
      
      
                   
class blog_update_view(PermissionRequiredMixin,UpdateView):
      raise_exception = True
      permission_required = "blog_change_blog"
      model = Post
      template_name = "blog_update_post.html"
      form_class = BlogPost
     
     
     


class blog_delete_view(PermissionRequiredMixin,DeleteView):
      raise_exception = True
      permission_required = "blog_delete_blog"
      model = Post
      template_name = "delete_blog_post.html"
      success_url = reverse_lazy('blog')  

#用于发布博客的 html 页面:

{% if user.is_authenticated %}
    <div class="container">
    <h1>Publish Blog</h1>  
        <form method="POST">
            {% csrf_token %}
           
            {{form.media}}
           
            {{form.as_p}}
            <button class="btn btn-info">Publish</button>
        </form>
        </div>
{% endif %}

我的员工用户可以从 django 管理面板发布、编辑、发布博客,但如何在 html 模板中启用这些权限。

【问题讨论】:

  • 不是permission_required = "blog_change_post" 吗?还是包括帖子在内的东西?

标签: python django


【解决方案1】:

您错误地指定了permission_required 属性。权限名称格式为&lt;app label&gt;.&lt;permission codename&gt;,其中默认权限代码名称格式为&lt;action&gt;_&lt;model_name&gt;。所以你的观点是这样的:

class blog_publish_view(PermissionRequiredMixin,CreateView):
      ...
      permission_required = "blog.add_post"
      ...


class blog_update_view(PermissionRequiredMixin,UpdateView):
      ...
      permission_required = "blog.change_post"
      ...


class blog_delete_view(PermissionRequiredMixin,DeleteView):
      ...
      permission_required = "blog.delete_post"
      ...

编辑:默认权限如下:

  1. 添加权限:&lt;app label&gt;.add_&lt;lowercase_model_name&gt;
  2. 更改权限:&lt;app label&gt;.change_&lt;lowercase_model_name&gt;
  3. 删除权限:&lt;app label&gt;.delete_&lt;lowercase_model_name&gt;
  4. 查看权限:&lt;app label&gt;.view_&lt;lowercase_model_name&gt;

注意:类名应该在 PascalCase 而不是 snake_case 所以应该是 BlogPublishView 而不是 blog_publish_view等看看PEP 8 -- Style Guide for Python Code

【讨论】:

  • 你能再描述一下吗?如果你能写一两行代码给我看一个例子会更好。
  • @boyenec 你是什么意思描述更多?我已经向您展示了您需要更改为 permission_required 设置的值,并在代码中显示您需要将其设置为的值...
  • 感谢它的工作。 “_post”是默认的django属性吗?是否有类似“blog.view_post?? 用于向特定用户组显示特定页面的属性?
  • post 是您的小写型号名称。是的,会有blog.view_post 权限,请检查我的编辑。
猜你喜欢
  • 2021-08-02
  • 2023-03-09
  • 2021-07-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-06
  • 2013-06-26
  • 2019-11-02
  • 2014-05-23
相关资源
最近更新 更多