Django : 로그인 페이지에서 로그인 한 사용자 리디렉션
사용자가 /login
페이지를 방문하고 이미 로그인되어있는 경우 홈페이지로 리디렉션 되도록 사이트를 설정하고 싶습니다 . 로그인하지 않은 경우 정상적으로 표시됩니다. 로그인 코드가 Django에 내장되어 있기 때문에 어떻게해야합니까?
현재 기본 제공 로그인보기를 사용하고 있다고 가정합니다.
(r'^accounts/login/$', 'django.contrib.auth.views.login'),
또는 URL에서 비슷한 것.
기본 로그인보기를 래핑하는 고유 한 로그인보기를 작성할 수 있습니다. 사용자가 이미 로그인되어 있는지 확인하고 로그인 한 경우 리디렉션하고 그렇지 않으면 기본보기를 사용합니다.
같은 것 :
from django.contrib.auth.views import login
def custom_login(request):
if request.user.is_authenticated():
return HttpResponseRedirect(...)
else:
return login(request)
물론 그에 따라 URL을 변경하십시오.
(r'^accounts/login/$', custom_login),
장고 1.10 방식
2016 년 8 월에 출시 된 Django 1.10의 경우 [1] 에 redirect_authenticated_user
있는 login()
함수 기반 뷰에 이름 이 지정된 새 매개 변수 가 추가되었습니다 django.contrib.auth
.
예
파일 이름이 .txt views.py
이고 다른 파일 이있는 Django 애플리케이션이 있다고 가정 합니다 urls.py
. urls.py
파일은 다음과 같은 몇 가지 파이썬 코드를 포함합니다 :
#
# Django 1.10 way
#
from django.contrib.auth import views as auth_views
from . import views as app_views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^login/', auth_views.login, name='login',
kwargs={'redirect_authenticated_user': True}),
url(r'^dashboard/', app_views.Dashboard.as_view(), name='dashboard'),
url(r'^$', TemplateView.as_view(template_name='index.html'), name='index'),
]
해당 파일에서 urlpatterns
변수 정의 내의 관련 부분 은 다음과 같으며 이미 언급 된 redirect_authenticated_user
매개 변수를 True
값 과 함께 사용합니다 .
url(r'^login/', auth_views.login, name='login',
kwargs={'redirect_authenticated_user': True}),
redirect_authenticated_user
매개 변수 의 기본값 은 False
입니다.
장고 1.11 방식
2017 년 4 월에 출시 된 Django 1.11의 경우 LoginView
클래스 기반 뷰가 login()
함수 기반 뷰 [2]를 대체하여 선택할 수있는 두 가지 옵션을 제공합니다.
- 이전에 설명한 것과 동일한 Django 1.10 방식을 사용 하십시오. 현재 코드가 계속 정상적으로 작동하기 때문에 긍정적입니다. 예를 들어 콘솔 터미널에서
python -Wd manage.py runserver
Django 프로젝트 디렉토리 의 명령을 실행 한 다음 웹 브라우저를 사용하여 로그인 페이지로 이동하여 Python 인터프리터에 경고를 표시 하도록 지시하면 동일한 콘솔 터미널에서 다음과 같은 경고 메시지를 볼 수 있습니다.
/usr/local/lib/python3.6/site-packages/django/contrib/auth/views.py:54 : RemovedInDjango21Warning : login () 뷰는 클래스 기반 LoginView ()로 대체됩니다.
- new를 사용하면
Django 1.11 way
코드가 더 현대적이고 향후 Django 릴리스와 호환됩니다. 이 옵션을 사용하면 이전에 제공된 예제는 이제 다음과 같습니다.
예
다시 한 번 이름이라는 파일 views.py
과 다른 파일 이있는 Django 애플리케이션이 있다고 가정합니다 urls.py
. urls.py
파일은 다음과 같은 몇 가지 파이썬 코드를 포함합니다 :
#
# Django 1.11 way
#
from django.contrib.auth import views as auth_views
from . import views as app_views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^login/',
auth_views.LoginView.as_view(redirect_authenticated_user=True),
name='login'),
url(r'^dashboard/', app_views.Dashboard.as_view(), name='dashboard'),
url(r'^$', TemplateView.as_view(template_name='index.html'), name='index'),
]
해당 파일에서 urlpatterns
변수 정의 내의 관련 부분 은 다음과 같습니다.이 부분 은 이미 언급 된 redirect_authenticated_user
매개 변수를 True
값 과 함께 다시 사용 하지만 클래스 의 as_view
메서드에 인수로 전달합니다 LoginView
.
url(r'^login/',
auth_views.LoginView.as_view(redirect_authenticated_user=False),
name='login'),
여기에서 redirect_authenticated_user
매개 변수 의 기본값 도 False
입니다.
참고 문헌
- [1] https://docs.djangoproject.com/en/dev/releases/1.10/#django-contrib-auth의 Django 1.10 릴리스 노트의 관련 섹션
- [2] https://docs.djangoproject.com/en/1.11/releases/1.11/#django-contrib-auth의 Django 1.11 릴리스 노트의 관련 섹션
anonymous_required 데코레이터
클래스 기반보기
암호:
from django.shortcuts import redirect
def anonymous_required(func):
def as_view(request, *args, **kwargs):
redirect_to = kwargs.get('next', settings.LOGIN_REDIRECT_URL )
if request.user.is_authenticated():
return redirect(redirect_to)
response = func(request, *args, **kwargs)
return response
return as_view
용법:
url(r'^/?$',
anonymous_required(auth_views.login),
),
url(r'^register/?$',
anonymous_required(RegistrationView.as_view()),
name='auth.views.register'
),
# Could be used to decorate the dispatch function of the view instead of the url
보기 기능
에서 http://blog.motane.lu/2010/01/06/django-anonymous_required-decorator/
암호:
from django.http import HttpResponseRedirect
def anonymous_required( view_function, redirect_to = None ):
return AnonymousRequired( view_function, redirect_to )
class AnonymousRequired( object ):
def __init__( self, view_function, redirect_to ):
if redirect_to is None:
from django.conf import settings
redirect_to = settings.LOGIN_REDIRECT_URL
self.view_function = view_function
self.redirect_to = redirect_to
def __call__( self, request, *args, **kwargs ):
if request.user is not None and request.user.is_authenticated():
return HttpResponseRedirect( self.redirect_to )
return self.view_function( request, *args, **kwargs )
용법:
@anonymous_required
def my_view( request ):
return render_to_response( 'my-view.html' )
사용자가 이미 로그인 한 경우 / home으로 리디렉션하려면 로그인보기 위에이 데코레이터를 추가하세요.
@user_passes_test(lambda user: not user.username, login_url='/home', redirect_field_name=None)
그리고 데코레이터를 가져 오는 것을 잊지 마세요
from django.contrib.auth.decorators import user_passes_test
Django 2.x의 경우 urls.py에서 :
from django.contrib.auth import views as auth_views
from django.urls import path
urlpatterns = [
path('login/', auth_views.LoginView.as_view(redirect_authenticated_user=True), name='login'),
]
클래스 기반 뷰 (CBV)가 증가하고 있기 때문 입니다. 이 접근 방식은 인증되지 않은 사용자에 대해서만보기에 액세스 할 때 다른 URL로 리디렉션하는 데 도움이됩니다.
내 예 에서 방법을 재정의하는 가입 페이지 dispatch()
.
class Signup(CreateView):
template_name = 'sign-up.html'
def dispatch(self, *args, **kwargs):
if self.request.user.is_authenticated:
return redirect('path/to/desired/url')
return super().dispatch(*args, **kwargs)
건배!
I know this is a pretty old question, but I'll add my technique in case anyone else needs it:
myproject/myapp/views/misc.py
from django.contrib.auth.views import login as contrib_login, logout as contrib_logout
from django.shortcuts import redirect
from django.conf import settings
def login(request, **kwargs):
if request.user.is_authenticated():
return redirect(settings.LOGIN_REDIRECT_URL)
else:
return contrib_login(request, **kwargs)
logout = contrib_logout
myproject/myapp/urls.py
from django.conf.urls import patterns, url
urlpatterns = patterns('myapp.views.misc',
url(r'^login/$', 'login', {'template_name': 'myapp/login.html'}, name='login'),
url(r'^logout/$', 'logout', {'template_name': 'myapp/logout.html'}, name='logout'),
)
...
Assuming that you are done setting up built-in Django user authentication (and using decorators), add this in your settings.py:
LOGIN_REDIRECT_URL = '/welcome/'
NOTE: '/welcome/' here is the URL of the homepage. It is up to you what to replace it with.
All you have to do is set the "root" url to the homepage view. Since the homepage view is already restricted for logged on users, it'll automatically redirect anonymous users to the login page.
Kepp the url as it is. And add something like:
(r'^$', 'my_project.my_app.views.homepage'),
참고URL : https://stackoverflow.com/questions/2320581/django-redirect-logged-in-users-from-login-page
'code' 카테고리의 다른 글
Swift에서 클래스 레벨 함수를 어떻게 선언합니까? (0) | 2020.11.26 |
---|---|
툴바 이미지 중앙 (0) | 2020.11.26 |
Mac 애플리케이션의 NSUserDefaults 데이터는 어디에 저장됩니까? (0) | 2020.11.26 |
PowerShell의 변수 범위 지정 (0) | 2020.11.26 |
Android Studio-외부 라이브러리 / Jar 가져 오기 (0) | 2020.11.26 |