html form 필드에 다양한 속성값을 주고 싶다...이건 기본이다. 장고 폼을 쓰면서 이런 속성을 쉽게 줄 수 있는 방법은 다양하게 있겠지만 그냥 아래 글 처럼 속성을 주는 것이 편할 듯 이글을 참고하시길 => Django Form에서 DOM class 설정 등의 front-end 조작법 # myapp/forms.py class MyForm( forms.ModelForm ): class Meta: model = MyModel def __init__( self, *args, **kwargs ): super( MyForm, self ).__init__( *args, **kwargs ) self.field[ 'my_field' ].widget.attrs.update( { 'class': 'form-cont..
제목이 거창한데 Django Ninja API 엔진에 기본 인증 방식에 Redis 를 이용하여 사용자별 JWT 토큰 값을 하나만 관리하도록 설정해 보았다. 머 Blacklist 비슷한거 아닌가? 로그인 한 후에 Redis 에 사용자 ID 키로 토큰을 저장해 두고, 다시 Login API가 호출되면 새로운 token이 발행되도록 한다. 이렇게 하면 사용기한이 남은 토큰이라도 재 발행되는 순간 쓸 수가 없게 된다. Redis 대신에 그냥 Session 정도 사용되도 될 듯 하지만 머 일단 구색으로 class AuthBearer(HttpBearer): def authenticate(self, request, token): try: print(request.headers) print(request.headers..
파일 생성을 임의로 막 할 수 없기에 메모리상에 데이터를 zip 으로 묶어서 다운로드 해야 하는 경우가 생긴다. 대부분의 예제들이 파일을 기반으로 되어 있어서 response 로 바로 내려주는 것을 찾기 어려웠는데, 아주 좋은 예제가 있어서 소개한다. 이미 많은 곳을 거쳐서 테스트 했는데 아래 코드가 그나마 동작 가능한 코드이다. https://stackoverflow.com/questions/67454/serving-dynamically-generated-zip-archives-in-django import io def my_downloadable_zip(request): zip_io = io.BytesIO() with zipfile.ZipFile(zip_io, mode='w', compression=..
전처리, 혹은 사용자가 중복으로 필요한 기능을 모아서 데코레이터로 작성해 두는 경우가 많다. 대부부의 함수에 적용시키거나 특정 함수에서 필요한 기능을 부분부분 적용시키는 데 최적이다. 일단 만들고 나면 대상 함수, 클래스에 적용하는 방법을 알아야 한다. Fuction based view 와 Class based view 에 적용 방법이 각각 다르다. 아래 사이트에 아주 잘 설명이 되어 있다. 원본 사이트로 들어가서 보시면 제 맘에 부담이 덜하겠네요 공부하는 것을 기록해 두는 용도지만 작성자의 노고를 위해서는 사이트로 가서 봐줘요 https://parkhyeonchae.github.io/2020/03/25/django-project-05/#2-decorator-%EC%A0%81%EC%9A%A9 그래도 정리..
pymongo 를 쓰니 편리하게 find 함수로 mongo shell 처럼 검색을 할 수 있다. ObjectID로 검색하려니 ObjectID 로 바꾸는 함수가 별도로 필요로 해 보이는데 (원격 쉘 접속으로 명령을 전달하는 것이 아니니깐) 아래와 같은 귀중한 코드를 구할 수 있었다. 좋은 분들이 많다. 꼭 방문해 주세요 https://ssamko.tistory.com/38 [pymongo] ObjectId로 검색하기 mongodb(pymongo)를 사용하다보면 ObjectId로 검색해야 할 일이 종종 생긴다. mongodb shell에서는 간단하게 아래와 같이 호출할 수 있지만 db.getCollection('collection_name').find({'_id':ObjectId('5f6d775c2.. ss..
한글로 된 예제를 찾기 어려웠는데, 가뭄에 단비 같은 한 개의 글이 발견! Django-ninja로 JWT token 발행 해보기 https://goo-eungs.tistory.com/64 로그인 할때, JWT 토큰을 발행해 주고 (아래 코드를 참고하시면 된다) @router.post('/sign-in/') def signIn(request): payload = { 'id': 2, 'exp': datetime.datetime.now() + datetime.timedelta(minutes=60), 'iat': datetime.datetime.now() } token = jwt.encode(payload, 'secret', algorithm='HS256') return {"token": token} HTTP..
장고에서는 아주 편리한 기능들이 거의 내장이 되어 있다. 숫자 표기시에 1000단위로 컴마를 넣는 것이 사람이 보기에 편하다고 느낀다니 이를 구현하려고 했는데 이미 humanize 라는 기능이 있다. settings.py 파일에 이 기능을 APP 에 추가하고 INSTALLED_APPS = [ ... 'django.contrib.humanize', 필요한 템플릿 페이지에서 로드해서 사용하면 된다. {% load humanize %} 라고 선언하고 실제 필요한 필드에 가서는 ` | intcomma ` 를 추가하면 된다. {{ item.quantity | intcomma }} 끝. 참고페이지는 아래 https://docs.djangoproject.com/en/4.0/ref/contrib/humanize/ dj..
판다스의 Dataframe 에 저장된 필드의 datetime 의 시간대를 한꺼번에 바꿔보려고 여기저기 검색 일단 시간대 변경을 위해 tz_convert('Asia/Seoul') 메소드를 사용해야 할 것으로 이해하고, 출처: https://rfriend.tistory.com/505 [R, Python 분석과 프로그래밍의 친구 (by R Friend)] 판다스 dataframe 에 전체 필드 데이터에 바로 할 수 있는 장점이 있네. 근데 약간 편법같은걸로 햇는데 정답인줄을 모르겟음 계속 dt 형변환해서 메소드 호출하고 이렇게 써야 하나? resultDf['Start Time'] = resultDf['Start Time'].dt.tz_convert(TIME_ZONE).dt.strftime('%H:%M:%S')..
장고 모델을 만들다 보면, unique 필드로 키를 등록해서 사용하곤 한다. 그런데 중복은 되는데 각 사용자별 중복은 허용하지 않도록 지정하기 위해서는 2개 이상의 필드를 묶어서 unique 하게 동작하도록 해야 한다. 이때 사용하는 구문은 다음과 같다. UniqueConstraint https://stackoverflow.com/questions/2881043/django-create-a-unique-database-constraint-for-2-or-more-fields-together Django 2.2 introduced UniqueConstraint and the note in the official documentation on this topic suggests that unique_toge..
HTML id 를 비슷하게 줘서 이벤트 처리를 하나로 하고 싶은 경우가 많다. 동일하게 주기는 찝찝하고, 뒤에 인덱스 같은거 붙여서 같은 기능을 하는 놈들을 비슷한 id로 묶어 뒀는데, 개별적으로 이벤트 처리하려니 영 맘이 안내킨다. 간단하게 JQuery 쓰면서 정규식 비스무리한 거 쓰면 해결!! 원본 글로 방문해서 보는 것을 추천 - https://m.blog.naver.com/cutesboy3/221080367471 for의 index를 부여해서 id값을 부여하여 id가 클릭시 클릭 이벤트처리하는 방법을 아래 스크립트(정규식)으로 처리 할수 있다. $("[id^='useGo_']").click(function() { // 기능 구현하기 }); 간단하게 설명을 하면 //id가 testid로 시작하는 엘..
걍 SQL 쿼리로 업데이트 하고 싶은뎅, ORM에서 제공하는 방법으로 쓰고 싶당. 그냥 변수에 넣고 save() 함수를 부르니 객체 하나씩은 되는데 쿼리셋 전체에 대해서 하는 것은 안되네. 머야 이런것도 안되....................................가 아니라 update() 함수가 따로 있다는 >>> Entry.objects.filter(id=64).update(comments_on=True) 1 >>> Entry.objects.filter(slug='nonexistent-slug').update(comments_on=True) 0 >>> Entry.objects.filter(pub_date__year=2010).update(comments_on=False) 132 한줄로 가쟝 s..
장고 템플릿에서 전달 받은 리스트가 막상 까보니 비어 있을때를 체크해야 한다. 보통 표로 쭉 나열하는게 기본인데, 리스트가 비워져 있다면 테이블 제목만 떡 하니 나오게 되니 플래그를 따로 다시 전달해 주는 것도 방법이지만, 이미 내장 empty 라는 키워드가 있네 그냥 쓰기만 하면 되 소스 - https://docs.djangoproject.com/en/4.0/ref/templates/builtins/ {% for athlete in athlete_list %} {{ athlete.name }} {% empty %} Sorry, no athletes in this list. {% endfor %} 위의 코드처럼 for 문안에서 endfor 닫기 전에 empty 를 사용하면 된다 Pixabay 님의 사진,..
최근 며칠 데이터 가져오기 요거 많이 쓸 듯 아래 사이트에서 가져옴 https://chartio.com/resources/tutorials/how-to-filter-for-empty-or-null-values-in-a-django-queryset/ Now, by using filter(), we can retrieve a QuerySet of just those books that were published within the last 90 days period, like so: >>> from datetime import datetime, timedelta >>> Book.objects.filter(date_published__gte=datetime.now() - timedelta(days=90)).c..
장고의 데이터 처리를 위해서 csv 내보내기를 기본 csv 라이브러리를 쓰니깐 속도가 너~~~~~~~~~~무 느려 어쩔수 없이 Pandas를 사용할 수 밖에 없네 to_csv 를 사용해서 내보내는데, 몇 초 만에 되네 ㅋㅋㅋ 한줄씩 내보내기 하니깐 몇 분 기다려도 안되던데... 암튼 내보내기 하니깐 앞에 원하지 않는 인덱스 값이 컬럼으로 들어와서 불편해서 제거하는 것을 찾아보니 떡 있네. 8-파이썬-데이터프레임의-인덱스-제거하기 정말 간단한데 to_csv 혹은 to_excel 함수를 사용하실 때 아래 코드처럼 'index=False' 만 추가하면 되거든요 👍 # file1을 인덱스 없이 '실습1_수정.xlsx'파일로 내보내기 file1.to_excel('실습1_수정.xlsx',index=False) 실제..
솔루션을 만들어도 배포해서 세상에 공개하는 것이 기술인 세상이다. 이것저것 관련 글 소스가 많지만 일단 아래 글을 참고해보자. 간단한 Django 어플리케이션 AWS에 배포하기 간단한 Django 어플리케이션 AWS에 배포하기 전통적인 방법으로 Django 어플리케이션 EC2 인스턴스에 배포하기 nearkim.coffee Gunicorn, Nginx 설치도 같이 포함되어 설명되어 있다. conf 파일 설정 방법도 물론 소개되어 있고 AWS 말고 추가로 MS Azure, Google Cloud 에도 배포하는 내용이 찾아지면 이페이지에 업데이트 하고, 제목을 바꿔야 겠다. Deehooks 님의 사진, 출처: Pexels