문제

이미 로그인 페이지에서 다른 페이지로 로그인 한 사용자를 리디렉션 해야하는 상황이 있습니다. 나는 이것이 의미가있는 데코레이터로 달성 될 수 있다고 언급했지만, 나는 그것들을 사용하는 데 상당히 새로운 것입니다. 그러나 Django 로그인과 타사보기 (Django-Registration)를 사용하고 있습니다. Django.contrib.auth 또는 Django 등록에서 코드를 변경하고 싶지 않습니다. 원하는 동작을 얻기 위해 수정되지 않는 뷰에 데코레이터를 어떻게 적용 할 수 있습니까?

미리 감사드립니다!

업데이트 : 로그인 기능을 등록 모듈과 실수로 연관 시켰음을 발견했습니다. Django 등록은이 문제와 관련이 없습니다. 그러나 여전히 기본 로그인 () 동작을 무시할 수 있어야합니다. 이견있는 사람?

도움이 되었습니까?

해결책

세 가지 방법이 더 있지만, 자신의 URLConf를 사용해야합니다.

  1. urlconf에서 직접 뷰에 데코레이터를 추가하십시오.

    ...
    (regexp, decorator(view)),
    ...
    

    그래도 뷰와 데코레이터를 URLConf로 가져와야 하므로이 제품이 마음에 들지 않습니다. 내 URLS.Py에 수입이 적은 것을 선호합니다.

  2. 뷰를 안으로 가져옵니다 <app>/views.py 그리고 여기에 데코레이터를 추가하십시오.

    import view
    
    view = decorator(view)
    

    Vinay의 방법과 거의 비슷하지만 URLConf가 필요하기 때문에 더 명백합니다.

  3. 새로운보기로보기를 감싸십시오.

    import view
    
    @decorator
    def wrapperview(request, *args, **kwargs):
        ... other stuff ...
        return view(request, *args, **kwargs)
    

    마지막 뷰는 일반적인보기를 변경해야 할 때 매우 편리합니다. 이것은 내가 종종 어쨌든하는 일입니다.

URLConf를 사용할 때마다 패턴 순서가 중요하므로 먼저 어떤 패턴이 호출되는지를 셔플해야 할 수도 있습니다.

다른 팁

데코레이터 기능이 있고 장식하고 싶은 jango-등록에서 어떤 견해를 알고 있다면, 당신은 그냥 할 수 있습니다.

registration.view_func = decorator_func(registration.view_func)

어디 registration 장식하려는보기 함수가 포함 된 Django-Registration의 모듈입니다. view_func ~이다 장식하려는보기 기능 decorator_func 데코레이터입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top