Пользовательское ограничение авторизации в представлении django
У меня есть приложение. В приложении есть пользователи, посты, комментарии к постам и т.д. (это что-то вроде блога). Задача состоит в том, чтобы ограничить пользователей от редактирования объектов, которые не принадлежат пользователю. Например, пользователь не может редактировать записи, сделанные другим пользователем (или комментарии). Я хочу написать декоратор для этого, чтобы авторизировать действия пользователя. Так я и сделал, но теперь получаю ошибку
ValueError: The view blog.views.wrapper didn't return an HttpResponse object. It returned None instead.
Мой код:
def authorize(func):
def wrapper(*args, **kwargs):
if kwargs.get('post_id'):
instance = get_object_or_404(Post, id=kwargs.get('post_id'))
if not args[0].user.id == instance.author_id:
return redirect(
'blog:post_detail', post_id=kwargs.get('post_id')
)
kwargs.update({'instance': instance})
elif kwargs.get('comment_id'):
instance = get_object_or_404(Comment, id=kwargs.get('comment_id'))
if not args[0].user.id == instance.author_id:
return redirect(
'blog:post_detail', post_id=kwargs.get('post_id')
)
kwargs.update({'instance': instance})
func(*args, **kwargs)
return wrapper
@login_required
@authorize
def edit_post(request, post_id, instance=None):
instance = get_object_or_404(Post, id=post_id)
form = PostForm(request.POST or None, instance=instance)
context = {'form': form}
if form.is_valid():
form.save()
return render(request, 'blog/create.html', context)
Что я делаю не так?
поэтому мне нужно вернуть func(*args, **kwargs)