728x90

IT/Django 26

django @login_required 데코레이터 작동 원리 이해

데코레이터는 특정 함수가 작동할 때에 함수 로직의 코드 수정 없이, 추가적인 로직을 주입하기 위해 사용한다.데코레이터에 대한 이해는 아래 링크를 통해서 해보시고,파이썬 코딩 도장: 42.1 데코레이터 만들기django에서 내장된 login_required 데코레이터만 살펴 보겠다.def login_required( function=None, redirect_field_name=REDIRECT_FIELD_NAME, login_url=None): """ Decorator for views that checks that the user is logged in, redirecting to the log-in page if necessary. """ actual_decorator ..

IT/Django 2024.12.05

vscode에서 dockerized 된 django 디버깅 방법

https://code.visualstudio.com/docs/containers/docker-compose#_python Use Docker Compose to work with multiple containers Develop a multi-container app running in a Docker containers using Docker Compose and Visual Studio Code. code.visualstudio.com 가장 명료하게 설명 해둔 공식 문서, noreload는 빼도되고, volume 설정을 해서 local 코드가 container 쪽으로 바로바로 반영 되도록 하는게 디버깅 하기 수월하다.

IT/Django 2024.01.09

Django에서 Celery가 필요한 이유?

먼저 django와 celery가 뭐하는 녀석인지 이론적인것들은 개인적으로 찾아보시길 바라며, 이포스팅에선 구체적으로 어떤 이슈를 겪었고, 어떻게 해결했는지에 집중하겠다. 이슈 - backend에서 web-push request시 response delay로 인한 frontend로의 응답 지연. http의 특성상 일반적으로는 request 후 response가 올 때까지 대기하는 것이 원칙이다. 이 경우 response가 오기 전까지는 서비스가 멈춘 것처럼 유저는 느낄 수 있다. 이 원론적인 프로토콜 구성 때문에 생기는 문제가 한가지 있는데, 나는 최근 web-push를 구현하면서 겪게 되었다. web-push를 구현하는 것도 참고할만한 자료가 없어서 꽤나 시간이 걸렸는데, 구현하고보니 web-push의..

IT/Django 2024.01.04

django request.user가 anonymous로만 나오는 이유?

django view를 만들때 drf에서 제공하는 APIView를 상속받지 않고 django에서 내장된 기본 View를 상속받는 경우에 drf에서 제공하는 authentication은 작동하지 않는다. drf를 항상 사용하던사람들은 아무런 의구심이 없을지 모르겠으나, drf에서 어떤식으로 authentication이 처리되는지 궁금할수 있을듯하여 실제 코드를 가져와봤다. dispatch코드가 APIView에서는 오버라이딩 된것을 확인할수 있는데, View에서는 없던 initialize_request라는 함수가 실행되는 것을 확인할 수 있다. 해당 함수에서 request를 초기화하고, 그 과정에서 authentication 처리가 정상적으로 된다. 따라서 VIew 함수를 상속한 경우에는 authentica..

IT/Django 2023.06.28

제대로된 해결 방법 - received a naive datetime while time zone support is active.

USE_TZ = False로 해버리라는 해결책이 구글링으로 검색되던데.. 이렇게 하면 tz을 꺼버리게 되는거다. 국내에서만 사용할 서비스라면 모르겠지만 그게 아니라면 나중에 timezone이 바뀌게 되는 경우 분명 문제가 생긴다. localtime을 호출하는데 tz이 바뀌어도 같은 시간이 계속나오면 문제가 될수 밖에 없다. 해결책은 get_current_timezone()으로 tzinfo를 넣어주는거다. https://stackoverflow.com/questions/18622007/runtimewarning-datetimefield-received-a-naive-datetime 아래 답변자의 답변을 참고하길 바란다. Edouard Thiel

IT/Django 2023.06.22

How to create Djoser custom token strategy more detail info(jwt 정보추가)

1. Make new CustomTokenStrategy inherit TokenStrategy from djoser.social.token.jwt import TokenStrategy # REf. https://stackoverflow.com/questions/65934755/django-how-do-i-return-jwt-with-custom-claim-after-user-sign-up class CustomTokenStrategy(TokenStrategy): @classmethod def obtain(cls, user): from rest_framework_simplejwt.tokens import RefreshToken refresh = RefreshToken.for_user(user) refre..

IT/Django 2023.06.01

python script에서 django model 얻는법

BASE_DIR = Path(__file__).resolve().parent syspath = str(BASE_DIR.parent.parent) - backend - backend - settings.py - myapps - sql - script.py 내 폴더 구조는 위와 같은데.. script.py에서 궁극적으로 backend.settings의 정보를 가져와서 django.setup()을 실행해줄수 있는 구조를 맞춰주면된다. 1. BASE_DIR은 sql폴더를 가르키고 있다. 2. BASE_DIR(sql폴더)을 기준으로 2번 상위 폴더로이동해야 최상위 backend 프로젝트 폴더로 이동할 수 있다. 그래서 syspath는 BASE_DIR.parent.parent를 해준것이다. 이대로 syspath변수..

IT/Django 2023.05.23
728x90