drf 12

[DRF] CORS에러 처리하기

얼마전 면접을 봤던 회사에서 CORS를 처리한 경험을 말해달라고 했다. CORS에 대해서 간략하게만 알고 있었고, Django에서는 프론트엔드와 백엔드가 분리되어 있지 않다보니 CORS 에러를 경험하지 못했고, 제대로 된 답변을 하지 못했다. 탈탈털린 경험을 바탕으로 오늘은 CORS에 대해서 정리해보고자 한다. ✅ CORS란? CORS란 Cross-Origin Resource Sharing의 약자로, 의미 그대로 서로 다른 출처에서 리소스를 공유하는 것을 CORS라고 한다. CORS는 출처가 다른 자원들을 공유한다는 뜻으로 한 출처에 있는 자원에서 다른 출처에 있는 자원에 접근하도록 하는 개념이다. 하지만 CORS를 위해서는 별도의 설정이 필요하다. 필요한 설정을 하지 않은 채 서로 다른 출처에서 리소스..

Python/DRF 2023.03.29

[DRF] 이론 정리(Serializer, REST API)

✅ DRF(Django Rest Framework)와 Django 차이점이 뭔데? Django로 프로젝트를 진행하다가 DRF를 사용해보면서 이해가 안됐던 점들이 많다. 지금은 어느정도 사용법에 익숙해진 느낌이지만 이론적인 부분을 정확하게 짚고 넘어가고자 차이점을 비교해보고자 한다. ✅ DRF(Django REST Framework) Django는 프론트엔드와 백엔드를 모두 처리해주는 풀스택 프레임워크이다. 프로젝트에 적용한걸 예시로 들어보면 @login_required def create(request): form = QuestionForm(request.POST or None, request.FILES or None) if form.is_valid(): temp = form.save(commit=Fal..

Python/DRF 2023.03.28

[AWS] IAM 이란?

프로젝트를 하면서 백엔드 부분 배포를 담당하게 됐다. 간단할 줄 알았던 배포에 3일이라는 시간을 쏟으면서 어느 한 부분을 놓치고 있다는 생각이 들었고, 놓친 부분을 확인하기 위해 전체적인 흐름에 대한 파악이 중요하다고 느껴 블로그에 정리하면서 공부해보고자 한다. ✅ IAM 이란? IAM(AWS Identity and Access Management)은 AWS 리소스에 대한 엑세스를 안전하게 제어할 수 있는 웹 서비스이다. 키 모양의 그림에서도 알 수 있듯이, IAM을 사용해 리소스를 사용하도록 인증 및 권한 부여된 대상을 제어할 수 있다. AWS 서비스에서는 어떠한 요청을 처리하기 전에 자격 증명에 대한 것을 IAM에 보내게 되는데 IAM에서는 해당 자격 증명을 보고 유저가 올바른 유저인지(인증), 유저..

AWS 2023.03.06

[DRF] retrieve 메서드와 router 변수 사용하기

# APIvew와 ViewSet으로 Response하기 [DRF] DB에 저장된 데이터를 APIview와 ViewSet으로 Response하기 Django REST Framework에서 views.py 파일은 API 엔드포인트를 처리하는 함수를 정의하는 곳이다. 기본적으로 DRF에서 제공하는 APIview나 ViewSet 클래스를 상속하여 사용하며, 각 클래스는 HTTP 요청 메서드(GE emhaki.tistory.com 이전에 포스팅했던 내용의 확장으로 News 리스트를 출력하고 detail페이지까지 넘겨주는 방법에 대해 정리해보고자 한다. 🔎 views.py class NewsViewSet(viewsets.ModelViewSet): queryset = News.objects.all() serializ..

Python/DRF 2023.02.18

[DRF] DB에 저장된 데이터를 APIview와 ViewSet으로 Response하기

Django REST Framework에서 views.py 파일은 API 엔드포인트를 처리하는 함수를 정의하는 곳이다. 기본적으로 DRF에서 제공하는 APIview나 ViewSet 클래스를 상속하여 사용하며, 각 클래스는 HTTP 요청 메서드(GET, POST, PUT, DELETE)에 대한 처리 함수를 가지고 있다. DB에 저장된 데이터를 출력하는 방법을 살펴보기전에 views.py의 기본적인 구조는 다음과 같다. 🔎 views.py from rest_framework.views import APIView from rest_framework.response import Response class MyView(APIView): def get(self, request): # GET 요청 처리 # 결과 데이..

Python/DRF 2023.02.17

[DRF] 게시판에 Authentication과 Permission 적용하기

게시판을 작성하는데 있어서 유저가 로그인이 되어있는지 아닌지를 구별해줄 필요성이 있다. 익명 게시판이 아닌경우에는 글을 작성하는 사용자가 로그인 상태인지를 확인해야 하는데 이때 사용하는 개념이 authentication과 permission이다. ✅ Authentication 먼저 authentication에 대해 먼저 알아보면 authentication은 인증이라는 뜻으로 특정 서비스를 사용하는 데 있어 사용자의 신원(회원/비회원/관리자 등)을 확인하는 절차를 의미한다. 즉, user의 id와 password를 확인하는 것이라고 생각할 수 있다. Django의 REST Framework authentication의 종류로는 크게 5가지가 있다. 1. BasicAuthentication HTTP 제어 h..

Python/DRF 2023.01.29

[DRF] 게시판 기능(CRUD) 구현하기

이전에 ViewSets을 하면서 models.py에 아래와 같이 title과 body field를 생성했었다. from django.db import models from django.conf import settings # Create your models here. class Blog(models.Model): title = models.CharField(max_length=100) body = models.TextField() 하지만 블로그에는 이보다 더 많은 기능이 필요하기 때문에 기능을 더 추가하는 코드를 작성해보고자 한다. 게시글의 id값, 제목, 작성일, 작성자, 본문을 추가하는 코드는 다음과 같다. ✅ models.py from django.db import models from djang..

Python/DRF 2023.01.17

[DRF] 커스텀 유저 구현하기(회원가입/로그인)

Django에서는 기본적으로 사용자 모델인 User 모델을 제공하고 있다. 하지만 임의로 원하는 필드(Nickname, birthday 등)을 가진 사용자 모델을 사용하기 위해서는 custom user 모델을 구현해야 한다. custom user 모델을 구현하기 위해서는 BaseUserManager과 AbstractBaseUser 클래스를 상속받아서 새롭게 구현해야 한다. 여기에서 BaseUserManager는 유저를 생성하는 역할을 하는 헬퍼 클래스이고, AbstractBaseUser는 실제 모델이 상속받아 생성하는 클래스이다. 유저생성을 위해 accounts라는 이름의 앱을 생성해준다. python manage.py startapp accounts ✅ settings.py 앱을 생성 후 setting..

Python/DRF 2023.01.14

[DRF] Generic CBV로 CRUD 구현하기

APIView와 Mixins를 사용한 CRUD는 불필요한 중복이 발생했었다. 이번에는 Generic CBV (Class Based Views)의 상속을 통해 코드의 중복을 좀 더 줄여보고자 한다. ✅ models.py from django.db import models from django.conf import settings # Create your models here. class Blog(models.Model): title = models.CharField(max_length=100) body = models.TextField() 이전에 사용했던 모델과 동일하게 만들어준다. ✅ serializers.py from .models import Blog from rest_framework import ..

Python/DRF 2023.01.12
728x90