본문 바로가기
App Programming/Django

[Django] 시리얼라이저 (Serializer)

by goatlab 2023. 2. 22.
728x90
반응형
SMALL

시리얼라이저 (Serializer)

 

Serializer는 Django에서 사용하는 파이썬 객체나 queryset 같은 복잡한 객체들을 REST API에서 사용할 JSON과 같은 형태로 변환해주는 어댑터 역할을 한다. 쿼리셋, 모델 인스턴스 등의 complex type (복잡한 데이터)를 JSON, XML등의 컨텐트 타입으로 쉽게 변환 가능한 python datatype으로 변환시켜 준다.

 

Deserialize은 받은 데이터 (크롤링시 parse 사용  python datatype)를 validating한 후에 parsed data를 complex type으로 다시 변환한다.

 

serializer.py

 

users 프로젝트에 serializer.py를 생성한다.

 

from rest_framework import serializers
from users.models import User

class UserSerializer(serializer.ModelSerializer):
	class Meat:
    	model = User
        fields = (
        	'pk',
            'email'
            'Username',
            'profile',
            'description',
            'password',
            'updated'
            )
            extra_kwargs = {
            	'password': {
                	'wrtie_only': True
                 }
            }
            
    def create(self, validated_data):
    	return User.objects.create_user(**validated_data)

 

views.py

 

users 프로젝트에서 인증 요청을 처리하고 응답하기 위한 views.py를 다음과 같이 작성한다.

 

# django modules
from django.contrib.auth import authenticate
from django.contrib.auth import login

# drf modules
from rest_framework import status
from rest_framework.response import Response
from rest_framework.viewsets import ModelViewSet
from rest_framework.permissions import AllowAny

# models
from user.models import User

# serializers
from users.serializers import UserSerializer

class AuthViewSet(ModelViewSet):
    serializer_class = UserSerializer
    permissions_classes = [AllowAny]
    authentication_classes = []
    
    def signup(self, request):
    	serializer = self.get_serializer(data = request.data)
        serializer.is_valid()
        user = serializer.save()
        login(request, user)
        
        return Response(
        	serializer.data,
        	status = status.HTTP_201_CREATED
        )

 

urls.py

 

users 프로젝트에서 메소드와 url을 연결하기 위한 urls.py를 작성한다.

from django.urls import path
from .views import (
	AuthViewSet
)

signup = AuthViewSet.as_view({
	'post': 'signup'
})

urlpatterns = [
	path('/signup', signup)
]

 

그 다음 service 프로젝트의 urls.py를 다음과 같이 작성한다.

 

from django.contrib import admin
from django.urls import path
from django.urls import include

urlpatterns = [
	path('admin/', admin.site.urls),
	path('users', include('users.urls')),
]

 

 

 

데이터베이스에 반영하기 위해 쉘에서 다음을 수행한다.

 

/code/service # python manage.py makemigrations

 

projcect-db만 네트워크에 연결되어 있기 때문에 project-01도 같이 연동하기 위하여 project 폴더에서 쉘로 docker network하고 migrate를 한다.

 

docker network ls
docker network inspect project
docker network connect project project-01
/code/service # python manage.py migrate

 

그 다음, localhost의 8000번에서 서버를 실행한다.

 

/code/service # python manage.py runserver 0.0.0.0:8000

 

Postman

 

https://ko.wikipedia.org/wiki/%ED%8F%AC%EC%8A%A4%ED%8A%B8%EB%A7%A8_(%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4)

 

REST API 설계 개발, 테스팅을 할 수 있는 GUI 툴로 개발 생산성을 높여주는 프로그램이다. https://www.postman.com/에서 각 OS에 맞는 버전을 다운로드하여 실행한다.

 

 

Collections에서 project를 생성하고 Add request를 누르고 http://localhost:9998/users/signup으로 입력한다. 데이터를 전송하기 위해 POST로 바꾸고 JSON의 형태로 전송한다.

 

728x90
반응형
LIST

'App Programming > Django' 카테고리의 다른 글

[Django] User Logout  (0) 2023.03.09
[Django] 프론트엔드 페이지  (0) 2023.02.22
[Django] REST API  (0) 2023.02.21
[Django] 프로젝트 생성  (0) 2023.02.20
[Django] 기본 요소 (2)  (0) 2023.02.20