2013-05-04 1 views
1

그래서 파이썬 2.7과 플라스크 0.9를 사용하고 있습니다. 내가하는 일을 실제로 이해하지 않고 비열한 시도로 URL 라우팅을 엉망으로 만들었습니다.플라스크가 RequestRedirect ('index')를 올린 후/index로 영구적으로 리디렉션

빠른 인터페이스를 채우기 위해 flask-admin을 사용하고 있습니다. 여기에 내가 무슨 짓을 :이 플라스크 뷰에서 반환 리디렉션 ('인덱스')처럼 작동 할 계획대로 작동하지 않았다 아아

from flask.ext.admin import AdminIndexView 
from werkzeug.routing import RequestRedirect 

class IndexView(AdminIndexView): 
def is_accessible(self): 
    if current_user.is_authenticated and current_user.has_role('admin'): 
     return True 
    else: 
     raise RequestRedirect('index') 

내 의도였다. 그것은/관리자가 처음으로 트리거 된 후에 항상/index로 라우트됩니다. (심지어 다른 가상 환경에서 생성 완전히 다른 앱)/인덱스 지금 그래서

코드를 제거하고 False를 반환하기 위해 raise 문을 변경 한 후, 내 응용 프로그램은 여전히 ​​리디렉션/관리자 ..

어떤 도움이라도 대단히 감사합니다!

답변

4

브라우저에서 캐시 된 리디렉션이있는 것 같습니다. 참조 : http://getluky.net/2010/12/14/301-redirects-cannot-be-undon/

불행히도 RequestRedirect() 예외는 301 HTTP 상태 코드를 반환하며 브라우저에서 캐시됩니다.

더 잘 할 수있는 방법이있다 :

  1. is_accessible

    을 확인하는 데 사용되는 특정 관리 뷰는 사용자가 볼 수 있습니다. 두 개 이상의보기가있는 경우 각보기에 대해 호출되고 표시되는 메뉴 항목 만 표시됩니다.
  2. 재정의 할 수있는 방법은 _handle_view입니다. 여기에서 기본 구현을 볼 수 있습니다. https://github.com/mrjoes/flask-admin/blob/master/flask_admin/base.py#L269

중단 (404) 대신 302 상태 코드로 적절한 리디렉션을 자유롭게 반환 할 수 있습니다.

+0

감사합니다. 나는 미쳤다고 생각했는데, 심지어 파이썬을 다시 설치했습니다. 브라우저 캐시를보기까지 얼마나 오래 걸릴지 누가 알겠습니까? _handle_view로 안내해 주셔서 감사합니다. 관리자가 아닌 사용자를위한 글로벌 리디렉션입니다. 이제는 URL이 유효하다는 힌트가 없으므로 404가 더 안전하다고 생각합니다. 감사! – ramabodhi

+0

Joes, _handle_view를 가리켜 주셔서 대단히 감사합니다! – makaron

+0

디버깅을 위해 Chrome의 icognito 모드가 리디렉션을 캐시하지 않기 때문에 유용하다고 판단했습니다. –

관련 문제