본문 바로가기

백엔드기술/개발언어55

Django 에서 복합키 업데이트시 주의사항 기존에 사용중인 테이블이 복합키로 구성되어있어서 아래와 같이 모델을 정의하고, class Task(models.Model): batchtaskid = models.CharField(primary_key=True, max_length=20, blank=True) userid = models.CharField(primary_key=True, max_length=6, blank=True) status = models.CharField(max_length=1, blank=True) class Meta: db_table = 'task' 업데이트를 하도록 코드를 작성했습니다.if form.is_valid():form.cleaned_data['batchtaskid'] userid = form.cleaned_data[.. 2014. 3. 12.
Django decorators 정의해서 사용하기 django에서 데코레이션이란 기능을 이용하면 view별로 공통 소스를 넣지 않아도 된다. 스프링의 어노테이션하고 비슷하다고 보면 된다. 로그인에서 사용하는 데코레이션 login_required 예제 from django.contrib.auth.decorators import login_required @login_required(login_url='/accounts/login/')def my_view(request): ... 사용자 정의해서 데코레이션 사용하기 urls.pyfrom revfactory import views urlpatterns = patterns('', url(r'index/$', views.index), url(r'index2/$', views.index2),) views.py 두개.. 2014. 3. 6.
파이썬 imageField model선언시 imageField 타입을 지정하니 아래 에러가 나옴photo = models.ImageField(upload_to='profiles') django.core.exceptions.ImproperlyConfigured: Neither Pillow nor PIL could be imported: No module named Image Image 라이브러리 설치http://www.pythonware.com/products/pil/ 라이브러리 설치할때Python version 2.7 required, which was not found in the registry메세지가 나오고 경로 지정이 안된다면 레지스트리 편집기를 열어서 실행-> regedit HKEY_LOCAL_MACHINE > SOFTW.. 2014. 2. 27.
파이썬 한글 인코딩 설정 파일 제일 상단에 아래와 같이 선언 #-*- coding: utf-8 -*- 참고사이트 : http://libsora.so/posts/python-hangul/ 2014. 2. 26.
파이썬 cx_Oracle 설치하기 1. 아래 경로에서 알맞는 파일을 설치 또는 압축해제한다.http://cx-oracle.sourceforge.net/ 윈도우의 경우 설치할때 레지스터 기준으로 설치하겠다고 기본값으로 설치하면 됨 2. 오라클 인스턴트 클라이언트 설치http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html?ssSourceSiteId=ocomen 경로는 바뀔수 있으니 Download에 Instant Client Downloads 에서 플랫폼에 맞게 받아서 압축을 해제한다.로그인이 필요함. 압축해한 파일들을 적당한 위치로 이동 PATH와 환경변수 추가 - ORACLE_HOME 을 해당 위치로 지정한다. python 에서 import .. 2014. 2. 26.
CountDownLatch을 이용하여 Thread 사용시 모든 쓰레드 종료 기다리기 CountDownLatch 을 사용하면 멀티 쓰레드 사용시 모든 쓰레드 종료 시점을 알 수 있다. 간단한 예제 코드 private static AtomicInteger _nextInc = new AtomicInteger((new java.util.Random()).nextInt()); final List list = Collections.synchronizedList(new ArrayList()); final CountDownLatch latch = new CountDownLatch(10000); for(int i = 0 ; i < 10000 ; i++) { Thread thread = new Thread() { public void run() { list.add(_nextInc.getAndIncreme.. 2013. 9. 24.