파이썬, 장고 설치

# python 설치
$ sudo apt-get install python3.4

# 가상환경 만들기
$ python3 -m venv myvenv
## 우분투 14.04 에러시
$ sudo apt-get install python-virtualenv
$ virtualenv --python=python3.4 myvenv
##실행하기
$ . myvenv/bin/activate

실행한 뒤 프롬프트 앞에 (myvenv) 가 붙는다면 성공

# Django 설치
$ pip install django==1.8

가상환경 만들기 참고 링크


Django 프로젝트 시작

# 프로젝트 설치
$ django-admin startproject myproj .
# 생성 디렉토리
├── manage.py
└── myproj
    ├── __init__.py
    ├── settings.py
    ├── urls.py
    └── wsgi.py
# 설정변경
$ vi settings.py 

## 아래 내용 추가 및 변경
TIME_ZONE = 'Asia/Seoul'
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')

# 데이터베이스 만들기
$ python manage.py syncdb
$ python manage.py migrate


개발서버 실행하기

$ python manage.py runserver
# 터미널 종료하지 않은 채로 새로운 터미널에서 확인
$ curl 127.0.0.1:8000

# AWS 사용시에 외부에서 접속 가능하도록 하려면
$ python manage.py runserver 0.0.0.0:8000

aws 포트열기

포트를 열어두어야 외부에서 공용IP로 접속이 가능하다.

NETWORK & SECURITY -> Security Groups 에서 그룹 선택하고 Inbound에 8000 포트 추가



파이썬 웹 프로그래밍

저자
주성식, 홍성민 지음
출판사
위키북스 | 2014-01-28 출간
카테고리
컴퓨터/IT
책소개
파이썬으로 쉽고 재미있게 웹 프로그래밍을 시작하세요![파이썬 웹...
가격비교

데이터베이스 처리

연결

connect_db()를 통해 데이터베이스의 연결을 반환 값으로 받는다.

from sqlite3 import dbapi2 as sqlite3
...
DATABASE = '/tmp/minitwit.db'
...
def connect_db():
    return sqlite3.connect(app.config['DATABASE'])

연결과 종료

연결과 종료를 before_request()와 teardown_request() 데코레이터를 이용해 좀 더 모듈화한다. 

before_request()는 요청에 앞서서 실행되는 함수 정의.

teardown_request()는 응답이 생성된 후에 실행되는 함수 정의.

g 객체는 전역(global) 객체를 의미하며 한 번의 요청에 대해서만 같은 값을 유지하고 스레드에 대해 안전하다는 전제 조건이 있다.

@app.before_request
def before_request():
    g.db = connect_db()
    g.user = None
    if 'user_id in session:
        g.user = query_db('select * from user where user_id = ?', [session['user_id']], one=True)

@app.teardown_request
def teardown_request(exception):
    if hasattr(g, 'db'):
        g.db.close()

질의 처리

세 가지 인자로 1. 실행할 질의문, 2. 바인딩 변수라 불리는 질의문에 들어갈 인자(튜플 형태), 3. 결과값으로 리스트 전체를 받을 것인지 리스트의 첫 번째 요소만을 받을 것인지 결정하는 불린(boolean) 값

g 객체에 설정한 데이터베이스 연결을 이용해서 질의문과 바인딩 변수를 실행하고 결과에 대한 커서(cursor)를 얻는다. 그 결과 커서에서 전체 레코드를 꺼내(fetch) 로우(row)를 한 줄씩 읽으면서 그 로우에 있는 컬림(column)의 이름과 값을 dict 형태로 변환한다. 세 번째 인자에 True가 넘어오면 딕셔너리 형태로 변환된 한 개의 로우만 반환되고, False가 넘어오면 전체 로우가 반환된다.

def query_db(query, args=(), one=False):
    cur = g.db.execute(quert, args)
    rv = [dict((cur.description[idx][0], value)
                    for idx, value in enumerate(row)) for row in cur.fetchall()]
    return (rv[0] if rv else None) if one else rv


데이터베이스 초기화

데이터베이스 초기화함수

def init_db():
    with closing(connect_db()) as db:
        with app.open_resource('schema.sql') as f:
            db.cursor().executescript(f.read())
        db.commit()



파이썬(Python) 예약어

and  del  from  nonlacal  try  as  elif  global  not  while  assert  else  if  or  with  break  except  import  pass  yield  class  exec  in  print  continue  finally  is  raise  def  for  lambda  return


출처 : 읽기 좋은 코드가 좋은 코드다. - 더스틴 보즈웰, 트레버 파이커 지음

assertEqual()

File "file.py", line X, in <module>
    assert a == b
AssertionError
이 대신 unitest 모듈에 있는 assertEqual() 메소드를 사용할 수도 있다.
import unittest
Class MyTestCase(unittest.TestCase):
    def testFunction(self):
        a = 1
        b = 2
        self.assertEqual(a, b)

if _name_ == '_main_':
    unittest.main()
이는 다음과 같은 에러 메시지를 출력한다.
File "MyTestCase.py", line 7, in testFunction
        self.assertEquals(a, b)
AssertionError: 1 != 2


+ Recent posts