본문 바로가기

Python28

[Django] File upload (FileField, ImageField) Django 에서 파일(이미지)를 업로드하기 위해서는 FileField 또는 ImageField 를 사용하면 된다. Django Test Project 만들기 테스트를 위해 간단한 프로젝트를 만든다. (Pycharm 을 사용한다면 더 쉽게 프로젝트를 만들 수 있다.) $ django-admin.py startproject firstsite 주로 Django project 에서는 startapp 명령어를 통해 app 을 만든다음 application 단위로 코딩을 하지만 본 가이드에서는 Django Project 를 만드는게 목적이 아니므로 app 을 따로 만들지 않고 project 에서 바로 테스트를 할 것이다. (db 또한 Django 에서 제공하는 sqlite3 을 사용할 것이다.) settings... 2016. 10. 19.
[Django] uwsgi + nginx in ubuntu 이 페이지는 https://www.digitalocean.com/community/tutorials/how-to-serve-django-applications-with-uwsgi-and-nginx-on-ubuntu-14-04 사이트에 설명된 가이드 해석 및 테스트를 하며 발생된 이슈를 정리합니다. ~~ 작성중 (이 부분의 내용은 프로젝트 생성 관련 내용으로 위의 링크에서도 이해하기 쉽습니다.) ~~uWSGI 애플리케이션 서버 설정하기이제 두개의 Django 프로젝트 설정을 마쳤고, uWSGI 설정을 할 준비가 되었다. uWSGI 는 Django 애플리케이션과 WSGI 라는 표준 인터페이스로 통신하는 애플리케이션 서버이다. ubuntu에서 Nginx와 uWSGI 를 설정하는 더 자세한 사항은 여기에서 확인.. 2016. 10. 18.
[Python] SQL Injection 과 보호 방법 SQL injection protection장고의 queryset(ORM)을 사용할 경우, SQL injection을 막아준다. 하지만 raw queries를 사용하는 extra(), RawSQL를 사용하거나 실제로 connection을 통해 직접적인 쿼리를 통해 사용할 경우에는 SQL injection 처리를 따로 해줘야 한다.Python SQL injectionhttp://bobby-tables.com/python.html 에서 Python SQL injection 방법에 대해 설명하고 있다.Bad:cmd = "update people set name='%s' where id='%s'" % (name, id)curs.execute(cmd)Good:cmd = "update people set name=.. 2016. 10. 13.
[Django] Test # Django Unit tests- Python 3.3 밑의 버전의 경우, unittest.mock 모듈의 백포트를 설치해야 함.- Django의 버전이 낮을 경우, settings file을 명시해 주어야 함.- Selenium 테스트 시, Selenium 2, Firefox, Python >= 2.6이 필요하며 selenium package(version > 2.13) 설치 필수. -> 실행 시에 --selenium 옵션으로 실행한다. $ ./runtests.py --settings=test_sqlite --selenium admin_inlines 1. Django Unit test의 특징 Django는 project나 app을 생성하게 되면 기본적으로 tests.py라는 파일이 생성된다.(unit.. 2016. 10. 12.
[REST] Serializer fields Serializerserializer는 querysets과 model instances와 같은 복잡한 데이터를 JSON, XML, 또는 다른 타입으로 Python 데이터 타입이 쉽게 rendering될 수 있게 한다. 또한, serislizers는 deserializer(데이터를 복잡한 타입으로 다시 파싱하는 것)와 들어온 데이터를 validation 체크를 한다. REST framework의 serializer는 Django의 Form 과 ModelForm과 유사하다고 한다. Serializer는 가장 기본적인 방식으로 응답 결과를 컨트롤하고 ModelSerializer는 model instances와 querysets을 다루는데 이용된다.serializer의 사용법 및 종류에는 여러가지가 있으므로 D.. 2016. 10. 11.
[REST] Nested relationships Nested relationshipsNested relationsips는 serializers 자체를 serializer 필드로써 사용하는 방법이다.만약, serializer를 리스트 파라미터로 받고 싶은 경우, 필드를 추가할 때 many=True를 추가하면 된다.Example: class TrackSerializer(serializers.ModelSerializer): class Meta: model = Track fields = ('order', 'title', 'duration') class AlbumSerializer(serializers.ModelSerializer): tracks = TrackSerializer(many=True, read_only=True) class Meta: model =.. 2016. 10. 11.
[REST Framework] extra()를 사용한 AS serializer 필드 등록 이 페이지는 Django, REST Framework의 Class based API인 ViewSet을 사용하는 것을 기반으로 설명하고 있습니다. 장고 모델에 있는 컬럼을 AS 를 이용하여 다른 변수를 추가하여 표현하고 싶을 때, 장고의 extra()를 사용하면 SQL의 AS로 치환된다. SELECT SUBSTRING(da_date, 1, 4) AS year, da_date FROM test_table; 위와 같이 da_date라는 컬럼의 값을 substring()을 이용하여 year라는 값을 추가하고 싶다. 이럴 경우, queryset의 extra()함수를 사용하면 된다.views.py TestTable.objects.all().extra( select={'year':'SUBSTRING(da_date, .. 2016. 10. 10.
[Django] Extra extra()extra(select=None, where=None, params=None, tables=None, order_by=None, select_params=None) 장고에서는 복잡한 WHERE 절을 표현하기가 쉽지 않은 경우가 있다. 이러한 경우에 extra() 를 사용하면 된다. 하지만 장고 문서 사이트에서는 QuerySet으로 표현이 안되는 최후의 경우에만 사용하는 것을 권고하는 것 같다.정의에 의하면, extra lookups를 사용하면 다른 데이터베이스 엔진으로 변경될 때 SQL 코드가 명시적으로 작성된 것이 아니기 때문에 이동할 수 없을지도 모르고, DRH principle을 위반한다. 그래서 가능하면 extra() 사용을 피해야 한다.params, select, where, tab.. 2016. 10. 6.