목록장고 (12)
훈훈훈
이번에는 페이지네이션에 대하여 정리해보려고 한다, 해당 기능을 설명하기 위해 회원 목록 조회 API를 예시로 설명하려고 한다. 회원 목록은 회원 수가 늘어날 수 록 계속 쌓이는 데이터이기 때문에 일정 개수 이상 조회 시, 다음 페이지로 넘어가서 조회하는 기능이 필요하다. 이때, 사용하는 기능이 페이지네이션이다. Django에는 페이지네이션 기능에 관련된 모듈을 제공하는 것으로 알고 있지만, 이번에는 모듈을 사용하지 않고 구현하려고 한다. 이제 아래 구현 코드를 살펴보자. # 구현 코드 class AccountList(View): def get(self, request): ''' 회원정보 리스트로 조회 ''' offset = int(request.GET.get('offset', 0)) limit = int..
이번에는 Django-mptt에 대하여 정리해보려고 한다. 해당 모듈을 사용하게된 계기는 ERD 설계 시, Categorya 항목들에 대하여 계층형으로 구성하기 위해 사용하게 되었다. 카테고리 항목들을 계층형으로 작성하는 이유는 다음과 같다. 만약 카테고리가 main, sub 두 가지로 구성이 되어 있다고 가정해보자, 이렇게 구축된 환경에서 category가 1개 2개 3개 늘어날 때마다 각각 독립적인 관계가 아니기 때문에 구조가 점점 복잡해지게 된다. 하지만 계층형으로 설계시 아래와 같이 만들 수 있으며, 확장에 용이하다. # 카테고리 예시 # 예제 코드 from mptt.models import MPTTModel, TreeForeignKey class Category(MPTTModel): name =..
이번에는 Django를 사용하여 crontab을 사용하는 방법에 대하여 정리하려고 한다. crontab을 사용하게된 계기는 매 특정 주기마다 가격이 변동시키고 싶어서 적용해보게 되었다. 이제 Django에서 crontab을 사용하는 방법에 대하여 알아보자 # 모듈 설치 pip install django-crontab 먼저 pip로 "django-crontab" 모듈을 설치하자 설치가 되면 아래와 같이 settings.py에 INSTALLED_APPS에 추가해주면 사용할 수 있다. # settings.py INSTALLED_APPS = [ 'django_crontab', ] # 매 3시간 마다 cron.py 실행 CRONJOBS = [ ('0 */3 * * *', 'my_cron.schedule_03hr_..
이번에는 Selected_related와 Prefetch_related에 대해 정리 해보려고 한다. Django ORM으로 DB에 쿼리 시 get, filter, all 이외에 Selected_related와 Prefetch_related를 적절히 사용하면 아주 강력한 무기가 될 수 있다. 이제 Selected_related와 Prefetch_related가 무엇인지 알아보도록 하자. Selected related # Selected_related 란 ? Selected_related는 SQL Query 문의 JOIN 을 사용하여 foreign-key(one to one, many to one)를 사용하여 정참조할 때 사용하며 QuerySet을 가져올 때, 미리 related objects까지 불러오는 ..
이번에는 회원가입 시 입력 값을 체크하는 함수를 정리하려고 한다. 먼저, 회원가입 시 이메일과 패스워드만 입력 받는다는 가정하에 진행하려고 한다. 아래 코드를 살펴보면 validate_special_char는 이메일 입력 값을 그리고 validate_password 는 패스워드 입력 값을 검증하는 함수이다. 이메일 검증을 하는 함수 이름에 char 단어를 넣은 이유는 해당 함수는 실행 시키기 이전에 이메일 형식인지 검증해주는 모듈을 먼저 실행 시킨 후 해당 함수를 이용해 @ 앞에 있는 입력 값에 대한 검증을 진행할 목적으로 만들었기 때문이다. 해당 함수를 살펴보면 정규표현식으로 알파벡 소(대)문자 그리고 숫자 이외에는 허용하지 못하도록 작성하였다. 그 다음 패스워드를 검증하는 validate_specia..
이번 포스팅은 장고(Django)로 회원가입 시 인증 이메일을 보내는 API Code를 정리 해보려고한다. 회원가입 API 기반으로 작성하기 때문에 회원가입/로그인에 관한 자세한 내용은 아래 링크를 참고 바란다. https://wave1994.tistory.com/65?category=872868 API 구현하기에 앞서 Gmail SMTP(Simple Mail Transfer Protocol)을 사용하기 위해 아래와 같은 설정을 하였다. # 사전 설정 1. IMAP 설정 - 이메일 클라이언트에서 Gmail을 사용할 수 있게 IMAP 설정을 1단게로 설정한다. https://support.google.com/mail/answer/7126229?hl=ko&rd=3&visit_id=1-6362818115668..
# Why 인증 데코레이터 HTTP 프로토콜은 각각의 통신이 독립적이기 때문에 이전에 사용자가 인증을 했는지 알 수 없으며, 새로운 페이지로 넘어 갈떄마다 인증을 해줘야는 문제점이 있다. 이를 해결하기 위해 모든 클래스/함수에 인증 기능을 추가할 수는 있지만 코드가 복잡해지고 길어지기 때문에 인증 기능을 구현 후 데코레이터를 사용하는 것이 좋다, # 인증 데코레이터 클래스 import jwt import json from account.models import Account from mysite.settings import SECRET_KEY from django.http import JsonResponse class LoginConfirm: def __init__(self, original_functi..
장고(Django)를 이용하여 간단하게 회원가입과 로그인 기능을 구현한 API에 패스워드 암호화 및 토큰 기능을 추가해보았다. * 이전에 구현한 코드 https://wave1994.tistory.com/57 # models.py models.py 파일은 데이터베이스 테이블을 만들고 그 안의 필드들을 생성 및 수정할 수 있는 역할을 한다. from django.db import models class Account(models.Model): email = models.EmailField(max_length=100, unique=True) password = models.CharField(max_length=200) created_at = models.DateTimeField(auto_now_add=True..