prosource

장고: 로그인 후 이전 페이지로 리디렉션

probook 2023. 6. 17. 09:27
반응형

장고: 로그인 후 이전 페이지로 리디렉션

저는 여기 SO에 있는 것과 매우 유사한 로그인 기능을 가진 간단한 웹 사이트를 구축하려고 합니다.사용자는 익명 사용자로 사이트를 검색할 수 있어야 하며 모든 페이지에 로그인 링크가 있습니다.로그인 링크를 클릭하면 로그인 양식으로 이동합니다.성공적으로 로그인한 후 사용자는 처음에 로그인 링크를 클릭했던 페이지로 다시 이동해야 합니다.로그인 양식을 처리하는 보기에 현재 페이지의 URL을 어떻게든 전달해야 할 것 같은데 제대로 작동이 되지 않습니다.

에디트: 알아냈어요.현재 페이지를 GET 매개 변수로 전달하여 로그인 양식에 연결한 다음 '다음'을 사용하여 해당 페이지로 리디렉션했습니다.감사합니다!

편집 2: 제 설명이 명확하지 않은 것 같아서 요청하신 대로 제 코드가 있습니다.우리가 foo.html 페이지에 있고 로그인하지 않았다고 가정해 보겠습니다.이제 우리는 login.html에 연결되는 foo.html 링크를 원합니다.여기서 로그인한 다음 foo.html로 다시 리디렉션할 수 있습니다.foo.html의 링크는 다음과 같습니다.

      <a href='/login/?next={{ request.path }}'>Login</a> 

다음과 같은 사용자 정의 로그인 보기를 작성했습니다.

def login_view(request):
   redirect_to = request.REQUEST.get('next', '')
   if request.method=='POST':
      #create login form...
      if valid login credentials have been entered:
         return HttpResponseRedirect(redirect_to)  
   #...
   return render_to_response('login.html', locals())

login.html의 중요한 행:

<form method="post" action="./?next={{ redirect_to }}">

그래서 네, 그것은 거의 다입니다, 그것이 확실히 하기를 바랍니다.

기능이 이미 내장되어 있으므로 추가 보기를 만들 필요가 없습니다.

먼저 로그인 링크가 있는 각 페이지는 현재 경로를 알아야 하며, 가장 쉬운 방법은 요청 컨텍스트 프리프로서를 settings.py 에 추가하는 것입니다(첫 번째 4개는 기본값입니다). 그러면 요청 개체를 각 요청에서 사용할 수 있습니다.

설정.py:

TEMPLATE_CONTEXT_PROCESSORS = (
    "django.core.context_processors.auth",
    "django.core.context_processors.debug",
    "django.core.context_processors.i18n",
    "django.core.context_processors.media",
    "django.core.context_processors.request",
)

그런 다음 로그인 링크를 원하는 템플릿을 추가합니다.

base.base:

<a href="{% url django.contrib.auth.views.login %}?next={{request.path}}">Login</a>

현재 페이지를 가리키는 GET 인수를 로그인 페이지에 추가합니다.

그러면 로그인 템플릿은 다음과 같이 간단해질 수 있습니다.

등록/문서 번호:

{% block content %}
<form method="post" action="">
  {{form.as_p}}
<input type="submit" value="Login">
</form>
{% endblock %}

매개 변수/값이 포함된 전체 URL을 지원하려면 다음과 같이 하십시오.

?next={{ request.get_full_path|urlencode }}

다음과 같은 것이 필요합니다.

?next={{ request.path }}

이는 "최상의 작업 방식"은 아닐 수도 있지만, 이전에 성공적으로 사용한 적이 있습니다.

return HttpResponseRedirect(request.META.get('HTTP_REFERER','/'))

장고의 내장 인증은 당신이 원하는 방식으로 작동합니다.

로그인 페이지에는 다음이 포함됩니다.next쿼리 문자열 - 로그인 후 반환할 페이지입니다.

http://docs.djangoproject.com/en/dev/topics/auth/ #django.dll.auth.adminators.dll_required를 확인합니다.

현재 페이지를 GET 매개 변수로 전달하여 로그인 양식에 연결한 다음 '다음'을 사용하여 해당 페이지로 리디렉션했습니다.감사합니다!

저도 같은 문제에 직면했습니다.이 솔루션을 사용하면 일반 로그인 보기를 계속 사용할 수 있습니다.

urlpatterns += patterns('django.views.generic.simple',
    (r'^accounts/profile/$', 'redirect_to', {'url': 'generic_account_url'}),
)

registration/login.html((으)로 templates행을 페이지folder)와 같은 .

{% include "admin/login.html" %}

참고: 파일에는 위의 행만 포함되어야 합니다.

views.login()은 django 문서를 참조하십시오. 성공적인 로그인 후 리디렉션할 입력 양식의 '다음' 값(숨김 필드)을 제공합니다.

이 작업도 수행할 수 있습니다.

<input type="hidden" name="text" value="{% url 'dashboard' %}" />

언급URL : https://stackoverflow.com/questions/806835/django-redirect-to-previous-page-after-login

반응형