본문 바로가기

Django Admin : Class Name Change (Verbose name) Django Admin 페이지에 클래스 이름을 변경하기 위해서는 models.py에 접속해서 해당 클래스의 Meta에 verbose_name과 verbose_name_plural을 직접 설정하면 됩니다. 이에 대한 자세한 설명은 Django 문서에서 확인할 수 있습니다. verbose_name - https://docs.djangoproject.com/en/1.11/ref/models/options/#verbose-name verbose_name_plural - https://docs.djangoproject.com/en/1.11/ref/models/options/#verbose-name-plural 아래와 같이 적용이 가능합니다. 적용 결과는 아래와 같고요. 조금이라도 더 보기 좋게 바꾸는 것을 계속하.. 더보기
locust.io basic test Locust라는 오픈소스를 활용해서 부하테스트를 해봤어요. (site : http://locust.io/, documentation : http://docs.locust.io/en/latest/) JMeter가 대표적이긴 한데요. 파이썬 기반으로 옮기고 싶었고 기능이 많지 않아도 부하만 잘 걸어줄 수 있으면 좋겠다고 생각했거든요. 아무튼 Locust를 사용해본 내용을 간단하게나마 정리해둡니다. 1. install pip install locustio 2. locust file create documentation 을 참고하셔서 테스트를 코드로 만들면 됩니다. 3. execute 단일 환경에서 부하를 발생할 때에는 locust -f locust_file.py --host=domain_name 으로 실행하면.. 더보기
Allow Cross-Origin Resource Sharing in Django Django에서 CORS 허용하는 방법에 대해서 작성해둡니다. 일단 CORS 에러는 다른 서버에서 리소스 요청이 올 때 발생하는 것인데요.아래에 자세히 설명되어 있네요. https://developer.mozilla.org/ko/docs/Web/HTTP/Access_control_CORS CORS 에러는 Chrome Developer Tool에서 보면 아래와 같이 보이죠. 불필요한 것은 좀 가렸고요. Access-Control-Allow-Origin .... CORS 문제입니다. Django 환경에서 CORS 설정을 쉽게 설정하기 위해서는 django-cors-headers를 사용하면 편리합니다. https://github.com/ottoyiu/django-cors-headers 설치는 pip insta.. 더보기
pip Installed Package List -> Text File pip로 설치된 여러 패키지들을 Text File로 저장하는 것은 매우 간단한데요. 바로바로 pip freeze > requirements.txt requirements.txt를 열어보면 아래와 같은 형식으로 되어있어요. 요 requirements.txt 파일을 가지고 다른 곳에서 한 번에 설치하는 것은 pip install -r requirements.txt 라고 하시면 됩니다. 아래와 같이 설치가 됩니다. 여러 모로 virtualenv랑 빠질 수 없는 pip 같아요 !! 더보기
Django Cache example 캐시 사용 여부에 따라 반응 속도가 정말 많이 차이나기 때문에 꼭 캐시를 사용하는 것이 좋습니다. 저는 캐시를 위해서 Redis를 사용하고 있습니다. Django + Redis 셋팅은 2017/02/19 - [ # 파이썬/- Django&REST] - Django와 ElastiCache 연결 포스팅에서 찾아보실 수 있어요. 활용 방법은 아래와 같습니다. 중요한 것은 cache.get(), cache.set() 을 적절히 사용하면 되는거죠.그리고 여러 번의 테스트를 통해서 원하는 결과가 잘 리턴되는지 속도가 빨라지는지 확인해보는거죠 !! 위 소스를 간단하게만 살펴보면 다음과 같습니다. 일단 cache.get('items')으로 캐시에 저장된 것이 있는지 확인합니다. None이 아니라면 캐시에서 받아온 데이.. 더보기
Django template setting 1.9 to 1.10 Django 1.9 버전에서 1.10으로 이동할 때 Template를 찾지 못하는 에러가 나는 경우가 있어요. 아래 그림 처럼 변경되었으니깐 참고하세요. 문서와 Stack Overflow를 찾아보니 django.core.context_processors.request가 django.template.context_processors에 포함되었기 때문이라고 하네요. 더보기
Fabric - get branch name Fabric에서 내부 변수로 git branch 이름을 받아오는 것은 아래와 같이 합니다. git_branch = local('git rev-parse --abbrev-ref HEAD', capture=True) local 함수가 기본적으로 capture=False로 작동하는데 True로 변경하면 값을 가져올 수 있습니다. http://docs.fabfile.org/en/1.13/api/core/operations.html 더보기
Django와 ElastiCache 연결 AWS가 워낙 쉽게 서비스하고 있어서 큰 문제는 없지만 간단하게라도 정리해둡니다. 저는 Django 캐시를 Redis로 사용하고요. AWS 환경에서 실제 서비스하기 위해서 ElastiCache를 사용하고 있습니다. 일단 ElastiCache 서버를 하나 생성해서 완료되면 아래 그림과 같이 보입니다. Status가 available이면 사용 준비가 완료되었다는 거죠 !! Endpoint를 복사해서 Django Settings.py 파일에 입력하면 끝입니다. 다만 EC2에서 접근할 수 있도록 Security Group - Inbound에 6379 포트를 하나 추가해줍니다. Source에는 EC2 IP를 적어도 되지만 ElastiCache 자체가 기본적으로는 AWS 환경안에서만 접근 가능하기 때문에 0.0.0.. 더보기
PostgreSQL Index print (using sql) PostgreSQL에서 테이블 인덱스를 출력하기 위한 SQL문은 아래와 같습니다. select * from pg_indexes where tablename = 'table_name'; 실제로 돌려보면 위 그림과 같이 나오고요. pgadmin3에서 직접 pg_indexes에 접근해서 볼 수도 있습니다.아래 그림 화살표를 따라가면 됩니다. Database - Catalogs - PostgreSQL (pg_catalog) - Views - pg_indexes 역시 SQL로 각 테이블마다 보는게 편하겠지만 !! 더보기
Django Rest Framework Performance Django Rest Framework Performance 관련해서 많은 도움을 받은 웹 문서를 하나 추천합니다. Web API performance: profiling Django REST framework https://www.dabapps.com/blog/api-performance-profiling-django-rest-framework/ 저도 최적화 할 때 위 내용을 많이 사용했어요. 기본적인 내용인데 이런 것들을 잘 기억해서 다음번 설계에도 반영해야겠어요. 1. Serializer를 통과시키지 말고 필요한 데이터만 values로 뽑아올 것 2. 캐시를 잘 사용하자 3. view를 슬림하게 유지하고 HttpResponse 사용하자 캐시는 꼭 해야 하는 것 같아요. :-) 위 내용을 적용하면서 .. 더보기
Mac에서 Redis Sock 찾지 못해서 시작 안될 때 제가 지금 사용하고 있는 개발 환경은 주로 맥(Mac)입니다. 캐시(cache)를 위해서 Redis를 사용하는 편인데요. 맥을 재부팅하면 Redis Socket을 찾지 못해서 runserver가 실행되지 않는 경우가 종종 발생했죠. 그래서 종종 재시작을 해서 (참 바보 같은) 문제를 해결했습니다. 아래 명령어로 한 번에 해결할 수 있었는데 .. brew services restart redis 아무튼 위와 같은 명령어로 redis를 재시작할 수 있고 sock도 잘 만들어내서 문제 해결 !! 참고로 redis upgrade는 아래 그림과 같이 brew upgrade redis 더보기
django admin site : search field Django Admin Site에서 field로 검색하기 위해서는 search_fileds 를 작성해주면 됩니다. 아래는 django documentation의 일부 입니다. https://docs.djangoproject.com/en/1.10/ref/contrib/admin/#django.contrib.admin.ModelAdmin.search_fields 기본적으로는 아래와 같이 적용하면 됩니다. admin.py에 작성하는 class에 search_fields에 column name을 작성하면 검색이 됩니다. admin site에서는 아래 그림 처럼 search input이 보여요. 간단하게 끝 :-) 더보기
Django + Rest Framework + JWT Django + Rest Framework + JWT 에 대해서 간단하게 작동을 실험해봤습니다. 여기는 간단하게 사진으로 정리해두려고 합니다. settings.py 에는 아래와 같이 추가합니다. 'rest_framework', 'rest_framework.authtoken', 'jwtTest', #저는 test app으로 jwtTest라는 앱을 생성했어요. 아래 그림도 settings.py 에 추가하는 부분입니다.구현하려는 시스템에서 원하는 Auth. Class를 추가해주시면 됩니다. 아래는 urls.py입니다. 요 아래는 jwtTest 앱의 views.py입니다. token을 get하는 것과 endpoint를 call하는 방법에 대해서만 잘 보시면 됩니다.Auth. Class를 JSONWebToeknA.. 더보기
Django Rest Sample App 많은 블로그나 웹 문서에서 다루고 있는 내용이라서저는 참고용 소스와 스샷으로 대신합니다 :) 간단하게 물건에 대해 저장 / 관리할 수 있는 앱이라고 생각하시면 되겠습니다.물론물론 당연히 실제로 이렇게 물건들이 관리되진 않겠죠 !! Django + REST 방식이 어떤 소스로 작동되는가 정도를 공유하는게 목표입니다. 1. 구현된 소스를 작동시키고 localhost:8000/product_a/management 로 접근하면 아래와 같은 화면이 나옵니다. Django REST Framework에서 기본적으로 제공하는 화면인데요.실제 get / post 명령어가 여기에서 가능하도록 UI가 구성되어 있습니다. 접속하면 get이 실행되어서 화면에 출력되고요. 하단에 있는 form을 통해서 post 메소드를 실행할 .. 더보기
django to s3 : certificate error hostname Django 에서 사용자가 업로드하는 파일을 S3에 저장하도록 만들어야 하는 경우가 있습니다. 저는 django-storages 라는 것을 사용하고 있고요. django-storages documentation : http://django-storages.readthedocs.io/en/latest/index.html django-storages package : https://pypi.python.org/pypi/django-storages django-storages git : https://github.com/jschneier/django-storages 사용하다 보면 아래와 같은 에러를 만날 수 있습니다. ㅠㅠㅠ CertificateError: hostname 블라블라 하는 에러인데요. setti.. 더보기
django rest : url in serializer django rest framework에서 serializer에 url field에 대해서 간단하게 기록해둡니다. django rest framework에서는 구현한 API를 테스트하거나 활용할 수 있는 웹 용 UI를 기본적으로 제공하자나요. 아래 그림과 같이 말이죠. 위 그림은 get 으로 모든 목록을 받아온 예시입니다. 그림에도 표시한 것 처럼 url 이라는 필드가 있고 그걸 클릭하면 id가 14인 객체 페이지로 이동하게됩니다. 아래 그림을 참고해주세요. GET 주소가 ~~~~/14로 변경된 것을 확인 할 수 있죠. 객체 페이지로 이동하면 delete나 update 기능을 수행할 수 있고요. url 필드는 기본적으로 제공되는 것인데요. 그러니깐 model에 url 이라는 필드가 존재하지는 않아요.se.. 더보기