2012-11-24 2 views
3

웹 응용 프로그램을 구축 중이며 request.user가 영화를 만든 사용자와 일치하는지 확인하는 데 많은 복제가 있음을 발견했습니다. 영화는 사용자에게 FK를 가지므로 특정 영화를 만든 사용자 만 적절한 영화를 볼 수 있습니다. Django의 DRYing request.user 객체

@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. 

나는 레일에 루비에서 강력한 배경을 가지고 있고 우리는 단순히 before_filter를 사용합니다 : find_user를을 컨트롤러는 중복을 피할 수 있도록. 이 종류의 중복을 처리하는 장고에서 가장 좋은 방법은 무엇입니까?

J

+0

이 [질문] (http://stackoverflow.com/questions/6584512/is-there-before-filter-in-django-as-in-rails) 관련이있을 수 있습니다. – Dean

답변

4

가 404 대신에 당신이 할 수있는 403 보여 확인하는 경우 :

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

왜 그렇게 간단 않는 기능 대신에 동일한 코드를 복사를 만들 수 없습니다를?

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

그게 내가하고있는 일에 대해서도 생각한거야. – JeffC