본문 바로가기
source-code/Django

Django REST Framework _ 인증 기능 구현하기

by mattew4483 2021. 1. 25.
728x90
반응형

모든 웹 API에서 빼놓을 수 없는 인증 기능.

우리의 친절한 DRF에서는 이러한 인증 기능을 쉽게 사용할 수 있는 도구들을 만들어뒀다.

 

www.django-rest-framework.org/tutorial/4-authentication-and-permissions/

 

4 - Authentication and permissions - Django REST framework

Currently our API doesn't have any restrictions on who can edit or delete code snippets. We'd like to have some more advanced behavior in order to make sure that: Code snippets are always associated with a creator. Only authenticated users may create snipp

www.django-rest-framework.org

공식 문서의 Authentication and permissions 챕터를 차근차근 따라가 볼 예정.


아차차. 그전에 인증 기능이 도대체 뭔지 정확히 짚고 넘어가자.

우리가 구현하고 싶은 건...

- 각 Post는 작성한 User와 연결되어 있다.

- 로그인 한 User만 Post 작성이 가능하다. 그렇지 않으면 Post 읽기만 가능!

- 로그인 한 User는 자신이 작성한 Post만 수정 및 삭제가 가능하다.

그렇구만!

 

1. model 수정

models.py

제일 먼저 Post모델에 작성자인 owner란 필드를 추가해주자.

우선 django의 기본 User모델을 사용했으며, ForeignKey로 다대일 관계를 맺어주었다.

related_name을 통해 이후 역참조 시 Post를 찾을 수 있도록!

 

2. serializer 작성

User를 담당할 serializer도 작성해주자.

 

serializer.py

쨔잔. 이를 통해 UserSerializer에는 얘가 작성한 post도 담기게 되었다.

여기서 근데 PostSerializer를 작성할 때처럼 그냥 Meta 클래스에 model과 fields만 지정해주면 안 되는 것?

당연히 안 된다! Post는 현재 User와 역참조 관계!

따라서 Meta 클래스에서 model = User를 지정하더라도 post를 찾아오지 못한다.

 

때문에 post = serializers.PrimaryKeyRelatedField(many=Truequeryset=Post.objects.all())를 통해

related_name으로 지정해 준 post를 찾도록 해 준 것!

 

3. view 작성

views.py

User에 대한 list와 detail을 보여줄 UserList와 UserDetail을 작성!

 

ListAPIView와 RetrieveAPIView는... 지난 글↓을 참고하자.

2021/01/22 - [django] - Django Rest Framework _ APIView 사용하기

 

Django Rest Framwork _ APIView 사용하기

지난번에는 @api_view를 통해 DRF에서 함수형 뷰를 작성해보았다. 오늘은 APIView를 상속받아 클래스형 뷰를 작성해보자! 1. 모델 생성 기존과 똑같다! 2. Serializer 생성 둘 다 똑같다 ! 3. view 작성 views.py

23life.tistory.com

4. url 작성

urls.py

url에도 UserList와 UserDetail을 추가해주자.

 

그 후 runserver를 돌리면...!

http://127.0.0.1:8000/api/user/

쨔잔. User에 대한 list 데이터가 잘 나옴을 확인할 수 있다.

Serializer의 field로 지정해줬던 Post에 대한 정보 역시 잘 나온다!

지금은 createsuperuser로 만든 관리자 계정 유저만 존재.

 

http://127.0.0.1:8000/api/user/1

User의 id를 url에 담아서 보내주면... 이렇게 detail도 잘 나옴을 확인할 수 있다. 얏호!

728x90
반응형