본문 바로가기

Django

(9)
DRF serializer test code - max_length serializer의 max_length도 테스트해야 할 것 같아서 작성했습니다. 기능상 할 이유가 없을 것 같았지만, 협업을 하면서 다른 팀원이 max_length를 변경하는 경우가 있을 것 같아서 넣었습니다. 실제로 테스트를 실행하는 커맨드는 'python manage.py test app name.directory.file'입니다. from django.test import TestCase from ...serializer.user_serializers import UserUpdateSerializer class TestValidUserUpdateSerializer(TestCase): def setUp(self): self.valid_data = {"last_name": "test", "first_..
DRF credentials 메소드 사용법 credentials 메소드는 모든 후속요청에서 사용될 헤더로 세팅해준다. from rest_framework.authtoken.models import Token from rest_framework.test import APIClient # Include an appropriate `Authorization:` header on all requests. token = Token.objects.get(user__username='lauren') client = APIClient() client.credentials(HTTP_AUTHORIZATION='Token' + token.key) credentials 를 사용한 뒤의 모든 리퀘스트에는 credentials 로 설정한 헤더가 계속 유지되는데 이를 해제..
django fixture dumpdata 장고를 통해 db의 데이터를 추출 가능하다. 터미널에서 아래의 커맨드를 사용하면 된다. python manage.py dumpdata --indent=4 --output=a/api_model.json api.model --indent 는 들여쓰기를 추가해준다. 4라고 입력하면 tab 한번에 크기가 4인 공백을 사용하게 된다. 옵션을 안주면 single line으로 dump되니까 되도록 쓰는 게 보기 편하다. --output 은 dump한 데이터를 파일로 저장할 때 사용한다. 옵션을 주지 않으면 standardout으로 출력된다. a/api_model.json 처럼 상대경로로 현재 위치에서 a 디렉토이 안에 파일이름을 지정해서 저장할 수 있다. 그리고 같은 위치에 같은 커맨드를 실행하면 파일을 덮어쓴다. ..
DRF json으로 null이 올 경우, required 옵션 설정을 통해 대처하는 방법 DRF를 사용하는 웹서버에 json으로 null을 보내면 파이썬은 None으로 인식한다. DRF나 django에서 CharField와 TextField는 django convention을 따르면 null=True 와 blank=True 를 동시에 사용하지 말고, blank=True 만 적용하라고 되어있다. 두 개 다 동시에 사용하면 데이터베이스에 empty string(’’ 혹은 “”)과 null 이라는, 타입이 다른 빈 값이 공존하게 되기 때문이다. json에 null이 왔을 때는 위의 옵션으로만 대처가 가능하지만 serializer field로 명시되어 있는 attribute가 json에 포함되어 있지 않을 경우, required 옵션을 사용하면 된다. required 옵션은 명시적으로 지정하지 않으..
Django CharField editable editable이 False면 admin 또는 다른 ModelForm에서 해당 필드는 나타나지 않는다. model validation에서도 스킵된다. Default는 True다. first_name = models.CharField(max_length=150, editable=False) Reference https://docs.djangoproject.com/en/4.1/ref/models/fields/ Django
Django 데이터베이스 mysql 설정하기 Django setting mysql collation에 대해서는 각 모델의 프로퍼티를 설정할 때 마다 지정해줘야하는 것같다.. 그러므로 데이터베이스를 처음 만들 때 지정해주자. CREATE DATABASE my_db CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; 그렇지 않으면 migration파일에서 RunSQL 을 사용해서 collation을 바꿔주는 방법도 있다. 처음부터 database를 만들 때 위의 커맨드로 collation을 지정해줬기 때문에 settings.py에는 아래와 같이 설정했다. django-envrion 패키지를 사용해서 .env file에 설정을 별도로 지정해줬다. # settings.py DATABASES = { "default": ..
Django-environ 패키지를 활용한 Django 환경변수 설정 django-environ 패키지는 장고 애플리케이션에 필요한 환경변수를 .env파일에 따로 구성할 수 있도록 해준다. django-environ을 사용한 django의 settings.py의 예제다. import os from pathlib import Path import environ # Build paths inside the project like this: BASE_DIR / 'subdir'. BASE_DIR = Path(__file__).resolve().parent.parent env = environ.Env() ENV_MODE = env.str("ENV_MODE", "local") env_file = ".env.{}".format(ENV_MODE) # Take environment var..
DRF token-based vs session based authentication Token-based authentication in Django Rest Framework uses tokens (string) to authenticate clients, while session-based authentication uses sessions (a more complex structure) to authenticate clients. In token-based authentication, the client sends an API request with a token in the header, and the server verifies the token to determine if the client is authenticated. Tokens can be revoked, making..