데코레이터와 함께 Django보기를 우선합니다
-
22-07-2019 - |
문제
이미 로그인 페이지에서 다른 페이지로 로그인 한 사용자를 리디렉션 해야하는 상황이 있습니다. 나는 이것이 의미가있는 데코레이터로 달성 될 수 있다고 언급했지만, 나는 그것들을 사용하는 데 상당히 새로운 것입니다. 그러나 Django 로그인과 타사보기 (Django-Registration)를 사용하고 있습니다. Django.contrib.auth 또는 Django 등록에서 코드를 변경하고 싶지 않습니다. 원하는 동작을 얻기 위해 수정되지 않는 뷰에 데코레이터를 어떻게 적용 할 수 있습니까?
미리 감사드립니다!
업데이트 : 로그인 기능을 등록 모듈과 실수로 연관 시켰음을 발견했습니다. Django 등록은이 문제와 관련이 없습니다. 그러나 여전히 기본 로그인 () 동작을 무시할 수 있어야합니다. 이견있는 사람?
해결책
세 가지 방법이 더 있지만, 자신의 URLConf를 사용해야합니다.
urlconf에서 직접 뷰에 데코레이터를 추가하십시오.
... (regexp, decorator(view)), ...
그래도 뷰와 데코레이터를 URLConf로 가져와야 하므로이 제품이 마음에 들지 않습니다. 내 URLS.Py에 수입이 적은 것을 선호합니다.
뷰를 안으로 가져옵니다
<app>/views.py
그리고 여기에 데코레이터를 추가하십시오.import view view = decorator(view)
Vinay의 방법과 거의 비슷하지만 URLConf가 필요하기 때문에 더 명백합니다.
새로운보기로보기를 감싸십시오.
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
데코레이터입니다.