바뀜

둘러보기로 가기 검색하러 가기
2,564 바이트 추가됨 ,  2021년 6월 21일 (월) 13:49
새 문서: 유저들의 권한, 정보에 관한 것들. ==권한== {| class="wikitable" ! !일반 view 사용 !클래스형 view 사용 |- |로그인이 필요한 기능 |로그인이 필요...


유저들의 권한, 정보에 관한 것들.

==권한==
{| class="wikitable"
!
!일반 view 사용
!클래스형 view 사용
|-
|로그인이 필요한 기능
|로그인이 필요한 기능(함수) 위에 @login_required를 추가한다.<syntaxhighlight lang="python">
from django.contrib.auth.decorators import login_required

@login_required(login_url='common:login')
def 함수이름(request):
명령...

</syntaxhighlight>
|상속받을 클래스 이전에 첫 번째로 상속받게 한다.<syntaxhighlight lang="python">
from django.contrib.auth.mixins import LoginRequiredMixin

def 함수이름(LoginRequiredMixin, 상속받을 클래스):
명령...

</syntaxhighlight>
|}유저관련기능...

{% if user.is_authenticated %}

위 조건이 있으면 로그인 할 때만 실행된다.

일반 뷰에선 login_url로 로그인 페이지 지정이 가능하고, 클래스형 뷰에선 settins.py의

LOGIN_REDIRECT_URL = '/article/'

LOGIN_URL = '/user/login/'

따위를 지정하든가, login_url = settings.LOGIN_URL 변수를 오버라이딩 하면 된다.


@login_required와 Mixin은 내부적으로 requests.user.is_authenticated 값을 비교한다.

별도의 인증여부를 확인해야 하는 경우는 requests.user.is_authenticated를 그대로 가져다 쓰면 오류 없이 사용할 수 있다.


@login_required 는 클래스형 뷰에선 사용이 안된다.

클래스형 뷰엔 2가지 방식으로 적용할 수 있다.

LoginRequiredMixin을 상속하거나, @method_decorator(login_required, '메소드명') 형태로 클래스형 뷰 안의 메소드에 적용할 수 있다.


데코레이터.

데코레이터 파일을 만든 후,<syntaxhighlight lang="python">
def 데코레이터명(func):
def decorated(request, *args, **kwargs):
내용
return func(request, *args, **kwargs)
return decorated
</syntaxhighlight>import 해서 @method_decorator(데코레이터명, '메소드명') 형태로 적용할 수 있다.

적용할 데코레이터가 많으면 위에 리스트를 정의한 후, 데코레이터명 대신 리스트를 넣으면 리스트 안의 데코레이터를 한번에 적용할 수 있다.

==로그인 관련==
{| class="wikitable"
!
!설명
!코드
|-
|유저 인증
|인증 정보를 객체에 담는다.
|from django.contrib.auth import authenticate
객체 = authenticate(username=name, password=password)
|-
|로그인
|
|from django.contrib.auth import login
login(request, 위에서의객체)
|-
|로그아웃
|
|from django.contrib.auth import logout
logout(request)
|}

둘러보기 메뉴