Django 8

[Django] Custom Exception Handler

Problem 예기치 못한 Exception이 발생했을 때, 이를 감지할 수 있는 시스템이 필요했다. 기존에는 Exception Handler View를 만들어 로직을 처리한 후 template을 return 했지만, DRF API로 변환하면서 해당 기능의 수정이 필요해졌다. Exception Handler View 포스트 [Django] 500 Internal server error handler Problem http 500 서버 에러 발생 시의 처리 로직을 구현. Solution 이미 구현되어 있는 django.conf.urls.handler500 을 이용한다. django.conf.urls.handler500 에 view의 함수를 지정해주고, view에서 에러 관.. torimuk.tistory...

Django 2022.09.29

[Django] Swagger header에 JWT 추가하기

Problem Swagger 에서 모든 요청의 헤더에 JWT 토큰 값을 넣고자 한다. Solution 해결법은 간단하다. settings.py에 SWAGGER_SETTINGS를 추가하면 된다. SWAGGER_SETTINGS = { 'SECURITY_DEFINITIONS': { 'Access_Token': { 'type': 'apiKey',# 타입 'name': 'Access-Token',# 이름 'in': 'header',# 어디에 추가할 것인지, 헤더이므로 header 'description': 'Authorization',# 설명 } }, } 그 다음 Swagger에서 Authorize를 클릭하면 다음과 같이 출력된다. 해당 Value 값에 JWT 토큰 값을 입력하고 Authorize 한 뒤, 테스트..

Django 2022.04.29

[Django] Function Based View 환경에서 Swagger 사용하기

Problem Swagger를 추가해서 Django API 문서를 만들어보자 FBV(Function Based View) 환경에서 진행한다. FBV 환경에서 진행하는 문서가 부족해 작성하게 되었다. Solution 1. drf-yasg와 djangorestframework를 설치한다. pip install drf_yasg pip install djangorestframework 2. 설치 후 url.py에서 schema_url_patterns를 설정하고, get_schema_view를 정의한다. schema_url_patterns = [ path('루트URL/', include('app.url')), ] schema_view_v1 = get_schema_view( openapi.Info( title="O..

Django 2022.04.28

[Django API] Django + JWT

Problem Django API와 JWT를 연계하여 로그인 시스템 구현하기 Solution 1. djangorestframework-jwt 를 설치한다. pip install djangorestframework-jwt 2. jwt를 import 한 뒤, 로그인과 관련된 로직을 작성한다. 3. 입력한 ID와 PW가 DB의 값과 일치한 경우, 다음과 같이 access_token을 작성하여 response에 포함시켜준다. ALGORITHM = 'HS256'# 알고리즘을 입력. SECRET_KEY = 'secret_key'# 변하지 않는 secret_key를 입력. if match_admin(user_res["user_pw"], admin_info["password"]):# 패스워드가 일치할 경우 access..

Django 2022.04.26

[Django] 500 Internal server error handler

Problem http 500 서버 에러 발생 시의 처리 로직을 구현. Solution 이미 구현되어 있는 django.conf.urls.handler500 을 이용한다. django.conf.urls.handler500 에 view의 함수를 지정해주고, view에서 에러 관련 처리를 해준다. *urls.py* import django.conf.urls django.conf.urls.handler500 = "apps.views.error500" 필자는 에러 정보를 slack bot을 통해 송신한 다음 에러 페이지를 출력하는 로직을 구현하였다. 발생한 에러는 traceback.format_exc()를 사용해 저장하면 된다. err_str = traceback.format_exc() *views.py* de..

Django 2022.02.14

[Django] Debug=False 설정 시 static 이 깨지는 오류

Problem: Debug=False 로 설정한 후 서버에 올릴 시 static이 깨지는 오류 발생. Solution: 1. runserver 뒤에 --insecure 인자 추가. python manage.py runserver ... --insecure 2. urls.py 수정 url(r’^static/(?P.+)’, serve, kwargs={‘insecure’: True}) 2-2. urlpatterns = […] urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT, insecure=True) 물론 기본적으로 static 파일은 웹 서버가 제공해야 한다. 보안상의 이유로 Debug=False 인 경우 정적 파일 접근..

Django 2021.12.27