본문 바로가기

Python8

Djongo 자동으로 integer id 생성되는 경우 몽고DB는 ObjectId가 자동으로 생성되는걸 알아서 Django models에 따로 적지 않았는데, 이렇게 될 경우 Integer id가 자동으로 생성됩니다. 즉 DB에는 ObjectId와 id 2개의 id 필드가 생겨버립니다. # models.py class Test(models.Model): name = models.TextField(null=True, default="Jill") class Meta: db_table = "Test" 저희는 ObjectId만을 사용하고 싶기 때문에, model에 꼭 ObjectIdField의 _id 를 적어주셔야 합니다! from djongo import models class Test(models.Model): _id = models.ObjectIdField().. 2021. 8. 20.
ImportError: cannot import name 'abc' from 'bson.py3compat GCE 가상머신에서 도커 이미지를 불러오는 도중에 아래와 같은 에러가 발생했습니다. ImportError: cannot import name 'abc' from 'bson.py3compat 검색 결과 bson과 pymongo가 같이 설치되어 있을 때 충돌이 발생하는 에러였습니다. bson Github issue에 해당 에러에 대한 내용이 있었는데, pymongo 라이브러리를 설치하면 bson도 같이 설치되기 때문에 추가적으로 bson을 설치할 필요가 없다는 내용이 있었습니다. 그래서 bson은 따로 설치할 필요 없이, pymongo만 설치해서 해당 에러를 해결할 수 있었습니다. 2021. 8. 19.
Djongo datetime JSON Serializable Error model에서 deadline = models.DateField(auto_now_add=False) 형태로 DateField를 만들었습니다. Serializer로 데이터를 넣는건 문제가 없었는데, 가져와서 Response 해주는게 문제였습니다. 파이썬으로 불러올 때 datetime type으로 오기 때문에, json으로 리턴해주는게 문제였습니다. 이를 해결하기 위해, 이전 글에서 작성했던 JSONEncoder에 추가적으로 아래와 같이 수정했습니다. https://zih0.tistory.com/13 import datetime class JSONEncoder(json.JSONEncoder): def default(self, o): if isinstance(o, ObjectId): return str(o) .. 2021. 8. 19.
Djongo ObjectID $oid 형식 수정하기 저는 현재 Djongo를 이용해서 Django + MongoDB 환경에서 프로젝트를 진행중입니다. Model.objects.get 또는 filter를 사용해서 데이터를 불러올 경우, Response 안에 ObjectID가 아래와 같이 반환되는 경우가 있습니다. { "_id": { "$oid": "abc123" } } $oid 부분이 마음에 들지 않았고 아래와 같이 반환되었으면 했습니다. { "_id": "abc123" } 구글링을 하다가 답을 찾을 수 있었습니다. https://stackoverflow.com/questions/16586180/typeerror-objectid-is-not-json-serializable#16586277 이를 위해 JSONEncoder를 수정해주었습니다. 타입이 Objec.. 2021. 8. 14.
Django Docker 이용해서 배포하기 프로젝트가 아직 진행중이지만 API문서를 공유하기 위해 Swagger를 활용했습니다. API문서를 띄우기 위해 일단 배포를 해야 했습니다. 이전까지는 배포할 때, git clone으로 서버에 프로젝트를 저장하고 api 업데이트 시 git pull을 수동으로 하는 방식으로 진행했습니다. 하지만 이번엔 프로젝트 초기부터 배포를 진행하는 상황이라 위와 같은 경우는 비효율적으로 느껴져 도커를 사용해보기로 했습니다. Github Actions를 활용해 deploy라는 브랜치가 push되면 도커 이미지를 빌드하고 배포하도록 했습니다. 우선 deploy라는 브랜치를 만들고, requirements.txt 파일을 생성했습니다. $ pip freeze > requirements.txt 그리고 requirements.tx.. 2021. 8. 8.
DRF에서 Google Cloud Storage 사용하기 - Django에서 GCS 연결하기 ref : https://django-storages.readthedocs.io/en/latest/backends/gcloud.html#installation Google Cloud Storage — django-storages 1.11.1 documentation Your Google Storage bucket name, as a string. Required. Your Google Cloud project ID. If unset, falls back to the default inferred from the environment. The OAuth 2 credentials to use for the connection. If unset, falls back to the default inferred .. 2021. 8. 8.
DRF에서 Google Cloud Storage 사용하기 - GCS 생성 및 키 발급 이미지 파일 업로드 기능을 구현하기 위해 S3나 GCS를 사용하려고 했습니다. 아마존 프리티어 기간이 다 끝난 관계로 이번에 구글 GCP로 전체적인 서버를 구현하였습니다. Cloud Storage 버킷 생성 우선 Cloud Storage 버킷을 생성합니다. GCP 콘솔에 들어와 Cloud Storage 선택 후, 버킷 만들기를 클릭합니다. 버킷 이름을 지정해줍니다. 다음으로 버킷 서버 위치를 지정합니다. 저는 서울을 선택했습니다. 저는 어플에서 이미지 url을 이용해 이미지를 띄울 거기 때문에, 공개 엑세스 방지 적용 체크를 해지해주었습니다. 위 과정이 끝나면 버킷이 만들어집니다. 서비스 계정 만들기 다음으로는 Cloud Storage를 Django에서 접근할 수 있도록 서비스 계정을 만들고 키 값을 발.. 2021. 8. 8.
DRF에서 JWT 사용하기 DRF에서 JWT 사용하기 이번에 프로젝트를 진행하면서 장고를 처음 써봤는데 node.js를 사용했을 때와는 다르게, 장고는 꽤 많은 기능들을 클래스를 상속받거나 패키지를 활용하면 쉽게 구현이 가능했습니다. JWT도 djangorestframework-simplejwt 패키지를 이용하면 정말 쉽게 JWT를 구현할 수 있었습니다. 해당 패지키를 활용한 JWT 구현 방법은 아래 블로그에 자세하게 나와있어서 많이 참고할 수 있었습니다. https://medium.com/django-rest/django-rest-framework-jwt-authentication-94bee36f2af8 이번 프로젝트에서는 해당 패키지를 쓰지 않고, 해당 기능을 구현한 것에 대해 작성할 예정입니다. 우선 jwt를 파이썬에서 생성.. 2021. 8. 7.