언어/파이썬 & 장고
-
[Django] model object 에서 dict 타입으로 변환하기언어/파이썬 & 장고 2017. 2. 1. 20:23
django model object to dict!모델객체에서 dict타입으로의 변환은 여러 방법이 있습니다. 참고로 Django ORM에서 model 객체로 결과가 나오는 것은 get()과 같은 형식이여야 합니다. filter()처럼 QuerySet으로 나오는 형태는 에러가 날 수 있습니다.test case모델from django.db import models class OtherModel(models.Model): pass class SomeModel(models.Model): value = models.IntegerField() value2 = models.IntegerField(editable=False) created = models.DateTimeField(auto_now_add=True) r..
-
[Python] dict 생성방법언어/파이썬 & 장고 2017. 2. 1. 17:37
dict()함수를 사용하여 초기부터 dictionary타입의 데이터를 생성하던지 다른 타입의 데이터를 dictionary로 변환하는 방법에 대해 설명합니다.dict()a = dict() a['id'] = 'test' a['password'] = 'test' print(type(a), a) # 또는 temp = {'id':'test', 'password':'qwer'} a = {} for k, v in temp.items(): print(k,v) a[k] = v print(a)dict(key,value)a = dict({'id':'test', 'password':'qwer'}) print(type(a), a)dict(**kwargs)a = dict(id='test',password='qwer') print..
-
[Django] orm으로 가장 최근 pk값 구하기언어/파이썬 & 장고 2017. 2. 1. 14:19
db를 사용할 때 사용자가 insert를 한 다음, 바로 insert가 된 key의 값을 궁금해할 때가 있습니다. 이럴 때 Django에서는 두 가지 방법으로 구할 수 있습니다.예시# 방법 1 key = ModelObj.objects.order_by('-pk')[0].구하고자하는컬럼명 # 방법 2 추천 key = ModelObj.objects.latest('구하고자하는컬럼명')방법 1의 경우 제약이 있는데 pk라고 지정해놓은 부분이 자동으로 증가하는 함수여야만 사용이 가능합니다.따라서 Django에서 제시하는 방법 2를 사용할 것을 추천합니다. orm으로 다른 기능을 사용하고 싶으면 아래 문서를 확인하여 사용하면 됩니다.https://docs.djangoproject.com/en/dev/ref/model..
-
[Django] static 파일언어/파이썬 & 장고 2017. 1. 26. 17:19
Django 정적 파일Django는 실 서비스 환경에서 사용할 정적 파일을 제공하는 기능을 제공하지 않습니다. 서버에 저장된 정적 파일을 읽어들여서 그대로 웹 클라이언트에 보내기만 하면 그만인 단순한 기능인데도 Django는 그런 기능을 제공하지 않습니다. 왜냐하면 그럴 필요가 없기 때문인데, 앞서 설명한 바와 같이 그런 작업에 대해서는 웹 서버가 전문가이기 때문입니다. 게다가 웹 애플리케이션은 웹 서버와 연결하는 중간 인터페이스를 거치므로 효율이 더 떨어집니다. 하지만, 개발 상황인 경우는 효율보다는 기능(역할)이 중요한 경우가 많습니다. 정적 파일이 제대로 제공되는지 확인하려고 항상 웹 서버를 구동할 필요는 없습니다. Django는 개발 단계에서 쓸 정적 파일 제공 기능을 제공합니다. 성능은 웹 서버..
-
[Python] 스코프 규칙언어/파이썬 & 장고 2017. 1. 18. 14:47
파이썬에는 지역, 전역, 내장 스코프를 지원합니다.지역 스코프: 함수 내부에서 생성되는 스코프전역 스코프: 모듈(파이썬 파일) 스코프내장 스코프: 파이썬 자체 내장 영역 스코프각각의 스코프 특성 때문에 변수의 트성도 지역과 전역으로 나뉘어 집니다. 파이썬이 지역과 전역을 선언할 때 전역변수를 선언하거나 명시할 때 global 키워드를 사용해야 합니다. def func_scope(): print(a) a = 100 func_scope() # 결과 # 100위의 예제와 같이 전역변수를 참조만 하여 사용할 때 (전역변수의 수정이 일어나지 않을 때)는 global 키워드 없이 그대로 사용할 수 있습니다. def func_scope(): print(a) a = 200 print(a) a = 100 func_sco..
-
[Python] Tip - tracemalloc으로 메모리 사용 현황과 누수를 파악언어/파이썬 & 장고 2017. 1. 15. 20:19
파이썬, 즉 CPython의 기본 구현은 참조 카운팅(reference counting)으로 메모리를 관리합니다. 참조 카운팅은 객체의 참조가 모두 해제되면 참조된 객체 역시 정리됨을 보장합니다. CPython은 자기 참조 객체가 결국 가비지 컬렉션되는 것을 보장하는 사이클 디텍터(cycle detector)도 갖추고 있습니다.이론적으로는 대부분의 파이썬 프로그래머가 프로그램에서 일어나는 메모리 할당과 해제를 걱정할 필요가 없다는 의미입니다. 즉, 언어와 CPython 런타임이 자동으로 처리합니다. 그러나 실제로 프로그램은 결국 참조 때문에 메모리 부족에 처합니다. 파이썬 프로그램이 어디서 메모리를 사용하거나 누수를 일으키는지 알아내는 건 힘든 도전과제입니다.메모리 사용을 디버깅하는 첫 번째 방법은 내장..
-
[Python] Tip - 최적화하기 전에 프로파일언어/파이썬 & 장고 2017. 1. 15. 20:00
파이썬의 동적 특징은 런타임 성능에서 놀랄 만한 동작을 보여줍니다. 느릴 것이라고 예상한 연산이 실제로는 엄청나게 빠릅니다(문자열 처리, 제너레이터). 빠를 것이라고 예상한 언어늬 특성은 실제로 매우 느립니다(속성 접근, 함수 호출). 파이썬 프로그램을 느리게 만드는 요인이 불분명할 수도 있습니다.가장 좋은 방법은 최적화하기 전에 직관을 무시하고 직접 프로그램의 성능을 측정해보는 것입니다. 파이썬은 프로그램의 어느 부분이 실행 시간을 소비하는지 파악할 수 있도록 내장 프로파일러(profiler)를 제공합니다. 프로파일러를 이용하면 문제의 가장 큰 원인에 최적화 노력을 최대한 집중할 수 있고, 속도에 영향을 주지 않는 부분은 무시할 수 있습니다.예를 들어 프로그램의 알고리즘이 느린 이유를 알고 싶다고 가정..
-
[Python] Tip - 루트 Exception을 정의해서 API로부터 호출자를 보호언어/파이썬 & 장고 2017. 1. 15. 19:22
모듈의 API를 정의할 때 사용자가 던지는 예외는 인터페이스의 일부로 정의한 함수와 클래스 만입니다.파이썬은 언어와 표준 라이브러리용 내장 예외 계층을 갖추고 있습니다. 오류를 보고할 때 자신만의 새 타입을 정의하는 대신 내장 예외 타입을 사용할 가능성이 큽니다. 예를 들어 함수에 올바르지 않은 파라미터가 넘어오면 valueError예외를 일으 킬 수 있습니다.def determine_weight(volume, density): if density
-
[Python] Tip - 모든 함수, 클래스, 모듈에 docstring을 작성언어/파이썬 & 장고 2017. 1. 15. 18:36
파이썬에서 문서화는 언어의 동적 특성 때문에 극히 중요합니다. 파이썬은 코드 블록에 문서를 첨부하는 기능을 기본으로 지원합니다. 대부분의 다른 언어와는 다르게 프로그램 실행 중에 소스 코드에 첨부한 문서에 직접 접근할 수 있습니다.예를 들어 함수의 def 문 바로 다음에 docstring을 직접 작성하여 문서를 추가할 수 있습니다.def palindrome(word): """ Return True if the given word is a palindrome. """ return word == word[::-1] # 함수의 __doc__라는 특별한 속성에 접근하면 파이썬 프로그램 자체에 포함된 docstring을 추출할 수 있음 print(repr(palindrome.__doc__)) # 결과 # '\n ..
-
[Python] Tip - 내장 알고리즘과 자료구조언어/파이썬 & 장고 2017. 1. 15. 18:16
많은 데이터를 처리하는 파이썬 프로그램을 구현하다 보면 결국 사용자가 작성한 코드의 알고리즘 복잡도 때문에 속도가 떨어지는 현상을 보게 됩니다. 이는 보통 파이썬 언어의 속도 때문에 생기는 결과가 아닙니다. 이런 문제는 최적의 알고리즘과 자료구조를 사용하지 않아서 일어났을 가능성이 더 큽니다.속도 이외에도 공통 알고리즘과 자료구조를 사용하면 좀 더 편해집니다.더블 엔디드 큐collections 모듈의 deque 클래스는 더블 엔디드 큐(double-ended queue)입니다. deque는 큐의 처음과 끝에서 아이템을 삽입하거나 삭제할 때 항상 일정한 시간이 걸리는 연산을 제공합니다. 이와 같은 기능은 선입선출(FIFO, First-In-First-Out) 큐를 만들 때 이상적입니다.from collec..