세션과 쿠키의 작동 방식: Django에서 로그인 시, 사용자의 세션 정보는 서버의 데이터베이스에 저장됩니다. 이 세션에는 랜덤으로 생성된 세션 ID가 포함되어 있습니다. 서버는 이 세션 ID를 쿠키에 담아 브라우저로 보냅니다. 브라우저는 이 쿠키를 저장하고, 이후 동일한 도메인으로 요청을 보낼 때마다 이 쿠키를 함께 전송합니다. 도메인 기반 쿠키: 쿠키는 도메인을 기준으로 작동합니다. 특정 도메인에서 생성된 쿠키는 해당 도메인에 대한 요청 시에만 브라우저에 의해 전송됩니다. 이는 보안과 관련된 중요한 특징입니다. CORS 설정: 프론트엔드(예: React)와 백엔드(Django)가 다른 도메인 또는 포트에서 실행될 때, 백엔드에 대한 AJAX 요청을 위해 CORS_ALLOWED_ORIGINS 설정이 필..
Django는 사용자 인증 및 관리를 위해 여러 유틸리티 함수를 제공합니다. check_password, set_password, authenticate, login, logout 함수들을 예시로 들 수 있습니다. 1. check_password() 용도: 사용자의 비밀번호가 입력된 비밀번호와 일치하는지 확인합니다. 예시: from django.contrib.auth.models import User user = User.objects.get(username='myusername') if user.check_password('mypassword'): print("비밀번호가 일치합니다.") else: print("비밀번호가 일치하지 않습니다.") 2. set_password() 용도: 사용자의 비밀번호를 ..
Django Rest Framework에서 serializer에서 각 필드에 대한 validation 로직을 추가할 수 있습니다. 검증을 위한 메서드 명은 validate_필드이름 라고 작성하고 검증할 로직을 구현하면 됩니다. 예 간단한 방 정보를 다루는 예시를 통해서 사용법을 설명하겠습니다. 모델 class Room(model.Model): name = models.CharField(max_length=100) price = models.PositiveIntegerField() description = models.TextField() 시리얼라이저 class RoomSerializer(serializers.ModelSerializer): class Meta: model = Room fields = ["..
Django 소유자 여부 확인(DRF) Room 모델이 있고, 각 방은 owner가 있습니다. 방 정보를 조회하는 API를 만들려고 하는데, 로그인한 사용자가 각 방의 owner인지 여부를 확인하려고 합니다. models.py from django.db import models from django.contrib.auth.models import User class Room(models.Model): name = models.CharField(max_length=100) owner = models.ForeignKey(User, on_delete=models.CASCADE) serializers.py from rest_framewok import serializers from .models import R..
Serializer에서 method 사용하기 Serializer클래스 내에서 method field를 사용해서, 데이터를 가공하거나 계산된 값을 직접 필드로 추가할 수 있습니다. 이는 데이터 모델에는 없지만, 응답에 포함되어야 하는 데이터를 생산할 때 유용합니다. method field는 serializer클래스 내에 선언되며, 해당 클래스의 인스턴스에 의해 호출될 때 값을 반환합니다. 예 from rest_framework import serializers class ProductSerializer(serializers.Serializer): name = serializers.CharField(max_length=100) price = serializers.DecimalField(max_digits=1..
Django에서의 Transactions 트랜잭션(Transaction)이란? 트랜잭션은 데이터베이스에서 한 번에 수행되어야 할 일련의 연산들을 의미합니다. 트랜잭션은 아래의 4가지 속성을 가져야 합니다. 1. 원자성 (Atomicity) 트랜잭션의 모든 연산은 완전히 수행되거나, 아니면 전혀 수행되지 않아야 합니다. 연산 중 하나라도 실패하면 전체 트랜잭션은 취소되어야 하며, 모든 변경 사항이 롤백되어야 합니다. 예) a가 b에게 100만 원을 이체하려고 할 때 a계좌에서 100만 원 차감 후 시스템 오류로 b계좌에 입금을 실패하면 돈은 사라지게 됩니다. 그래서 이를 오류 발생 시 전체 연산을 취소(롤백)하는 트랜잭션으로 해결할 수 있습니다. 2. 일관성 (Consistency) 트랜잭션이 성공적으로 ..
values_list()는 Django 쿼리셋(QuerySet) 메서드 중 하나로, 데이터베이스에서 특정 필드들만 가져올 때 사용됩니다. 이 메서드는 특정 필드들에 대한 튜플들의 리스트를 반환합니다. 예시 # 예시 모델 class MyModel(models.Model): name = models.CharField(max_length=100) age = models.IntegerField() gender = models.CharField(max_length=100) height = models.IntegerField() # values_list() 사용 queryset = MyModel.objects.values_list('name', 'age') 위의 예시에서 values_list('name', 'age..
annotate() 메서드는 Django 쿼리셋에서 사용되는 함수 중 하나로, 데이터베이스에서 집계된 값을 추가하는 데 사용됩니다. annotate() 메서드를 사용하면 원하는 필드 값을 가져오고 그 값을 기반으로 새로운 필드를 생성할 수 있습니다. annotate(aggregate_expression, ...) aggregate_expression: 필드 값을 계산하기 위한 집계 식을 지정합니다. 일반적으로 Django의 django.db.models 모듈에 있는 집계 함수들을 사용합니다. 예를 들어, Count(), Sum(), Avg(), Min(), Max() 등이 있습니다. annotate() 메서드는 쿼리셋의 결과에 대해 각 필드 값에 대한 집계를 수행하고, 결과에 추가된 필드를 포함한 새로운..
Django와 같은 Python 기반 프레임워크에서 *args와 **kwargs는 함수나 메소드에 임의의 개수의 인자를 전달하는데 사용되는 문법입니다. *args: *args는 임의의 개수의 위치 인자를 함수나 메소드로 전달하는데 사용됩니다. 이를 통해 함수나 메소드는 미리 정해지지 않은 개수의 인자를 받을 수 있습니다. *args는 튜플 형태로 인자를 전달받습니다. **kwargs : **kwargs는 임의의 개수의 키워드 인자를 함수나 메소드로 전달하는데 사용됩니다. 이를 통해 함수나 메소드는 미리 정해지지 않은 개수의 키워드 인자를 받을 수 있습니다.**kwargs\는 딕셔너리 형태로 인자를 전달받습니다. 참고 위치인자, 키워드 인자란 : https://yesaroun.tistory.com/entr..
Django에서 get_user_model() 함수는 현재 사용 중인 User 모델 클래스를 가져오는 데 사용되는 메서드입니다. 내장 User 모델 장고에 내장되어있는 User 모델을 사용하는 경우 get_user_model()은 django.contrib.auth.get_user_model() 함수를 호출하여 django.contrib.auth.models.User 클래스를 반환합니다. 예를 들어, User 모델에 대한 참조를 가져오기 위해 다음과 같이 get_user_model() 함수를 사용할 수 있습니다 from django.contrib.auth import get_user_model User = get_user_model() 이렇게 하면 User 변수는 현재 활성화된 User 모델을 나타내게 ..