복붙노트

[PYTHON] "next"매개 변수 인 redirect, django.contrib.auth.login

PYTHON

"next"매개 변수 인 redirect, django.contrib.auth.login

성공적으로 로그인 한 후 사용자 지정 URL "/ gallery / (username) /"로 사용자를 리디렉션하려고합니다. 현재 기본 "/ account / profile /"URL로 리디렉션됩니다. 리디렉션 URL을 settings.py, 내 URL을 동적 따라서 따라서 작동하지 않습니다.

설명서에 "다음"매개 변수 및 컨텍스트 프로세서를 사용해야한다고 나와 있습니다. 내 템플릿에는 {{다음}}이 있지만 실제로 / gallery / (사용자 이름)을 전달하는 방법은 혼란 스럽습니다. 어떤 도움이라도 대단히 감사하겠습니다.

p.s : 나 자신의 로그인 화면을 작성하지 않도록 조처하고 있습니다.

해결법

  1. ==============================

    1.나는 보통이 일을하기 위해 2 번의 리디렉션을 사용한다고 고백한다.

    나는 보통이 일을하기 위해 2 번의 리디렉션을 사용한다고 고백한다.

    먼저, 자신 만의 registration / login.html 페이지를 만드십시오. 인증 문서의이 섹션에 html 예제를 복사하여 붙여 넣으면 프로세스를 좀 더 쉽게 할 수 있습니다. 그러나 컨텍스트에서 동적 '{{next}} 변수를 사용하는 대신 next 값을 사용하여 로그인 한 사용자의 일반적인 방문보기로 이동하십시오

    <input type="submit" value="login" />
    <input type="hidden" name="next" value="/gallery/" />
    

    그런 다음 / gallery / URL에 매핑하는보기에서 요청에서 User 객체를 추출합니다 (특히 갤러리보기가 @permission_required 또는 @login_required 데코레이터에 래핑 된 경우). 적절한 사용자 별 갤러리 페이지로 리디렉션 할보기 :

    @login_required
    def gallery(request):
        url = '/gallery/%s/' % request.user.username
        return HttpResponseRedirect(url)
    
  2. ==============================

    2.Django의 로그인보기 django.contrib.auth.views.login은 extra_context라는 사전을 허용합니다. 사전의 값은 템플리트로 직접 전달됩니다. 그래서 이것을 사용하여 다음 매개 변수를 설정할 수 있습니다. 끝난 후에는 next와 value {{next}}로 숨겨진 필드를 설정하여 템플릿에서 렌더링되도록 할 수 있습니다.

    Django의 로그인보기 django.contrib.auth.views.login은 extra_context라는 사전을 허용합니다. 사전의 값은 템플리트로 직접 전달됩니다. 그래서 이것을 사용하여 다음 매개 변수를 설정할 수 있습니다. 끝난 후에는 next와 value {{next}}로 숨겨진 필드를 설정하여 템플릿에서 렌더링되도록 할 수 있습니다.

  3. ==============================

    3.로그인 양식 용 사용자 정의 템플리트가 이미있는 경우
    태그 안에 다음을 추가해야합니다.

    로그인 양식 용 사용자 정의 템플리트가 이미있는 경우 태그 안에 다음을 추가해야합니다.

    <input type="hidden" name="next" value="{{next}}" />
    

    BTW, 당신은 자신의 로그인보기를 만들 필요가 없습니다. django.contrib.auth.views.login이 정상적으로 작동합니다. 당신은 그것에 대한 템플릿을 생성하기 만하면됩니다 (registration / login.html).

  4. ==============================

    4.django에 초보자가되고 다소 오래 된 스레드를 넘어서 동적으로 (= 사용자 정의 기본값을 덮어 씁니다) 동적 인 문제에 대한 다른 해결책을 찾았습니다. 다음 param을 공유하고 싶습니다. (django 1.5와 잘 작동합니다. , 테스트되지 않은 이전 버전) :

    django에 초보자가되고 다소 오래 된 스레드를 넘어서 동적으로 (= 사용자 정의 기본값을 덮어 씁니다) 동적 인 문제에 대한 다른 해결책을 찾았습니다. 다음 param을 공유하고 싶습니다. (django 1.5와 잘 작동합니다. , 테스트되지 않은 이전 버전) :

    django-d는 반복과 커스텀 로그인 뷰를 피하고 싶었 기 때문에 django.contrib.auth.views.login-view를 사용했다.

    url(r'^login/$', 'django.contrib.auth.views.login', {'template_name': 'myapp/login.html',}, name='login'),
    

    내 urls.py 및 login.html-templates form-element 내 :

    {% if not next or not next.strip %}
      {# avoid django.contrib.auth.views.login s default of /account/profile/ #}
      {% url 'afterlogindefaultview' as next %}
    {% endif %}
    <input type="hidden" name="next" value="{{ next }}" />
    

    내 이해를 위해 뷰에서 URL 구성의 디커플링 관행을 따른다. 따라서 내 앱 로그인으로 리디렉션해야하는보기와 이후에 기본보기가 아닌보기로 이동하십시오. 나는 사용한다

    return HttpResponseRedirect('%s?next=%s' % (reverse('login'), reverse('mycustomnext')) )
    

    내가 어디 사용자가 로그인에 대한보기를 돌아가려면이 사용합니다.

  5. ==============================

    5.정적 리디렉션을 / loggedin /에 사용하고 URL을 올바른 리디렉션을 만드는보기에 연결할 수 있습니다.

    정적 리디렉션을 / loggedin /에 사용하고 URL을 올바른 리디렉션을 만드는보기에 연결할 수 있습니다.

    로그인은 추가 단계를 필요로하지만 장고의보기를 사용하려면 작업을 수행하십시오.

  6. ==============================

    6.자체 URL을 사용하여 로그인에 대한 자신 만의보기를 만들고 관리자의 것을 사용하지 마십시오. 세션에 다음 페이지를 저장하거나 GET 매개 변수로 로그인 뷰에 전달할 수 있습니다 (즉, / login? next = gallery) 리디렉션하기 전에 해당 값을 삭제하고 유효성을 검사하는 것을 잊지 마십시오.

    자체 URL을 사용하여 로그인에 대한 자신 만의보기를 만들고 관리자의 것을 사용하지 마십시오. 세션에 다음 페이지를 저장하거나 GET 매개 변수로 로그인 뷰에 전달할 수 있습니다 (즉, / login? next = gallery) 리디렉션하기 전에 해당 값을 삭제하고 유효성을 검사하는 것을 잊지 마십시오.

  7. from https://stackoverflow.com/questions/3441436/the-next-parameter-redirect-django-contrib-auth-login by cc-by-sa and MIT license