728x90

IT/Django 26

Django-ninja-extra 튜토리얼(정리중)

https://inspireworld.tistory.com/121 django + vite + vue + tailwind hmr 환경구축(1) 먼저, 이번 튜토리얼의 목표는 django + vite + vue + tailwind 환경에서 hmr이 정상적으로 작동하는 boilerplate를 구축하는 것이 목표이다. 제가 django + vue연동 과정에서 webpack을 사용했는데,, 프로젝트가.. inspireworld.tistory.com 개인적으로 django-ninja만 사용하시는걸 추천드립니다. 원글 여기서 더 django에선 drf django-rest-framework가 더 대중적인데.. drf쓰는 사람들이 자주 언급하는 내용이 불필요한 기능이 너무 많다는 것이다. 그래서 django-ninj..

IT/Django 2022.06.30

django template에서 query string을 href에 넣는 방법.

서비스를 개발하다보면 고객을 유인하는데, 가입 후에 특정 주소로 리다이렉트하길 원할 수 있다. 특히나 이 주소가 동적인경우를 위해 이미 http url에서는 next라는 querystring으로 request 처리 후 이동해야할 url을 알려준다. 실제 예시를 들자면, 로그인 후에 6번 매물로 이동하게 하고 싶다면. https://onepaper.biz/accounts/login/?next=/listings/6/ 으로 다음 url을 정의해줄 수 있다. 이 경우 로그인이 정상적으로 처리되고나서, https://onepaper.biz/listings/6/ [원페이퍼 - 온라인 부동산 계약 비대면 부동산 온라인 계약 서비스. 분실걱정 NO, 계약서 공유 OK. 당신의 계약서를 이제는 온라인으로 관리해보세요. ..

IT/Django 2022.05.31

Django query 최적화(select_related, prefetch_related, Prefetch + @ django_auto_prefetching)

django_auto_prefetchingdjango query 최적화를 할때 select_related와 prefetch_related 두개면 왠만한 중복쿼리들은 제거할 수 있다. N+1 쿼리를 해결할 수 있는 간단한 참고자료들은 많은데 내 경우는 약간은 특이한 상황이였다. 원페이퍼라는 부동산 계약서비스에서 최근 매물 관리까지 할 수 잇는 서비스로 확장하다보니 DB도 복잡해지고, 백엔드도 점점 복잡해졌다. 그러다가 근래 매물 관리 기능을 추가하면서 쿼리 최적화에 대해 신경쓰지 못했었는데 매물 리스트 조회하는 페이지에 중복쿼리가 너무 많았다. 위와같이 중복쿼리가 많이 이유는 아래와 같이 serializer에서 쿼리를 호출해서 생기는 문제와, SerializerMehtodField에서는 되도록 쿼리를 호출..

IT/Django 2022.05.25

Frontend와 Backend간 editable table row 업데이트 / 삭제 로직

CRUD로 페이지를 만들다보면 업데이트, 삭제 request를 매번 보내야할지 한번에 보내야할지 애매한 경우가 있다. 예를들면 내 경우 부동산 매물 기능을 구현하던 중, 부동산 매물에 세부 방정보가 있을 수 있었다. 예를들면 쉐어하우스 경우 하나의 주택이지만 방을 따로 나눠 쓰기 때문에 사진 정보들은 한 곳에 올라가지만 세부적인 방별 월세 정보, 입주가능일 등은 달라질 수 있다. 이 경우 방별 정보는 개별적으로 추가되고 갯수 또한 동적이기 때문에 몇개의 방이 추가될거라는 예상이 불가능하다. 방별 정보는 없을 수도 있고, 10개 20개가 될 수도 있는거다. 아무튼 그 경우에 초기 첫 제출 시에는 건축물 정보와 함께 방 정보를 함께 기재해주고 모든 정보를 새롭게 추가해주면 된다. 이땐 House를 생성해주고..

IT/Django 2022.04.25

Django migration 파일에서 외부파일 오류

FileNotFoundError: [Errno 2] No such file or directory: ' 파일 경로가 분명 맞는데 이런 오류가 났다. 좀 찾다보니 window linux간 경로 오류 때문인것으로 결과를 내림. 제대로된 디버깅은 못해봤으나 해결방법도 그와 관련된거라, 아마 맞는것 같음. import os from onepaper.settings import BASE_DIR file_path = os.path.join(BASE_DIR, "addresses", "dong_datas.txt") f = open(file_path)기존코드 f = open( "addresses\dong_datas.txt", )이렇게하니 분명 그쪽에 파일이 있는데 못찾더라. 경로문제는 가장 윗족 버젼으로 해결했으..

IT/Django 2022.04.15

Django migration 파일들 합치기(migrations squash)

Django ORM은 엄청나다. ORM을 통해서 마이그레이션 파일들도 자동으로 생성해주는데, 물론 이 파일을 통해서 마이그레이션을 진행할 때, 유의해야할 것들이 있다. 하위호환 - 마이그레이션을 잘못진행하면 실 서버 배포시 DB업데이트와 view단 코드가 호환되지 않아서 서버 오류가 날 수 있기에 유의해야한다. 아무튼 이 부분을 해결했다면, 테스트 중에 migration 파일들이 여러개 생길 수도 있는데 뭣도 모를땐 그냥 github에 생성되는데로 올렸다. migration 파일 합치기 근데 점점 코드량이 많아지고 코드를 잘 관리하려고 하다보니 나중엔 꼭 나눌 필요 없는 마이그레이션 파일들은 하나로 합쳐야겠다는 생각이 들었다. python manage.py squashmigrations python ma..

IT/Django 2022.04.12

DRF in필터 만들기 (django-filter IntegerField multiple parameter )

DRF와 파생된 ecosystem은 너무나도 방대해서 사실상 모든걸 파악하기란 불가능에 가깝다. 그때 그때 마다 적합한 것을 찾아서 적용하는 수 밖에는 없다. django-filter를 사용하면 생각보다 간단하게 drf 기반 서비스에서 필터링 기능을 적용할 수 있다. 기본적으로 fields 옵션을 통해서 자동으로 필터를 생성할 수 있다. class UserFilter(django_filters.FilterSet): class Meta: model = User fields = ['username', 'last_login']하지만 위와 같은 상황외에 lt나 gte를 적용해 대소 비교를해야 한다면 아래와 같이 dictionary 형태로 추가적인 적용이 가능하다. class User..

IT/Django 2022.01.11

Django migrate sqlite to postgresql 마이그레이션

마이그레이션 방법은 조금만 검색하면 많이 나온다. 먼저 python manage.py dumpdata -o data.json 실행 dumpdata Unable to serialize database: 'cp949' codec can't encode character '\ufeff' in position 232 윈도우에서 작업 진행시 로케일로 인한 위와 같은 오류를 만나는 경우 앞에 -Xutf8을 붙여주면 해결할 수 있다. python -Xutf8 manage.py dumpdata -o data.json 그 뒤 django 마이그레이션 파일로 백업한 DB로 복원을 시도할 서버에서 python manage.py migrate를 진행해주고, $python manage.py shell 실행후 쉘에서 아래 코드를..

IT/Django 2021.11.04

django backend와 frontend 통신 시 쿼리파라미터 boolean 처리 방법.

장고에서 query params을 true false로 실어서 보낼때 django에서 받아보면 boolean값으로 들어오는게 아니라 문자열로 들어와서 해당 로직을 고려하지 않는 경우 생기는 문제가 있다. 예를들면 BooleanField를 해당 값으로 filter해버리면 에러가 난다. True False만 넣어야되는데 문자열이 들어가기 때문이다. 이거 때문에 검색을 좀 해봤다. 결론은 보낼때 0, 1로 query params를 실어서 보내야된다. 그렇게하면 값 또한 상수 0, 1로 넘어오는데 해당 값을 django filter에서는 0을 False로 인식하고 1을 True로 인식하기 때문에 정상적으로 query filter가 가능해진다. 더 간단하게는 DjangoBackendFilter를 쓰면되는데, 이 ..

IT/Django 2021.07.27

Django-allauth custom template을 넘어서 custom context template.

django 기반의 회원가입 패키지를 통해서 회원가입을 구현하는 경우 회원가입 관련 페이지를 수정할 때 template폴더의 동일한 path로 파일을 생성해주면 자동으로 오버라이딩이 된다. 하지만 단순히 내용 변경이 아니라 예를들면 setting내부의 constant값이나 기존에는 제공되지 않던 context 정보가 필요하다면 어쩔수 없지 custom adapter를 만들어주어야 한다. 이부분은 검색을 해봐도 제대로 설명이 된 곳이 없어서,(심지어 공식문서에도 없었던것 같다. 물론 너무 상식적인것이라 그럴지도 모른다.) 직접 소스코드를 분석해서 구현했다. 일단 account_adapter를 default_adapter에서 다른 것으로 바꾸는 방법은 django-allauth 공식문서를 참고부탁한다. dj..

IT/Django 2021.04.13
728x90