장고 : 로그인 후 이전 페이지로 리디렉션
로그인 기능이있는 간단한 웹 사이트를 여기에있는 것과 비슷합니다. 사용자는 익명 사용자로 사이트를 탐색 할 수 있어야하며 모든 페이지에 로그인 링크가 있습니다. 로그인 링크를 클릭하면 사용자가 로그인 양식으로 이동합니다. 로그인에 성공하면 사용자는 처음에 로그인 링크를 클릭 한 페이지로 되돌아 가야합니다. 어떻게 든 현재 페이지의 URL을 로그인 양식을 처리하는보기로 전달해야하지만 실제로는 작동하지 않을 것이라고 생각합니다.
편집 : 알아 냈습니다. 현재 페이지를 GET 매개 변수로 전달하여 로그인 양식에 연결 한 다음 '다음'을 사용하여 해당 페이지로 리디렉션했습니다. 감사!
편집 2 : 내 요청이 여기에 요청 된대로 내 설명이 명확하지 않은 것 같습니다 : 우리가 foo.html 페이지에 있고 로그인하지 않았다고 가정 해 봅시다. 이제 우리는 링크 된 foo.html에 링크를 갖고 싶습니다. login.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 개는 기본값 임). 그러면 각 요청에서 요청 오브젝트를 사용할 수 있습니다.
settings.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.html :
<a href="{% url django.contrib.auth.views.login %}?next={{request.path}}">Login</a>
현재 페이지를 가리키는 로그인 페이지에 GET 인수가 추가됩니다.
로그인 템플릿은 다음과 같이 간단 할 수 있습니다.
registration / login.html :
{% block content %}
<form method="post" action="">
{{form.as_p}}
<input type="submit" value="Login">
</form>
{% endblock %}
이것은 "모범 사례"가 아닐 수 있지만 이전에 이것을 성공적으로 사용했습니다.
return HttpResponseRedirect(request.META.get('HTTP_REFERER','/'))
매개 변수 / 값으로 전체 URL을 지원하려면 다음이 필요합니다.
?next={{ request.get_full_path|urlencode }}
그냥 대신 :
?next={{ request.path }}
Django의 내장 인증은 원하는 방식으로 작동합니다.
로그인 페이지에는 next
로그인 후 리턴 할 페이지 인 쿼리 문자열이 포함됩니다 .
http://docs.djangoproject.com/en/dev/topics/auth/#django.contrib.auth.decorators.login_required를 보십시오
현재 페이지를 GET 매개 변수로 전달하여 로그인 양식에 연결 한 다음 '다음'을 사용하여 해당 페이지로 리디렉션했습니다. 감사!
같은 문제가 발생했습니다. 이 솔루션을 사용하면 일반 로그인보기를 계속 사용할 수 있습니다.
urlpatterns += patterns('django.views.generic.simple',
(r'^accounts/profile/$', 'redirect_to', {'url': 'generic_account_url'}),
)
In registration/login.html
(nested within templates
folder) if you insert the following line, the page will render like Django's original admin login page:
{% include "admin/login.html" %}
Note: The file should contain above lines only.
See django docs for views.login(), you supply a 'next' value (as a hidden field) on the input form to redirect to after a successful login.
You can also do this
<input type="hidden" name="text" value="{% url 'dashboard' %}" />
참고URL : https://stackoverflow.com/questions/806835/django-redirect-to-previous-page-after-login
'Programing' 카테고리의 다른 글
HEAD와 마스터의 차이점 (0) | 2020.05.28 |
---|---|
Java로 사운드를 재생하려면 어떻게해야합니까? (0) | 2020.05.28 |
Enum의 values () 메서드에 대한 설명서는 어디에 있습니까? (0) | 2020.05.28 |
STL에서 실제로 deque는 무엇입니까? (0) | 2020.05.28 |
디렉토리를 비교하는 도구 (Windows 7) (0) | 2020.05.28 |