본문 바로가기

Django RuntimeWarning: DateTimeField ... received a naive datetime #python 글 제목처럼 Django에서 RuntimeWarning: DateTimeField ... received a naive datetime가 발생하면 settings.py의 USE_TZ 값을 확인해보시면 됩니다. 아마도 True로 설정되어 있을 것 같은데요. 아래와 같이 False로 변경해주시면 warning이 사라집니다. USE_TZ = False 아래와 같은 DateTimeField에 값을 입력하거나 업데이트 할 때 발생할 수 있습니다. dttm = models.DateTimeField(auto_now_add=True, null=False) 국내에서만 서비스 한다고 하면 USE_TZ False로 써도 될 것 같고요. 해외 사용자도 고려되야 한다면 USE_TZ = True, DateTimeField도 tz.. 더보기
django.core.exceptions.FieldError: Related Field got invalid lookup: icontains django.core.exceptions.FieldError django.core.exceptions.FieldError: Related Field got invalid lookup: icontains 이렇게 에러나 가는 경우에 FK 관련된 내용을 검토해보시면 됩니다. 저 같은 경우에는 search_fields에 FK를 바로 썼더니 에러가 나더라고요. 당연한거죠 ! search를 column 단위로 해야지 object 단위로 하려고 하니까 에러가 발생할 수 밖에요 ! 예를 들어서 news라는 FK가 있다고 합시다. search_fields에 적어줄 때는 news의 어떤 컬럼인지 적어줘야 합니다. search_fields = ('news',) #error title이라는 column이 있다고 가정하고 작성.. 더보기
DRF Custom Permission DRF Custom Permission Django에서 특정 그룹에 속해있는 유저만 실행할 수 있는 viewset을 만들어봅시다 !! 일단 "NGEE" 라는 그룹이 생성되어 있다고 가정할 때 아래와 같은 permission 클래스를 하나 만들어줍니다. ngeePermission의 has_permission이 하는 일은 request.user.groups 이름을 가지고 와서 거기에 NGEE가 있는지 없는지를 리턴해줍니다. NGEE 라는 그룹에 속해있다면 True가 리턴될 것이고 반대로 속해있지 않다면 False가 리턴되겠죠? from rest_framework.permission import BasePermission class ngeePermission(BasePermission) def has_perm.. 더보기
Django Mysql Warning - utf8mb4 Django에서 DB를 mysql로 사용하는 경우에 아래와 같은 WARNING을 만나게 되는 경우가 있습니다. django_mysql.W003 The character set is not utf8mb4 for database connection 'default' HINT: The default 'utf8' character set does not include support for all Unicode characters. It's strongly recommended you move to use 'utf8mb4'. See: https://django-mysql.readthedocs.io/en/latest/checks.html#django-mysql-w003-utf8mb4 해당 문서를 확인해보니까 간단하.. 더보기
django-crontab 소개 (특정 모듈 주기적으로 실행하기) Django-crontab 적용하기 django-crontab으로 특정한 모듈을 주기적으로 실행하는 것이 가능합니다. 물론 직접 crontab에 잘 작성하는 것도 방법이겠지만 라이브러리로 어느정도 간단하게 관리가 가능하니까 사용하는 것이 좋을 것 같습니다. 설치는 pip install django-crontab settings.py에 아래와 같은 내용을 포함해줍니다. INSTALLED_APPS = [ ... ... 'django-crontab', ] ... ... CRONJOBS = [ ('* * * * *', 'app_name.file_name.def_name', '>> /log_path/log_file.log') ] INSTALLED_APPS는 당연한거니까 PASS ! CRONJOBS에 적절히 추가해.. 더보기
Django Ckeditor File Upload Permission 아주아주 멋진 django ckeditor로 게시글 작성하는 Form을 만들 수 있습니다. 이미지 업로드, 파일 업로드도 구현하지 않고 그냥 Ckeditor에 있는 것을 사용해도 좋고요. 다만 file upload의 경우에 권한 에러가 나더라고요. 소스코드를 확인해보니까 Staff 이상만 업로드 할 수 있어서 저는 풀어서 사용하고 있습니다. 권한에 맞춰서 사용할 수 있도록 추가 구현하면 되겠죠? if django.VERSION >= (1, 8): urlpatterns = [ url(r'^upload/', views.upload, name='ckeditor_upload'), url(r'^browse/', never_cache(staff_member_required(views.browse)), name='c.. 더보기
Favicon Image Add to Django Admin Site 장고 어드민 사이트 (Django Admin Site)에 파비콘 이미지를 추가하는 방법을 요약해봤어요. 1. templates/admin/base_site.html 을 만들어서 원래 django에서 제공하는 base_site.html 내용을 그대로 붙여넣습니다. base_site.html의 위치는 ......../lib/python2.7/site-packages/django/contrib/admin/templates/admin에 있습니다. python 버전이나 virtualenv 환경에 따라서 약간 다를 수 있지만 django 아래 부터는 동일할거에요. 열어보시면 아래 그림과 같습니다. 물론 여기에 있는 코드를 고치면 되겠지만 서버로 배포할 때에는 또 서버에서 수정해야 하니까 불편하죠. 그래서 여러분의 .. 더보기
django 'load staticfiles' and 'load static' django에서 {% load staticfiles %} 와 {% load static %} 둘 중에 어떤 것을 사용하는게 맞을까요? 공식 문서에서는 {% load static %} 을 추천하고 있습니다. https://docs.djangoproject.com/en/2.2/ref/templates/builtins/#static pytest로 돌려보시면 {% load staticfiles %} >>>> {% load static %} 으로 변경하라는 warning이 계속 나와요. 이런 것들을 보았을 때 앞으로는 load static을 사용하는게 맞는 것 같습니다. 아마도 load staticfiles가 삭제될 예정이겠죠. 저도 load static으로 모두 변경했어요. 테스트 과정에서 나오는 warning.. 더보기
django allauth models 를 admin에서 unregister하기 django allauth 많이 사용하시죠. 저도 사용하고 있는데 진짜 단순한 기능만 몇 개 사용하는데 admin에서는 많은 model들이 추가로 불려져서 복잡해지곤 합니다. 그래서 저는 안쓰는 것들은 admin에서 안보이게 하고 싶었고요. 아래와 같은 코드로 일부 allauth에서 추가되는 것들을 admin에서 제거했습니다. admin.site.unregister(model_name) 이런 식으로 작성하시면 되는데 저는 EmailAddress, SocialAccount, SocialToken, SocialApp 모델을 사이트에서 안보이게 하고 싶었습니다. 일단 allauth를 추가하시고 admin 사이트에 들어가보셔서 사용하실 것들은 남기고 필요 없는 것만 unregister 하시면됩니다. 만약 소셜 .. 더보기
Django Allauth Login Page Custom Django에서 사용자 관리로 allauth 많이 사용하죠. 저도 사용하고 있는데 기본적으로 제공하는 페이지는 이쁘지 않죠 ! 그래서 custom을 해야 하는데 간단하게 정리해봅니다. 1. login.html을 만들어주시면 됩니다. 위치는 templates/account/login.html 입니다. accoutn/login.html을 정확하게 지키지 않으면 기본 페이지가 나옵니다. 2. 맘대로 변경하시면됩니다. 저는 bootstrap도 사용해서 login.html에 bootstrap cdn으로 적용하고 아래를 꾸미면 되겠습니다. 하지만 form.as_p 부분은 걍 불러온 것이기 때문에 이것은 따로 조정해야 합니다. 3. settings.py에 아래 설정을 추가합니다. ACCOUNT_FORMS = {'lo.. 더보기
Django User Profile 적용하기 with allauth models.py에 UserProfile 모델을 하나 생성합니다. 저는 TestUserProfile을 하나 만들었고 user, gender, address를 가지고 있습니다. user는 User모델과 1:1 매칭됩니다. gender와 address는 그냥 charField입니다. 제대로 하기 위해서는 알맞은 타입을 가져야 하겠죠 ? 다음은 forms.py 에다가 SignupForm을 생성해줍니다. gender, address 에 해당하는 form 필드를 만들어 줍니다. widget을 설정할 수 있습니다. attrs에 class를 추가할 수 있고요. signup 함수를 만들고 profile, user를 저장하는 코드를 작성해줍니다. python manage.py makemigrations python ma.. 더보기
Django Admin : site register Django Admin 페이지에서 site를 추가해보면 domain_name과 display_name이 나옵니다. ID는 표시되지 않는데요. 가끔 setting.py 에 SITE_ID를 적어야 하는데정확한 값을 알려면 DB를 접속하거나 CODE를 더 작성해야 하니까요. ID가 표시되면 좋겠죠. 아래와 같이 ID를 추가하려면 site를 unregister를 통해 해제했다가 다시 register를 통해 불러와야 합니다. 코드는 아래와 같습니다. 더보기
Django Rest Framework : 3.5 to 3.8 Django + Django Rest Framework 버전업이 쭉쭉 되는 것 같아요. 아니면 제가 좀 늦게 버전업을 따라가는 걸지도 모르겠네요. 3.5 to 3.8에서 아래와 같은 warning이 발생하더라고요. 감히 DEFAULT_PAGINATION_CLASS를 설정하지 않고 PAGE_SIZE를 설정했다고 하는군요. 해결 방법은 DEFAULT_PAGINATION_CLASS를 설정하거나 PAGE_SIZE 설정을 닫거나 이겠죠.저는 PAGE_SIZE 설정을 주석처리 해버렸습니다. DEFAULT_PAGINATION_CLASS 와 관련한 DRF 문서는 http://www.django-rest-framework.org/api-guide/pagination/#pagination 요걸 참고하시면 될 것 같습니다... 더보기
장고 어드민 커스터마이징 (Django Admin Customizing) 와 ! 아래 사이트 정말 좋네요. 장고 어드민 사이트 변경하고 싶을 때 항상 구글링 해왔는데요. 정말 잘 정리된 것 같아요. 요 내용 하나씩만 따라하면 왠만한 커스터마이징은 쉽게 할 수 있을 것 같습니다. 오랜만에 정말 마음에 드는 사이트를 알게되서 공유해봅니다. https://books.agiliq.com/projects/django-admin-cookbook/en/latest/ 더보기
Django User Password Change using Command Line Django 사용자 패스워드를 변경하기 위한 Command Line은 아래와 같아요. python manage.py changepassword user_name 입력하게 되면 password를 다시 입력할 수 있습니다.successfully for user 'user_name' 메시지가 나왔다면 성공적으로 변경된 것입니다. 더보기
Django Admin : edit link disable Django Admin 페이지에서 모델에 대한 객체를 추가하거나 삭제, 수정하는 것이 가능하죠. 아무런 설정을 하지 않았다면 아래와 같은 그림을 볼 수 있습니다. 주로 ID를 선택하면 수정 페이지로 이동합니다. 아래는 수정 페이지이고요. 코드에 아래와 같이 list_display_links = None으로 설정하면 수정페이지로 이동하는 링크가 모두 제거됩니다. 잘 안보이실 수도 있지만 ID Column은 링크가 삭제되면서 평범한 텍스트가 되었습니다. 당연히 클릭해도 아무런 반응이 없습니다. 이번에는 list_display_links에 몇 개의 column을 입력해봤습니다.결과는 쉽게 예상되시죠? 아래 그림과 같이 list_display_links 에 지정한 column에 모두 링크가 생성되었습니다. 아래.. 더보기