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

Requirement


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

  • AuthUser에 연결된 작업 만들기



    전회 유아의 먹기 흩어져 같은 쓰레기 API를 대량 생산해 버렸으므로, 여기저기서 탄탄한 것을 만들어 봅시다.

    설계 방침은 Tutorials 3에서 만든 태스크와 사용자의 그것에 가까운 것을 만드는 것입니다.

    절차를 충분히 생각하면
  • AuthUser 에 부착된 TaskTodoItemAsAuthUser 관련 클래스 만들기
  • 로그인을 통한 제한 기능 구현
  • 로그인 한 사용자의 작업 생성 API


  • 의 2개 서가 됩니다.

    그러나 먼저 Swagger에서 디버깅하는 방법을 생각해야합니다. 라는 것으로 앞서 이쪽인가 접해 갑니다.

    Swagger에서 로그인 확인




    Django Login 의 문자가 보이네요. 이것이 로그인을 하기 위한 설정입니다.

    이것을 클릭하면 로그인 화면이 뭐야! 라고 화를 낸다. 우선 로그인하려면 localhost:8000/admin 에서 로그인을 하고 거기에서 다시 localhost:8000/swagger 화면으로 돌아가야 합니다.



    AuthUser 로그인이 필요한 API 만들기



    모델 만들기



    뇌사로 models/todoItemAsAuth.py를 만듭니다.
    from django.db import models
    from .authUser import AuthUser
    
    
    # Create your models here.
    class TodoItemAsAuth(models.Model):
        owner = models.ForeignKey(AuthUser,
                                  to_field='username',
                                  on_delete=models.CASCADE)
        todo_name = models.CharField(max_length=100)
        todo_text = models.TextField(blank=True, null=True)
        dead_line = models.DateTimeField()
        raise_date = models.DateTimeField(auto_now_add=True)
        importance = models.IntegerField(null=True)
        close_date = models.DateTimeField(blank=True, null=True)
    
        def __str__(self):
            return "{}-{}".format(self.owner, self.todo_name)
    
        class Meta:
            ordering = ('dead_line', 'raise_date')
    

    admin에서 확인할 수 있도록 admin.py도 작성합니다.
    # ...
    from .models.todoItemAsAuth import TodoItemAsAuth
    
    # ...
    admin.site.register(TodoItemAsAuth)
    admin.site.register(AuthUser, UserAdmin)
    

    Serializer 만들기



    이쪽도 아무것도 생각하지 않고 쓰고 있습니다. 유일한 차이점은 ReadOnlyField 라는 수수께끼의 user 가 있다는 것입니다만, 지금은 신경쓰지 말아 주세요.
    # ...
    from draft_todo.models.todoItemAsAuth import TodoItemAsAuth
    
    
    # ...
    class TaskAuthAsAuthUserCreateSerializer(ModelSerializer):
        user = serializers.ReadOnlyField(source='authuser.username')
    
        class Meta:
            model = TodoItemAsAuth
            fields = ['owner', 'todo_name', 'todo_text', 'dead_line']
    

    View 만들기


    class TaskAuthUserCreateTodoItemAPIView(LoginRequiredMixin, CreateAPIView):
        queryset = TodoItemAsAuth.objects.all()
        serializer_class = TaskAuthAsAuthUserCreateSerializer
    
        def perform_create(self, serializer):
            serializer.save(owner=self.request.user)
    

    LoginRequiredMixin 에 대해서는 공식 를 참고해 주세요.

    이번에는 self.request.user에 사용자의 정보가 느낌에 포함되어 있다는 것을, 그것을 사용하여 serializer가 작동한다는 것을 알 수 있으면 충분합니다.

    (그러나 이것, 노력하면 위장할 수 있을 것 같은 만들기를 하고 있으므로 약간 불안 재료가 남아 있네요.실제로, 어떨까요)

    URL 만들기


    urls.py 를 편집하십시오.
    urlpatterns = [
           # ...
           path('draft_authuser/create_task',
             dview.TaskAuthUserCreateTodoItemAPIView.as_view(),
            name='dact'),
    ]
    

    Swagger로 확인



    Swagger에서 확인하면 로그인시 작업을 추가 할 수 있음을 알 수 있습니다. ( ) 로그인하지 않으면 다른 화면으로 건너 뜁니다. 이것은 LoginRequiredMixin의 기능입니다.



    Admin에서 확인하면 확실히 추가되었음을 알 수 있습니다.



    이번에는 이런 느낌으로 짧게 끝내자. 수고하셨습니다.

    Tips



    LoginRequiredMixin을 함수처럼 쓰면 어떻게 될까?



    공식 에 있는 것처럼, @method_decorator(login_required) 가 됩니다.

    backlog



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

    리포지토리

    목차



    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)

    좋은 웹페이지 즐겨찾기