전체 글 373

장고(Django) Serializer를 사용하여 User 생성하기

Serializer로 회원가입 기능 만들기 바로 이전 시간에서는 rest_framework의 도움 없이 장고만의 기능인 UserCreationForm으로 회원가입 기능을 구현해봤습니다. 이번 시간에는 Django Rest Framework의 Serializer기능을 사용해 사용자의 회원가입 기능을 구현해보겠습니다. 회원가입 Serializer 만들기 우리는 DRF를 이용한 Serializer는 polls_api/serializers.py에서 구현해왔습니다. polls_api/serializers.py RegisterSerializer 클래스를 구현했는데요. 모델은 당연히 User입니다. 그런데 Meta 클래스에서 extra_kwargs가 생소하실 겁니다. 비밀번호인 password를 읽을 수 있으면 안되..

장고 (Django) 2023.11.05

장고(Django) Form을 사용하여 User 생성하기

사용자를 만드는 기능을 두가지 방법으로 구현해보려합니다. 첫번째는 장고에서 제공하는 기능으로, 두번째는 restframework에서 Serializesr를 이용해 사용자를 만드는 방법입니다. 장고에서 제공하는 UserCreationForm 기능으로 회원 만들기 지금까지 우리는 장고에서 제공하는 기능은 polls앱에서 DRF에서 제공하는 기능은 polls_api에서 구현해 왔습니다. 그로므로 이번에는 polls앱에서 시작하겠습니다. polls/view.py # ..생략.. from django.views import generic from django.urls import reverse_lazy from django.contrib.auth.forms import UserCreationForm # ..생략...

장고 (Django) 2023.11.05

장고(Django) User 관리하기

모든 User를 JSON 형태로 조회하고 URL에 User id를 입력하면 그 id의 User가 그동안 작성한 question들을 조회할 수 있는 List 페이지와 Detail(상세) 페이지를 만들어보겠습니다. polls_api/serializers.py 첫번째 PrimaryKeyRelatedField가 무엇인지 궁금하실 겁니다. Django REST framework에서 PrimaryKeyRelatedField는 관계 필드 중 하나로, 주어진 모델에서 기본 키(primary key)와 관련된 객체를 나타내는데 사용됩니다. 여기서는 User의 기본키를 이용해 Question 모델에서 User에 기본키로 작성된 question들을 쿼리셋으로 가져오겠다는 뜻입니다. many는 현재 모델 기본키 하나에 여러개..

장고 (Django) 2023.11.05

장고(Django) User 추가하기

Question 모델에 작성자 필드를 추가하고 자신이 작성한 질문만 수정할 수 있도록 하는 기능을 만들며 장고에서 제공하는 사용자 관리 기능에 대해서도 알아볼 것입니다. django.contrib.auth에 대해 `django.contrib.auth`는 Django의 내장 인증 및 사용자 관리 앱입니다. 이 앱은 사용자 계정, 그룹, 권한 및 다른 인증 관련 기능을 구현하기 위한 모든 핵심 도구와 클래스를 제공합니다. 아래는 `django.contrib.auth`의 몇 가지 중요한 요소에 대한 간단한 설명입니다: 1. **User 모델**: `User` 모델은 사용자 계정을 나타내는 클래스로, 사용자 이름, 비밀번호, 이메일 등과 같은 필드를 가지고 있습니다. Django에서 내장된 User 모델을 사용..

장고 (Django) 2023.11.05

장고(Django) 정참조와 역참조

장고 개발을 공부하다보면 정참조와 역참조라는 단어를 들으실 수 있을겁니다. 정참조와 역참조에 대해 나누어 설명을 드리겠습니다. 정참조(Forward Reference)란? Django에서 '정참조(Forward Reference)'는 모델 간의 관계에서 한 모델이 다른 모델을 참조하는 방향을 나타냅니다. 일반적으로 ForeignKey, OneToOneField, ManyToManyField와 같은 관계 필드를 사용하여 정참조를 설정합니다. 이러한 관계 필드를 사용하면 모델 간의 관계를 정의하고 하나의 모델에서 다른 모델로의 참조를 만들 수 있습니다. 예를 들어, 다음은 `Author` 모델과 `Book` 모델 간의 정참조를 나타내는 Django 모델 예제입니다: from django.db import m..

장고 (Django) 2023.11.05

장고(Django) Generic API View

우리가 지난 시간 Mixins를 사용하며 작성한 polls_api/views.py의 코드 입니다. from django.shortcuts import render, get_object_or_404 # from rest_framework.decorators import api_view from polls.models import Question from .serializers import QuestionSerializer from rest_framework.response import Response from rest_framework import status, mixins, generics from rest_framework.views import APIView # Create your views her..

장고 (Django) 2023.11.04

장고(Django) 믹스인(Mixin)

믹스인이란? Django에서 Mixin은 클래스를 구성 요소로 재사용하고 확장하는 데 사용되는 방법 중 하나입니다. Mixin은 기능을 추가하고 확장하는 데 도움이 되며, Django 클래스 기반 뷰, 모델, 폼 및 다른 컴포넌트에서 특히 유용합니다. Mixin의 주요 특징과 역할은 다음과 같습니다: 1. **재사용성**: Mixin 클래스는 여러 클래스에서 재사용될 수 있습니다. 여러 뷰나 모델에서 동일한 기능을 사용하고자 할 때 유용합니다. 2. **기능 확장**: Mixin은 기존 클래스의 기능을 확장하거나 추가합니다. 예를 들어, Django의 클래스 기반 뷰에서 인증, 캐싱, 페이징, 검색 및 다른 기능을 뷰 클래스에 추가할 수 있습니다. 3. **계층 구조**: Mixin 클래스는 다른 클래스..

장고 (Django) 2023.11.04

장고(Django) 클래스(Class) 기반의 뷰(Views)

더 깔끔하고 쉬운 Django Class-Based Views 우리는 지금까지 뷰(polls_api/views.py)를 메서드 기반으로 작성해왔는데요 이를 클래스 기반의 뷰로 작성할 수 있습니다. polls_api/views.py from django.shortcuts import render, get_object_or_404 # from rest_framework.decorators import api_view from polls.models import Question from .serializers import QuestionSerializer from rest_framework.response import Response from rest_framework import status from res..

장고 (Django) 2023.11.04

장고(Django) PUT/DELETE

상세 페이지와 PUT/DELETE 구현 이제는 Question의 상세 페이지를 보고 그 페이지에서 수정 및 삭제를 할 수 있는 기능을 구현해보려 합니다. 기존의 polls_api/views.py 파일에서 from django.shortcuts import render, get_object_or_404 # ...(중량)... @api_view(['GET', 'PUT', 'DELETE']) def question_detail(request, id): question = get_object_or_404(Question, pk=id) if request.method == 'GET': serializer = QuestionSerializer(question) return Response(serializer.dat..

장고 (Django) 2023.11.04

장고(Django) POST

이제는 POST로 새로운 Question을 만드는 기능을 구현해보자 polls_api/views.py에서 @api_view()로 아무 것도 주지 않으면 자동으로 GET으로 판단합니다. 이번에는 GET과 POST를 데코레이터에 인자로 줍니다. 그리고 request.method가 GET인지 POST인지 나누어 진행합니다. GET은 지난 시간과 똑같습니다. POST에서 QuestionSerializer에 data와 instance가 아닌 data만 주면 create라고 했었죠? 우리는 새로운 question을 POST(만드는)하는 기능을 구현하므로 data=request.data만 주었습니다. 그리고 serializer.is_valid()로 유효할 때만 save()를 진행하고 그렇지 않으면 에러를 띄우라는 뜻..

장고 (Django) 2023.11.04