Django Rest Framework 2.x 튜토리얼 (6)

Requirement


  • Python > 3.6
  • Mac or Linux (recommend)
  • SQLite3

  • 로그인 처리 주위의 구현을 실시한다



    로그인을 구현하는 간단한 방법은 이를 위한 라이브러리를 이용하는 것입니다. 서투르게 스스로 실장하려고 하면 프레임워크를 공부하지 않으면 안 되므로, 납기가 짧은 경우 뭔가는 이런 잡한 방법으로 해결하지 않으면 안됩니다.
    pip install django-rest-auth
    

    settings.py
    # ...
    
    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'livesync',
        'rest_framework',
        'drf_yasg',
        'draft_todo.apps.DraftTodoConfig',
        'rest_framework.authtoken'
    ]
    
    #...
    

    urls.py
    # ...
    import rest_auth
    
    
    # ...
    
    urlpatterns = [
        # ...
        path('rest-auth', include('rest_auth.urls'))
    ]
    
    python manage.py migrate
    python manage.py runserver
    

    Swagger로 확인해보기



    만든 사용자로 로그인해 봅시다.




    사용자의 정보를 보자.



    작업을 추가해 봅시다.



    그건 그렇고, 페이지를 다시로드하면 로그인 정보가 업데이트됩니다.



    admin에서 확인해보기



    admin에서 Tokens를 확인해 봅시다.



    작업이 추가되었는지 확인해 봅시다.



    accounts/login 구현



    로그인하지 않은 상황에서 작업을 추가하려고하면 어떻게됩니까? LoginRequiredMixin 는 간단한 해결책으로 accounts/login 로 페이지를 전환하려고 합니다.

    이것은 rest framework 로서는 매우 기쁘지 않은 사양입니다. 따라서 이것을 덮어 봅시다.

    draft_todo/views.py
    # ...
    from rest_framework.decorators import api_view
    from rest_framework import status
    
    
    # ...
    @api_view(['GET'])
    def not_authorized(request):
        return Response(status=status.HTTP_401_UNAUTHORIZED , data='NotAuthenticated')
    

    urls.py
    # ...
    
    urlpatterns = [
        # ...
        path('accounts/login/', dview.not_authorized)
    ]
    

    이것은 Get method 로 accounts/login/ 에 액세스가 있으면, 무엇이든 401 코드(너 로그인 할 수 있어요)를 돌려주는 API입니다.

    그런데 이 녀석은 지금까지의 API를 쓰는 방법과는 달리, 아무래도 함수같지요. 이것은 Django의 View를 쓰는 방법이 또 하나, 함수 베이스의 정의 방법입니다. 이것이 있기 때문에 장고는 팀 개발을 원하지 않습니다.

    @ api_view 는 get 메소드의 함수임을 나타냅니다. 나중에 함수이므로 이해하십시오. 그렇지 않으면 Python에 익숙하지 않을 수 있으므로 다른 언어로 RESTful API를 개발하십시오.

    Swagger에서 확인하면 다음과 같습니다.



    Next Step?



    우선 이것만 움직이면 뒤는 기분으로 해결할 수 있다고 생각합니다.
    뭔가 문제가 있으면 저장소의 issue를 설정하십시오.

    Tips



    인증 주위에는 어떤 종류가 있습니까? 그리고 어느 것이 추천?



    Django Rest Framework에는 이 목록에 있는 인증 방법과 django-rest-auth에 있는 것과 같은 Social Authentication(Twitter 인증 등)이 있습니다.

    개인적으로는 Session Authentication 가 아무것도 생각하지 않고 손에 익숙해져 있기 때문에 좋아합니다만, 빌어 먹을 자일 개발이라고 하고 있으면 팀의 불종이 되기 때문에, Basic 인증이 편하지 않을까요. 다만 당연히 HTTPS화가 추천이므로, 그 점만 조심할 필요가 있을 것 같네요.

    (라고 할까 인증 주위 자체 팀 개발의 화종인 것은…?)

    backlog



    이 상태의 데이터는이 리포지토리의 release v0.1.6에 있습니다.

    리포지토리

    목차



    Django Rest Framework 2.x 튜토리얼 (0)
    Django Rest Framework 2.x 튜토리얼 (1)
    Django Rest Framework 2.x 튜토리얼 (2)
    Django Rest Framework 2.x 튜토리얼 (3)
    Django Rest Framework 2.x 튜토리얼 (4)
    Django Rest Framework 2.x 튜토리얼 (5)
    Django Rest Framework 2.x 튜토리얼 (6)

    좋은 웹페이지 즐겨찾기