2011-09-12 2 views
0

私はDjangoの管理領域に関する興味深い問題に気付きました。スタッフのアクセス許可を取り消して/adminに直接アクセスしようとすると、通常、今後のリダイレクトとして照会文字列に/admin/というログインページへのリダイレクトが予想されます。しかし、実際に私のadmin/login.htmlテンプレートを使用して、リダイレクトする代わりにその要求されたページをレンダリングするHTTPコード200で返された適切なページを取得します。問題はデコレータ@staff_member_requiredの中にあるようです。管理者のビューは明らかに使います。Djangoの管理領域にアクセスしようとしているユーザをどのようにリダイレクトするのですか?

問題は:これは目的にかなっていますか?もしそうでなければ、あまりにも多くの猿のパッチを当てることなくこの行動をどのように変えることができますか?

答えて

0

多くの人がサイトのリダイレクトを実装しているため、管理パネルへのアクセスがブロックされる可能性があります。管理パネルはそれ自身のアプリなので、それ自身にリダイレクトされます。

# Put this code somewhere it will be imported REALLY early 

from django.contrib.admin.views import decorators 

def staff_member_required(view_func): 
    """ 
    Decorator for views that checks that the user is logged in and is a staff 
    member, displaying the login page if necessary. 
    """ 
    def _checklogin(request, *args, **kwargs): 
     if request.user.is_active and request.user.is_staff: 
      # The user is valid. Continue to the admin page. 
      return view_func(request, *args, **kwargs) 
     else: 
      return HTTPResponseRedirect('/my/login/page/') 
    return wraps(view_func)(_checklogin) 

decorators.staff_member_required = staff_member_required #replaces the function in-place