如何在 Django 中自定义权限(而不是在 DRF 中)?
How customize permissions in django (not in DRF)?
如何在 view.py(CRUD classes)中为创建者(作者)自定义更新和删除对象的权限?我知道 classes LoginRequiredMixin 和 PermissionRequiredMixin,但我无法自定义它们以仅允许创建者(作者)更改确切对象。
我知道如何使用 class IsAdminOrReadOnly 在 DRF 中自定义权限,例如:
permissions.py 在 DRF
class IsOwnerOrReadOnly(permissions.BasePermission):
def has_object_permission(self, request, view, obj):
if request.method in permissions.SAFE_METHODS:
return True
return bool(obj.user == request.user or request.user.is_staff)
view.py 在 Django 中(没有 DRF)
class NewsUpdateView(LoginRequiredMixin, BaseMixin, UpdateView):
form_class = NewsForm
model = News
template_name = 'news/news_update.html'
model.py 在 Django 中(没有 DRF)
class News(models.Model):
title = models.CharField(max_length=128)
content = models.TextField(blank=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
photo = models.ImageField(upload_to='photos/%Y/%m/%d', blank=True)
is_published = models.BooleanField(default=True)
user = models.ForeignKey(User, on_delete=models.CASCADE)
def __str__(self):
return self.title
问题是:如何在django中自定义权限(不是在DRF中)?
先感谢您。我希望你能给我一些建议,link 文章,或文档,或代码示例来解决这个问题。我已阅读 Custom users and permissions,但我不知道如何解决我的确切任务。
您可以在您的视图中使用 UserPassesTestMixin
。
from django.contrib.auth.mixins import UserPassesTestMixin
class NewsUpdateView(LoginRequiredMixin, UserPassesTestMixin, BaseMixin, UpdateView):
form_class = NewsForm
model = News
template_name = 'news/news_update.html'
def test_func(self):
news = self.get_object()
return news.user == self.request.user
如何在 view.py(CRUD classes)中为创建者(作者)自定义更新和删除对象的权限?我知道 classes LoginRequiredMixin 和 PermissionRequiredMixin,但我无法自定义它们以仅允许创建者(作者)更改确切对象。 我知道如何使用 class IsAdminOrReadOnly 在 DRF 中自定义权限,例如: permissions.py 在 DRF
class IsOwnerOrReadOnly(permissions.BasePermission):
def has_object_permission(self, request, view, obj):
if request.method in permissions.SAFE_METHODS:
return True
return bool(obj.user == request.user or request.user.is_staff)
view.py 在 Django 中(没有 DRF)
class NewsUpdateView(LoginRequiredMixin, BaseMixin, UpdateView):
form_class = NewsForm
model = News
template_name = 'news/news_update.html'
model.py 在 Django 中(没有 DRF)
class News(models.Model):
title = models.CharField(max_length=128)
content = models.TextField(blank=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
photo = models.ImageField(upload_to='photos/%Y/%m/%d', blank=True)
is_published = models.BooleanField(default=True)
user = models.ForeignKey(User, on_delete=models.CASCADE)
def __str__(self):
return self.title
问题是:如何在django中自定义权限(不是在DRF中)? 先感谢您。我希望你能给我一些建议,link 文章,或文档,或代码示例来解决这个问题。我已阅读 Custom users and permissions,但我不知道如何解决我的确切任务。
您可以在您的视图中使用 UserPassesTestMixin
。
from django.contrib.auth.mixins import UserPassesTestMixin
class NewsUpdateView(LoginRequiredMixin, UserPassesTestMixin, BaseMixin, UpdateView):
form_class = NewsForm
model = News
template_name = 'news/news_update.html'
def test_func(self):
news = self.get_object()
return news.user == self.request.user