2011-03-04 3 views
0

현재 login보기를 사용 중이고 AuthenticationForm에서 django.contrib.auth.views 사용자를 로그인하고 있습니다.django.contrib.auth의 양식과보기를 사용하는 사용자 이름의 동적 초기 값

이제이 솔루션을 request 개체의 username 필드에 채워 넣으려고합니다. 방문자가 다른 곳에서 인증되면 사용자 이름을 유추 할 수 있습니다. 나는 게으 르기 때문에 으로 유지하고 싶기 때문에 전체 로그인보기 코드를 복제하지 않고 이것이 가능한지 궁금합니다.

나는 장고에서 dynamic initial values을 알고 있지만, 이것들이 login view (매개 변수로 양식 인스턴스를 허용하지 않음)에 어떻게 전달 될지 알 수 없습니다.
IRC 채널에서 요청을 처리하기 위해 AuthenticationForm을 확장하는 것이 좋습니다 (이해할 수있는 한) 이 아니며은 항상 양식을 제출할 때만이 아니라 너무 늦을 것이다).

내가 생각할 수있는 유일한 대안은 기본적으로 contrib.auth 패키지 (초기 값을 양식에 전달)의 코드를 복제하는 초기 값을 추가하는 사용자 정의 로그인보기를 작성하는 것입니다.

제 질문은 다음과 같습니다. 더 간단한 대안이 있습니까? 코드를 복사하지 않고도 얻을 수있는 대안이 있습니까? 모든 힌트를 많이 주시면 감사하겠습니다. 감사!

답변

1

은 GET의 양식에 전달 된입니다 (django.contrib.auth.views의 54 행 참조). 그래서 예, 사용자 이름을 사용하도록 양식을 확장하는 것이 가장 좋은 방법 인 것 같습니다. 뭔가 (테스트되지 않은) 같은 : 실제로

class ExtendedAuthForm(AuthenticationForm): 
    def __init__(self, request=None, *args, **kwargs): 
     if request is not None: 
      username = request.get_username_however() 
      initial = kwargs.get('initial', {}) 
      initial_default = {'username': username} 
      initial_default.update(initial) 
      kwargs['initial'] = initial_default 
     super(ExtendedAuthForm, self).__init__(request, *args, **kwargs) 
+0

, 나는 수정 스탠드 (참조 [django.contrib.auth.views] (http://code.djangoproject.com/browser/django/trunk/django/contrib/ auth/views.py # L55)). 코드도 완벽하게 작동합니다. 고마워,이 매우 도움이되었습니다! – mezzopiano