我只需要将模型对象的访问权限限制为用户创建它或超级用户。
例如:
post = get_object_or_404(Post, slug=kwargs['slug'])
if post.created_by == request.user or request.user.is_superuser:
return render(request, "post.html", {"post": post})
这有更好的练习\快捷方式吗?
谢谢
答案 0 :(得分:0)
是的,有一些快捷方式。如果您使用基于类的视图,则可以使用class decorator。
您也可以在urls.py
文件中使用装饰器。 Here's how
答案 1 :(得分:0)
创建装饰器总是更干净
from functools import wraps
from django.shortcuts import get_object_or_404, redirect
from django.utils.decorators import available_attrs
def user_can_view():
def decorator(view_func):
@wraps(view_func, assigned=available_attrs(view_func))
def _wrapped_view(request, *args, **kwargs):
post = get_object_or_404(Post, slug=kwargs['slug'])
if post.created_by == request.user or request.user.is_superuser:
return view_func(request, *args, **kwargs)
# Redirct to another view or raise 404 instead
return redirect('posts')
return _wrapped_view
return decorator
@user_can_view()
def my_view(request):
return render(request, "post.html", {"post": post})