Python/Django 41

[Django, DB] haversine 두 지점의 거리 Django Func 사용하기

두 지점의 거리 구하기 공식 - haversine하버사인 공식(Haversine Formula) 공식은 구위의 두 점 사이의 거리를 경도와 위도를 고려하여 계산하는 공식 지도 맵 서비스 등에서 두 지점 간 거리를 재는데 사용 가능하다. 아래 그림의 P와 Q사이의 거리를 계산해준다.    haversine - PostgreSQL, MySQLDB에 맞춰 사소한 문법 등은 달라 질 수 있다.  만약 MySQL을 사용한다면, 기존에 내제되어 있는 Point 필드 등을 사용한 거리 계산도 가능하다. -- 두 위경도 사이의 거리 계산CREATE OR REPLACE FUNCTION haversine( lat1 numeric, lon1 numeric, lat2 numeric, lon2 numeri..

Python/Django 2024.06.30

[Django] Django Models 와 @property

@propertypython에서는 @property라는 decorator를 제공하는데,  해당 클래스의 객체 변수처럼 사용될 수 있게 하며, 캡슐화 목적으로 주로 사용된다. property 코드 예시class Profile: def __init__(self, first_name:str, last_name:str): self.first_name = first_name self.last_name = last_name @property def full_name(self): return self.first_name + self.last_nameprofile = Profile("홍","길동")print(profile.first_name) # "홍"print(p..

Python/Django 2024.06.16

[Django] Prefetch 에 대한 이해

Prefetch 란perfetch_related 함수는 쿼리에서 Join을 하지 않고, 개별 쿼리를 실행 한 후 django에서 직접 데이터를 조합하는 것 예시) A, B, C 모델이 존재 / A:B 는 1:N / B:C 는 1:N의 관계를 가짐 비교 1 ) A에서 C 까지의 Prefetch1안. Prefetch 병렬로 쓰기a = ( A.objects.filter(id=1).prefetch_related( Prefetch( "b_set", # A에서 B 역참조 ), Prefetch( "b_set__c_set", # A에서 C역참조 ), )).first() 2안. Prefetch 중첩해서 쓰기a = ( ..

Python/Django 2024.05.19

[Django] Django Model - Table Field, Relationship

Model - Field Type 필드 타입 설명 BooleanField True / False 이진 논리 필드 CharField 문자열 값 (일반적으로 짧은) TextField 문자열 값 (일반적으로 긴) EmailField 유휴한 이메일 주소인지 체크 (EmailValidator) IntegerField 정수 데이터 저장 필드 PostiveIntegerField PositiveBigIntegerField 0 or 양수의 정수 필드 FloatField 실수 데이터 저장 필드 DecimalField 고정 소수점 필드 (ex. 4.222) DateField 날짜 데이터 저장 필드 Python의 Datetime.date에 대응되는 필드 DateTimeField 날짜 + 시간 데이터 저장 필드 Python의 ..

Python/Django 2023.02.07

[Django] 간단한 메일 전송 기능 구현 (by. Gmail )

1. Google 계정 보안 설정하기 (1) 구글 계정 - 보안 접속 (2) 2단계 인증 설정 (3) 앱 비밀번호 생성 구글 뿐만 아니라 네이버로 전송시에도 다음과 같이 앱 비밀번호를 생성하는 절차를 거쳐야 한다. 2. settings.py 메일 전송에는 SMTP Protocol이 활용되고, django에 내장된 mail 기능을 사용 # gmail EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' EMAIL_HOST = "smtp.gmail.com" EMAIL_HOST_USER = EMAIL_HOST_PASSWORD ='' # gmail 2단계 보안 인증 - 앱 비밀번호임! EMAIL_PORT = 587 # gmail SMTP 포트 EMAIL_..

Python/Django 2022.11.18

[Django] Pagination 방법 비교 (Feat. Django, DRF)

Pagination이란? Pagination 이란 한번에 많은 데이터를 받기 힘든 경우, 특정 구역을 나눠서 받는 방법 Django에서는 Pagination을 구현하기 위한 여러 모듈들이 존재하는데, 향후 Pagaintation 구현시 의사 결정을 빠르게 할 수 있도록, 각 방법을 비교 해보며 특징을 정리 해놓으려고 한다. 👉 Pagination 의 큰 갈래 (방향성) Pagination 방법에는 여러 종류가 있겠지만 크게 3가지로 나뉘는 걸로 보이며, 1), 2) 의 경우 많이 쓰이는 대중적인 방법으로 선호됩니다. 3) 의 경우에도 1) 페이지 번호 기반 : 미리 페이지 크기(page_size)를 정하고, 페이지 번호(page_num)를 요청받아 조회 응답 방법 2) 특정 지점 부터 특정 갯수 기반 :..

Python/Django 2022.11.10

[Django] Django Pagination (by. Django Paginator)

Django에서 게시판을 만드는 방법은 크게 아래 두가지 방향으로 구현이 가능하다. Django의 Paginator (django.core.paginator import Paginator) DRF(Django Rest Framework)의 Pagination(rest_frameowork.pagination) 두 방식은 각기 장단점이 있으며, 서비스(기능) 중심으로 더 결이 잘 맞는 적절한 방향을 정하는 것이 좋다. 해당 글은 Django의 Paginaotor를 이용해 Pagination을 구현하는 방법을 설명한다. 1. Project, App 생성 django-admin startproject pagination1 django-admin startapp posts 2. settings.py INSTALL..

Python/Django 2022.11.10

[Django] Request 구조 분석 (with. DRF, Query-String vs Path-variables)

DRF의 Requests 객체 https://www.django-rest-framework.org/api-guide/requests/ Requests - Django REST framework www.django-rest-framework.org 메소드 종류 설명 request.method HTTP Request 메소드 종류 GET, POST, PUT, PATCH, DELETE 등 request.content_type body에 들어갈 Media type request.data body에 들어가는 데이터 전체 request.FILES file 형식의 객체 request.FILES.getlist 여러 개의 file 형식 객체들 (list 형태) request.query_params URL Query Par..

Python/Django 2022.08.22

[Django] Query Profiling Tool (3) - Silk

Django Silk 란 Django Silk는 Request의 총 걸린 시간 / Query 시간 / Query 갯수 등을 Profiling 해주는 Tool 기본적으로 Request와 Response를 DB에 저장하기 때문에 자체가 서버에 부하를 줄 수 있음 Request 마다 걸린 시간 / Query 수 / Query 문 등을 분석 할 수 있으며, DB Clear도 웹으로 편하게 가능 Django Silk 설치 pip install django-silk https://pypi.org/project/django-silk/ django-silk Silky smooth profiling for the Django Framework pypi.org settings.py app, middleware, 옵션 추가..

Python/Django 2022.08.12

[Django] Query Profiling Tool (1) - Django debug toolbar

django-debug-toolbar 설치 pip install django-debug-toolbar settings.py INSTALLED_APPS = [ # ... 'django.contrib.staticfiles', 'debug_toolbar', ] MIDDLEWARE = [ # ... 'debug_toolbar.middleware.DebugToolbarMiddleware', # ... ] # DRF의 Response 로 return 하는 구조의 툴바 뜨게 DEBUG_TOOLBAR_CONFIG = { "SHOW_TOOLBAR_CALLBACK": lambda request: True, } STATIC_URL = '/static/' INTERNAL_IPS = [ '127.0.0.1', ] urls.py..

Python/Django 2022.08.12