전체 글
-
[Django] Quill Editor 적용하기Programming/Python 2023. 7. 6. 17:23
저같은 경우 Editor 하면 가장 먼저 떠오르는 것은 Ckeditor 이다. 그래서 Editor 가 필요한 경우에는 주로 Ckeditor를 사용하는데 이번에는 다른 Editor를 사용해볼려고 한다. Quill https://quilljs.com/ Quill - Your powerful rich text editor Sailec Light Sofia Pro Slabo 27px Roboto Slab Inconsolata Ubuntu Mono Quill Rich Text Editor Quill is a free, open source WYSIWYG editor built for the modern web. With its modular architecture and expressive API, it is c..
-
[Bug] 동일한 이름을 가진 Library 가 꼬이는 경우Programming/Python 2023. 6. 16. 15:49
대부분은 Python 을 통해서 개발을 할 때 Python 단독으로만 사용하지않고 라이브러리를 사용해서 같이 개발을 진행한다. 그러면 우리가 흔히 아는 pip 혹은 poetry 를 이용해서 라이브러리들을 관리한다. 그럴때 가끔 마주하는 문제가 있다. 바로 라이브러리가 꼬이는 경우이다. 이렇게 되는 경우 바로 알아차리는 경우도 있고 아닌 경우도 있다. 뭐가 되었든 애매한 상황이 되어버린다.(주로 라이브러리 이름은 다른데 실제로 설치되어진 라이브러리 이름이 동일한 경우 발생) 겪었던 일 라이브러리 중에 공교롭게도 dotenv 와 python-dotenv 두개가 존재한다. 그리고 이 라이브러리의 패키지명은 dotenv 이다. dotenv 를 설치하면 dotenv 와 python-dotenv 가 설치되어진다. ..
-
Python 에서 환경변수(.env) 가져오기Programming/Python 2023. 6. 16. 12:05
우리가 재사용성이 높거나, 비밀리에 보관이 되어야하는 변수들이 있는데 우리는 그것들을 환경변수로 만들어 관리를 한다. 그리고 그것을 파일로 만들어놓은게 .env 파일인데 Python 에서 이 파일을 읽어오는 방식이 대표적으로 3가지가 있다. python-dotenv python-decouple pydantic 의 BaseSettings 이렇게 있다. 일단 예제로 쓸 .env 파일은 이렇게 생겼다. SECRET_KEY=klajsdlkfjaaksldhjfowie API_KEY=asdjhflkjdioajdf908123jklqsd9a8sxd DATABASE_URL=postgres://admin:admin1234@localhost:5432/test python-dotenv 설치 pip install python-..
-
[Django] DRF Nested RouterProgramming/Python 2023. 6. 13. 14:42
URL 을 설계할 때 Nested Resource 에 대해 설정하려고 하면 코드가 복잡해지는 경우가 있다. 일단 Django 에서 DRF View 를 사용한다면 해당하는 부분에서 분기점을 나누어줘야 한다. PK 가 있는 경우에 동작과 없는 경우에 동작으로 말이다. urlpattenrs = [ path('repositories//folders/', FolderView.as_view({'get': 'detail'})), path('repositories//folders', FolderView.as_view({'get': 'list'})), ] 위의 코드를 보면 현재 두 개의 자원에 대한 키를 받고 있다. 하지만 만약에 키가 늘어나게 될 경우에는 복잡도가 커져 오히려 안 쓰는 것만 못 할 수도 있다. 그렇기에..
-
[Django] Serializer HiddenField 활용Programming/Python 2023. 6. 13. 08:02
A field class that does not take a value based on user input, but instead takes its value from a default value or callable. HiddenField 는 위의 설명과도 같이 클라이언트가 입력해서 넣은 값이 아닌 정해진 값 혹은 호출가능한 객체에서 입력을 대신한다. 홈페이지 예제 modified = serializers.HiddenField(default=timezone.now) 위의 예제는 해당 요청을 받은 순간의 시간을 설정한다. 하지만 해당하는 부분은 아래의 예제로 어느정도 조작이 가능하기에 방법의 다양성을 늘리는 측면이라고 생각하면 될 것 같다. modified = models.DatetimeField(au..
-
[Django] Django Proxy Model 을 활용한 방법Programming/Python 2023. 6. 13. 07:57
Django Proxy Model 을 활용한 방법 프록시 모델을 만드는 방법 # models.py from django.db import models from django.utils import timezone # 기본으로 상속받는 모델 class BaseModel(models.Model): created = models.DateTimeField(auto_now_add=True) updated = models.DateTimeField(auto_now=True) deleted = models.DateTimeField(null=True, blank=True) class Meta: abstract = True # 원본이 될 모델 class Item(BaseModel): name = models.CharFiel..
-
[Django] Django Admin 리스트 페이지 사용하기Programming/Python 2023. 6. 12. 11:34
Django Admin 리스트 페이지 사용하기 기본적인 사용 방법 from model import Item from django.contrib import admin admin.site.register(Item) 위의 있는 코드는 정말 기본적인 코드이다. 그래도 저것만으로도 이미 많은 부분을 다룰 수 있게 해준다는 점에서 Django Admin은 매우 유용하다. (ID 만 보고 Detail 페이지 들어가기, ID 만 보고 Row 삭제하기) 또, 손쉽게 기능을 추가하는 것도 가능하다. HTML 건드는 것 빼고 말이다. (필터, 정렬, 검색, 추가적인 액션) 여기에서 나는 내가 겪었던 문제들을 해결했을 때의 방법을 쓰려고 한다. 거기에는 간단한 것도 있었고 이정도로 할 정도면 그냥 Admin 을 프론트에서 ..
-
[Fluent Python]객체 참조, 가변성, 재활용Programming/Python 2023. 6. 12. 10:32
객체를 참조한다 ⇒ 주소에 할당되어 있는 메모리 주소를 공유한다. 객체는 생성되고 선언되어진다. == 는 객체의 값을 비교한다.(eq() 특별 메소드를 호출함) is 는 객체의 정체성을 비교한다.(속도가 더 빠름, 특별 메서드 호출을 안함) 기본 복사는 얕은 복사 리스트 혹은 내장 가변 컬렉션을 복사하는 가장 손쉬운 방법은 그 자료형 자체의 내장 생성자를 사용 l1 = [3, [55,44,(7,8,9)] l2 = list(l1) l2 # [3, [55,44,(7,8,9)] l2 == l1 # True l2 is l1 # False l3 = l1[:] # 얕은 사본을 생성(Shallow Copy) 최상위 컨테이너는 복사하지만 사본은 원래 컨테이너에 들어 있던 동일 객체에 대한 참조 l1 = [list, t..