Django

Django에서 get() 과 filter() 는 모두 데이터베이스에서 객체를 가져오거나 쿼리를 필터링하는데 사용된다. 하지만 이 두 메서드간에는 몇 가지 중요한 차이가 있다. get() method 이 메서드는 조건에 맞는 단일 객체를 가져오려고 할 때 사용된다. 조건에 맞는 객체가 없거나 여러 개인 경우 DoesNotExist 또는 MultipleObjectsReturned 예외를 발생시킨다. get() 메서드를 사용하여 조건에 맞는 객체의 존재 유무를 판단할때는 try: except 문을 사용한다. try: obj = MyModel.objects.get(name='example') # 조건에 맞는 객체가 있음 except MyModel.DoesNotExist: # 조건에 맞는 객체가 없음 excep..
DRF로 작성한 API에 POST Request를 보냈을 시 View와 Serializer에서 어떤 흐름으로 코드가 흘러가고 데이터베이스에 생성되는지 나름대로 정리해보았다. # snippets/models.py from django.db import models from pygments.lexers import get_all_lexers from pygments.styles import get_all_styles LEXERS = [item for item in get_all_lexers() if item[1]] LANGUAGE_CHOICES = sorted([(item[1][0], item[0]) for item in LEXERS]) STYLE_CHOICES = sorted([(item, item) fo..
📍읽기 쉬운 코드 작성하기 축약적이거나 함축적인 변수명은 피한다. # bad bal_s_d # good balance_sheet_decrease 짧게 씀으로써 몇 초 정도 타자 시간은 아낄 수 있을지 모르겠지만 결국 그런 것들은 몇 시간 또는 며칠을 허비하게 되는 기술적 부채로 여러분에게 다가올 것이다. 그런 기술적 부채를 미리 막을 수 있다면 타자치는 데 몇 초 정도 시간을 더 써서 변수명을 길게 풀어 쓰는 편이 충분히 가치 있는 일일 것이다. 함수 인자의 이름들은 꼭 써준다. 클래스와 메서드를 문서화한다. 코드에 주석은 꼭 달도록 한다. 재사용 가능한 함수 또는 메서드 안에서 반복되는 코드들은 리팩터링을 해둔다. 함수와 메서드는 가능한 한 작은 크기를 유지한다. 어림잡아 스크롤 없이 읽을 수 있는 길..
Django Management Command는 python manage.py shell, python manage.py migrate 와 같이 우리가 장고를 사용할 때 자주 사용하는 명령어를 말한다. 우리는 이 Django Command를 Custom하여 원하는 동작을 원하는 명령어로 커스텀하여 만들어 줄 수 있다. custom command 만들기 원하는 app 폴더 밑에 management 폴더를 만들고 그 밑에 commands 폴더를 만든다. 앱이름/management/commands이런 구조가 되어야 한다. 폴더를 만들었으면 commands 폴더 밑에 원하는 명령어 이름으로 파일을 생성한다. 만약 python manage.py insert_data_to_db 라는 커스텀 command를 만들고 ..
JWT로 로그아웃 구현하기 jwt 토큰으로 로그아웃을 할 수 있을까? 가계부 서비스에서 jwt를 사용하여 로그인 토큰을 발급하였다. 그런데 jwt 토큰으로 로그아웃을 하려니 어떻게 해야 할 지 모르겠어서 해결 방법을 찾아보려 한다. JWT 로그인 JWT 토큰의 작동방식은 이렇다. 유저가 로그인을 한다. db에서 유저정보를 조회한 뒤 유저정보가 일치하면 로그인과 동시에 JWT 토큰을 발급한다. 토큰을 클라이언트에게 전달한다. 클라이언트에서 api 요청을 할 때 토큰을 Authorization header에 담아서 보낸다. 서버는 토큰을 decode하여 유저 정보를 획득한다. db에 토큰에서 얻은 유저 정보와 일치하는 유저가 없을 시 에러를 반환하고 유저가 존재할 시 api 요청의 응답을 받을 수 있다. 그..
💤 ORM은 게으르다 (Lazy Loading) # models.py from django.db import models class Blog(models.Model): name = models.CharField(max_length=100) tagline = models.TextField() def __str__(self): return self.name class Author(models.Model): name = models.CharField(max_length=200) email = models.EmailField() def __str__(self): return self.name class Entry(models.Model): blog = models.ForeignKey(Blog, on_delete..
Django ORM이란? Django ORM이란 Object Relational Mapping의 줄임말이며 객체(Object)와 관계형 데이터베이스(Relational)을 연결(Mapping) 해준다는 뜻이다. 위의 말만 들어서는 Django ORM이라는 것이 잘 와닿지 않는다. 조금 풀어서 설명한다면, 데이터베이스에 접근하여 원하는 데이터를 뽑아오기 위해서는 원래 SQL 쿼리문을 사용해야 하였다. 그런데 Django ORM을 사용한다면 쿼리문 없이 파이썬 코드만으로 데이터베이스에 접근할 수 있다! 예를 들어보자. from django.db import models class User(models.Model): name = models.CharField(max_length=45) email = model..
rimchoi
'Django' 태그의 글 목록