본문 바로가기

Django13

[Django] request.data immutable django 에서 request.data의 데이터를 수정하려고 하면 immutable 에러가 발생한다. 위 에러를 해결하기 위해서는 아래의 방법을 사용한다.단순히 request.data 를 사용하고자 하는 경우단순히 request.data 를 가져와서 key를 추가하고자 하는 경우는 아래의 방법으로 쉽게 해결할 수 있을 것이다.아래는 POST의 경우만 체크한 거니 1. copy() 함수 사용data = request.data.copy()data['newKey'] = value2. __setitem__() 함수 사용request.data.__setitem__(newKey, value)DB에 저장 전, request.data 에 key를 추가하고자 하는 경우이 경우는 위의 함수를 사용해서는 해결이 안 될 것.. 2017. 1. 13.
[Django] settings 파일에 선언한 값 가져오기 API 호출을 위한 HOST같은 공통적인 변수는 settings 파일에 변수를 지정하여 나중에 값이 바뀌어도 이 값을 사용한 곳의 코드를 전부 바꾸지 않도록 개발해야 한다. # in settings.pyTMP_HOST = '127.0.0.1' 만약 settings.py(또는 dev.py 등) 파일에 위의 변수를 선언해 놨다면 값을 가져올 때는 아래와 같이 가져올 수 있다. # in views.py (변수 값을 사용하기 위한 파일)from django.conf import settings TMP_HOST = getattr(settings, 'TMP_HOST', 'localhost') 위와 같이 getattr() 함수로 가져온 모듈 안에서는 TMP_HOST 변수로 settings.py 안에서 지정한 값을 사.. 2016. 12. 28.
[Django] tuple' object has no attribute '_meta' Django 를 사용하여 만든 API 호출 시에 아래와 같은 에러가 발생한 적 있다. Error message: tuple' object has no attribute '_meta' 원인은.. 어이 없었지만 serializer 에서 model 명 옆에 ',(콤마)'가 있어서 나는 에러였다. class UserSerializer(serializers.ModelSerializer): profile = ProfileSerializer() class Meta: model = User, fields = ('username', 'email', 'profile') 위의 예제처럼 Meta 클래스 안에서 User 모델 옆에 , 를 찍어줘서 발생하는 에러였다. 즉 tuple 오브젝트를 지원안한다는 얘기이다. 2016. 12. 22.
[Django] settings.py 분리하기 Django project 에서 프로젝트의 설정을 나타내는 파일인 settings.py 모듈. 여러 사람이 한 프로젝트에서 작업을 하다보면 데이터베이스 설정을 바꿔가며 작업을 하는 경우가 있다. 예를 들어, 테스트를 하기 위해서 자신의 로컬 데이터베이스로 설정값을 바꿔놓고 저장소에 push 하면 이 코드를 실제 데이터베이스 정보로 바꿔야 하는 작업이 필요하다. 이러한 상황은 생각보다 자주 일어나며 이 상황이 반복되면 git 저장소에 불필요한 활동 기록이 쌓이게 된다. 그래서 이 페이지에서는 settings.py 모듈을 분리하여 실제 데이터베이스와 로컬 데이터베이스 설정 값을 나눠서 관리하는 방법을 설명할 것이다. 프로젝트 생성 일단 작업을 시작할 프로젝트를 생성한다. # 장고가 설치되어 있지 않다면 장고.. 2016. 11. 16.
[Django] Database Dynamic Access 큰 프로젝트를 구현하다 보면 한 프로젝트 내에서 여러 데이터베이스와 연결하는 경우가 많다. 기본적으로는 django documents 사이트에 나와있듯이 settings 에 사용할 데이터베이스 정보를 추가해 놓고 using() 을 사용하거나 router.py 파일을 추가하여 데이터베이스에 연결하는 방법이 있다. 하지만, 셀 수 없이 많은 데이터베이스에 다이나믹하게 연결해야 하는 경우는 위와 같은 방식으로 사용하면 안된다. 이 페이지에는 장고 프로젝트에서 다이나믹하게 데이터베이스에 접근하는 방법에 대해 설명할 것이다. 데이터베이스 연결 방법from django.db import connections external_db = {'ENGINE': 'django.db.backends.postgresql_psyc.. 2016. 11. 14.
[Django] django-crontab Django-CrontabLinux/Unix 에서 스케줄러를 구현할 때 cron/crontab을 Django에서는 django-crontab 라이브러리를 이용하면 쉽게 구현가능 하다. django-crontab은 실제 os상의 crontab에 등록하여 동작하도록 설계되어있다.Installpip install django-crontabsetupINSTALLED_APPS = ( 'django_crontab', . . .) cronjob 추가자신이 스케줄 작업을 등록하기 위한 함수를 만들어주면 된다. myapp/cron.py# myapp/cron.py def my_scheduled_job(): pass settings.pyCRONJOBS = [ ('*/5 * * * *', 'myapp.cron.my_sched.. 2016. 10. 28.
[Django] values() values_list() flat values()object의 원하는 컬럼만 가져오기 위해서는 values를 사용할 수 있다. values를 사용하면 해당 컬럼의 key,value의 쌍의 리스트를 얻을 수 있다. >>> Entry.objects.values()[{'blog_id': 1, 'headline': 'First Entry', ...}, ...] >>> Entry.objects.values('blog')[{'blog': 1}, ...] >>> Entry.objects.values('blog_id')[{'blog_id': 1}, ...] values_list()values_list()를 사용하면 key,value 형태가 아닌 tuples 형태의 리스트로 가져올 수 있다. >>> Entry.objects.values_list('id'.. 2016. 10. 26.
[Django-REST] Exception Handler RestFramework에서 자동으로 API 함수에서 Exception이 발생하면 Exception Handler에서 처리할 수 있도록 settings에서 조건을 줄 수 있다. 보통 코드에서 exception을 처리하기 위해서 try ~ exception을 사용한다. try: ... code detail except Exception as e: print(e) return Response(status=status.HTTP_500_INTERNAL_SERVER_ERROR) 하지만, 위와 같은 코드로 작성하면 코드의 복잡도가 높아지고 reading이 힘들어진다.Custom exception handlingDjango RestFramework에서는 Exception Handler를 settings에서 자동으로 .. 2016. 10. 19.