세션과 쿠키의 작동 방식: 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 = ["..
변수는 일반적으로 데이터를 저장할 수 있는 메모리 공간을 의미합니다. 다만, 파이썬에서의 변수는 C, 자바 같은 컴파일 언어에서의 변수와는 차이가 있습니다. 자바의 변수 자바를 예로 들면 자바는 변수를 선언하면서 선언된 자료형 만큼의 메모리를 확보합니다. 더 정확하게 말하면 원시 타입(Primitive Type)에 해당하는 변수(int, double, boolean 등)를 선언하면 선언된 타입만큼의 크기의 영역을 Stack 메모리에 선언합니다. 그리고 객체와 메서드 같은 참조형 타입(Reference type)은 Heap 메모리에 실질적인 데이터가 저장되고 그 데이터의 주소값이 stack 메모리에 저장되는 형태입니다. 파이썬의 변수 하지만 파이썬의 변수는 다릅니다. 파이썬에서 변수는 타입에 의해 선언되는..
deque 모듈 deque(데크, double-ended queue) 모듈은 양쪽 끝에서 삽입과 삭제가 가능한 자료구조입니다. 즉, 스택과 큐를 모드 지원하는 모듈로 Python의 collections 모듈에서 제공됩니다. deque를 사용하기 위해서는 리스트와 비슷한 형식으로 데이터를 저장해야 합니다. 기본적인 사용법 Import 방법 from collections import deque 생성 d = deque([1, 2, 3, 4]) 삽입 / 삭제 for i in range(5): deque_list.append(i) # 오른쪽 끝에 삽입 print(deque_list) # deque([0, 1, 2, 3, 4]) deque_list.pop() # 오른쪽 끝 요소 삭제 print(deque_list)..
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) 트랜잭션이 성공적으로 ..
Python - isinstance() isinstance() 함수는 Python 내장 함수 중 하나로, 어떤 객체가 특정 클래스나 타입의 인스턴스인지를 확인하는 데 사용됩니다. 주어진 객체가 지정한 클래스 또는 타입의 인스턴스인 경우 True를 반환하고, 아닌 경우 False를 반환합니다. 예 # 예제 클래스 정의 class Animal: pass class Dog(Animal): pass class Cat(Animal): pass # 객체 생성 dog_instance = Dog() cat_instance = Cat() # isinstance 사용 print(isinstance(dog_instance, Dog)) # True print(isinstance(cat_instance, Dog)) # Fals..
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..