正在干燥Django视图request.user对象

正在干燥Django视图request.user对象,django,django-models,django-views,Django,Django Models,Django Views,我正在构建一个web应用程序,我发现在检查request.user是否与创建电影的用户匹配时存在大量复制。电影对用户具有FK,因此只有创建特定电影的用户才能对其执行适当的操作 @login_required def edit_movie(request, slug, template_name="movies/edit_movie.html"): movie = get_object_or_404(Movie, slug=slug) if movie.user != reques

我正在构建一个web应用程序,我发现在检查request.user是否与创建电影的用户匹配时存在大量复制。电影对用户具有FK,因此只有创建特定电影的用户才能对其执行适当的操作

@login_required
def edit_movie(request, slug, template_name="movies/edit_movie.html"):
    movie = get_object_or_404(Movie, slug=slug)
    if movie.user != request.user:
        raise HttpResponseForbidden
    # Rest of code omitted for brevity.

@login_required
def edit_screener(request, slug, template_name="movies/edit_screener.html"):
    movie = get_object_or_404(Movie, slug=slug)
    movie_media = movie.moviemedia_set.get(movie_type='screener')
    if movie.user != request.user:
        raise HttpResponseForbidden()
    # Rest of code omitted for brevity.


@login_required
def dashboard(request, template_name='movies/dashboard.html'):
    movies = Movie.objects.active().filter(
        user=request.user).order_by('-created_at')
    # Rest of code omitted for brevity.
我在RubyonRails方面有很强的背景,我们只需要在控制器上使用before_过滤器:find_user,这样就避免了重复。Django中处理此类复制的最佳方法是什么


J

如果可以显示404而不是403,则可以执行以下操作:

movie = get_object_or_404(Movie, slug=slug, user=request.user)

为什么不创建这样做的简单函数,而不是复制相同的代码

def get_movie(slug, user):
    movie = get_object_or_404(Movie, slug=slug)
    if movie.user != user:
        raise Http403
    return movie

这可能是相关的。这也是我想做的。