如何只允许管理员(或某些用户)在 Django 中编辑页面?

Posted

技术标签:

【中文标题】如何只允许管理员(或某些用户)在 Django 中编辑页面?【英文标题】:How to allow only Admin (or some user) to edit the pages in Django? 【发布时间】:2019-12-31 17:53:12 【问题描述】:

在Django网页中(页面可以被所有人查看),需要只允许某些人编辑该网页,其他人只能查看该网页。

在 Django-admin 页面的用户表中,我已将某些用户更改为“可以查看”选项,并添加了某些用户“可以编辑”选项。它没有按预期工作。

供参考:

收到此错误,


POST "/admin/auth/user/4/change/ HTTP/1.1" 302

实际结果是

 POST "/admin/auth/user/4/change/ HTTP/1.1" 200

而且那个改变结果需要成功改变并反映

【问题讨论】:

什么意思是“添加某些用户”可以编辑“选项”?你的意思是“可以改变”?您没有看到错误,您看到的是重定向 (302),如果您告诉我们您在浏览器中看到的内容(您被重定向到哪个页面)会有所帮助 是的,我的意思是“可以改变”,它被重定向到用户主页,即“localhost:8000/admin/auth/user” 所以对User 模型具有“可以更改”权限的用户无法打开特定User 的/change/ 页面,而是被重定向到用户列表? 不,现在我的问题是任何用户都可以查看、更改、添加和删除网页中的内容。但是我想通过更改用户权限将视图访问权限限制为少数人和少数人通过“可以更改”来更改内容 这应该只是工作,假设你给予正确的权限。在上面的示例中,您正在为 TaskManager 模型设置权限,但在 URL 中,您显示了 User 模型的 URL。这些不相关。 【参考方案1】:

views.py

from django.views.generic.edit import UpdateView
from myapp.models import Author

class AuthorUpdate(UpdateView):
    model = Author
    fields = ['name']
    template_name_suffix = '_update_form'

app/author_update_form.html

% if request.user.is_authenticated and request.user.is_admin %
<form method="post">% csrf_token %
     form.as_p 
    <input type="submit" value="Update">
</form>
% else %
<p>Display data</p>
% endif %

【讨论】:

Aurthor 模型中有哪些字段。 @gomathisubramanian 他们可以是你想要的任何东西。在您的views.py 中,只需列出您希望在模板中列出的字段即可。

以上是关于如何只允许管理员(或某些用户)在 Django 中编辑页面?的主要内容,如果未能解决你的问题,请参考以下文章

在 Django 中,只允许管理员用户访问视图

如何根据用户组更改 Django 模板?

如何只允许在 QTableWidget 中多次选择某些项目?

Django Admin Cookbook-19如何在管理后台中一个模型只允许创建一个对象

Swift/iOS8:只允许某些键盘

在帝国cms中新建只具有编辑某些栏目权限的后台用户或新建编辑用户在选择栏目时不能选择问题解决方法