(http://www.amazon.com/gp/product/B00ESX15VS/ref=oh_d__o00_details_o00__i00?ie=UTF8&psc=1)


Flask 공부를 위해서 빠르게 읽어보고 싶어서 구매한책입니다.

Kindle Edition으로 아이패드와 맥북에서 Kindle app을 설치하여 읽었는데요..

개인적으로는 이런책을 예제를 하나하나 따라해가면서 익혀보는것을 좋아하는데

그렇게 따라하기에는 코드량이 다소 많고 책안에서의 예제코드도 보기편하게 편집되어 있지는 않습니다.

(특히 html쪽 코드도 양이 꽤 되어요...)


초반에는 Flask에 대한 설명과 기본적인 셋팅 방법이 잘 나오지만 뒤로 갈수록 코드량이 많아지는 편입니다.


개인적으로는 Flask의 기본적인 기능에 더 집중해서 훑어볼 수 있도록 좀 더 간단한 view를 가진

예제였으면.. 하는 생각이 있네요.


그래도 초반에 있는 내용으로 맥북에 VirtualEnv 환경으로 개발환경을 만들어본것은 소득이라고 생각합니다.


일전에 읽었던 packt의 책인 spring-data보다는 만족감이 좀 떨어집니다.


물론, 제 영어와 파이썬 실력 때문에 그렇게 느껴질 수도 있음은 감안해주세요~!! (파이썬을 잘 모릅니다.)

저작자 표시 비영리 변경 금지
신고
Posted by 용식
TAG flask, python

django와 flask 공부를 위해서 mac에서 python 설치하고

virtualenv를 설치해 환경을 준비했다.


1. brew 설치

 - ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"


2. python 설치

 - brew python3


--- ez_setup.py install


> wget https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py
> python ez_setup.py --user


3. pip 설치

 - https://pypi.python.org/pypi/pip에서 tar 파일 다운로드

 - sudo python setup.py install


4. virtualenv 설치

 - sudo pip install virtualenv


5. virtualenvwrapper 설치

 - sudo pip install virtualenvwrapper


6. .bash_profile 수정

 - WORKON_HOME=/~~~

 - source /usr/local/bin/virtualenvwrapper.sh


7. mkvirtualnev test



여기까지 진행해서 virtualenv 환경으로 정상적으로 들어갔고

pip install flask를 실행하니, $VIRTUAL_ENV/lib/~로 설치가 되는 것이 아니라 /local/usr/lib쪽으로 설치가된다.


which python, which pip를 해봐도 $VIRTUAL_ENV 밑의 실행파일을 가르키고 있는데

이상해서 계속 구글링..... 상황이 좀 특이한 상황이라 검색어 고르는것만도 오래 걸렸다.


http://stackoverflow.com/questions/20952797/pip-installing-in-global-site-packages-instead-of-virtualenv


1. $VIRTUAL_ENV/bin/pip, activate를 열어서 VIRTUAL_ENV 변수에 할당된 값 확인. 

 - virtualenv 가동 상태에서 echo $VIRTUAL_ENV해도 됨


2. pip 실행시 절대경로 지정 /Users/need4spd/Programming/python/VirtualEnv/flask_study/bin/pip install flask


3. $VIRTUAL_ENV/bin/pip를 열어서 #!/usr/local/bin/python3을 $VIRTUAL_ENV/bin/python등으로 수정


이제 된다~~~



저작자 표시 비영리 변경 금지
신고
Posted by 용식

http://wolfpaulus.com/jounal/mac/installing_python_osx/


1. 우선 python3.3을 설치한다.

 - http://www.python.org/


2. pkg파일을 실행하여 설치하면 아래의 위치에 설치된다.

 - /Library/Frameworks/Python.framework/Versions/3.3


3. /System/Library/Frameworks/Python.framework/Versions 디렉토리로 이동하면, 2.X대의 파이썬 디렉토리가 보인다. 2.7까지는 아직 많이 사용하니 그냥 두어도 무방.


4. sudo mv /Library/Frameworks/Python.framework/Versions/3.3 /System/Library/Frameworks/Python.framework/Versions


5. sudo chown -R root:wheel /System/Library/Frameworks/Python.framework/Versions/3.3


6. sudo rm /System/Library/Frameworks/Python.framework/Versions/Current


7. sudo ln -s /System/Library/Frameworks/Python.framework/Versions/3.3 /System/Library/Frameworks/Python.framework/Versions/Current


8. sudo rm /usr/bin/pydoc

    sudo rm /usr/bin/python

    sudo rm /usr/bin/pythonw

    sudo rm /usr/bin/python-config


9. ln -s /System/Library/Frameworks/Python.framework/Versions/3.3/bin/pydoc3.3 /usr/bin/pydoc

ln -s /System/Library/Frameworks/Python.framework/Versions/3.3/bin/pydoc3.3 /usr/bin/pydoc3.3


ln -s /System/Library/Frameworks/Python.framework/Versions/3.3/bin/python3.3 /usr/bin/python3.3
ln -s /System/Library/Frameworks/Python.framework/Versions/3.3/bin/python3.3 /usr/bin/python

ln -s /System/Library/Frameworks/Python.framework/Versions/3.3/bin/pythonw3.3 /usr/bin/pythonw
ln -s /System/Library/Frameworks/Python.framework/Versions/3.3/bin/pythonw3.3 /usr/bin/pythonw3.3

ln -s /System/Library/Frameworks/Python.framework/Versions/3.3/bin/python3.3-config /usr/bin/python-config
ln -s /System/Library/Frameworks/Python.framework/Versions/3.3/bin/python3.3-config /usr/bin/python3.3-config

(/usr/bin/ 디렉토리를 보면 2.X별로 링크가 걸려있으므로 그렇게 해놔도 될듯하다.)




저작자 표시 비영리 변경 금지
신고
Posted by 용식
TAG python

flask와 SQLAlchemy를 사용한 CRUD Webapplication Example에 대한 포스트입니다.

환경 구성 후 간단하게 샘플 코드를 만들어보았습니다. 

SQLAlchemy에서는 ORM형태의 코드와 직접 쿼리를 실행하는 형태의 코드를 모두 지원하는것 같습니다.


flask를 사용하여 webapplication을 만들려면 그외 jinja2라는 템플릿엔진과 SQLAlchemy의 사용법을 익혀야 할것 같습니다.


기본적으로 제가 따라한 예제는 flask 홈에 있는 튜토리얼을 따라한 것입니다. (http://flask.pocoo.org/docs/tutorial/#tutorial) 


다만, 여기서 사용하는 DB를 MySQL로 바꾸면서 SQLAlchemy를 사용하여 ORM으로 코드를 변형하여 테스트해본 내용입니다. 따라서, view단의 html파일들은 별도로 언급하지 않았습니다.


일단, 테스트에 사용한 모델은 User 클래스로 id, name, email, description 필드를 갖습니다.

그리고, id는 PK이며 name과 email은 unique 제약이 걸려있습니다.


주의!! - 아래의 코드는 best practice가 아니고, 특히 scoped_session의 올바른 사용법인지까지는

검증하지 않았습니다!


1. models.py


소스를 보시면 대부분 짐작이 되실거라 생각됩니다. 



2. database.py


DB와의 connection을 생성하여, db_session이란 이름으로 바인딩해주고, init_db()메서드에서 model로부터 추출된 메타데이터를 사용해 DB에 테이블을 생성하도록 되어있습니다.



3. flaskr_crud.py


실제 request처리를 담당하는 소스입니다.

특징적인것들만 간단하게 나열하면...


1) app = Flask(__name__)

어플리케이션의 이름을 설정해주는 것으로 각 메서드에 어노테이션으로 설정된.. 마치 스프링MVC의 @RequestMap과 같은 형태에서 사용됩니다. 


2) @app.before_request, @app.teardown_request

브라우저에서 요청된 request가 들어오고 끝날때 한번씩 실행되도록 해주는 설정입니다. 실제 튜토리얼에서는 이 메서드에서 DB session을 받아오고, close하는 로직이 들어가 있습니다.


3) @app.route()

url을 매핑하여 놓으면 해당 url요청이 있을때 선언된 메서드가 실행됩니다.

다만 특이한것은 url을 던질때 "url_for('show_entries')"와 같이 메서드 이름을 통해 url을 추출하여 매핑하도록 되어있습니다. view에서도 마찬가지구요....


4) C.R.U.D

대부분은 소스를 보시면 아실것 같고.. update의 경우  db_session으로부터 filter 쿼리의 결과를 받아서

객체를 수정하고 commit을하면 DB에 반영이 되는 구조입니다. 쿼리에서 .first()가 빠지면 정상작동하지 않습니다.

결과값이 하나라고 하더라두요...


5) show_entries.html with Jinja2


화면에 model을 어떻게 그리는지 보시면 될것 같습니다. Jinja2라는 템플릿 엔진을 사용한듯한데... 첫 느낌은 Jade같기도 하구요... 아무튼 이것도 익혀야하는 부담이 있겠네요. {% %}가... 적은양의 라인에서는 보시는것처럼 가독성이 나쁘지 않은데.. 큰 소스에서는 어떨지 모르겠네요. 


6) 실행

프로젝트 디렉토리로 이동하여 virtualenv를 실행 후 flaskr_crud.py을 실행하면 됩니다.

cd /Users/need4spd/Programming/python/flask/workspace/flaskr

. venv/bin/activate

python flaskr_crud.py


7) 로그

실행시 아래와 같은 로그가 올라옵니다.

(venv)Coupang-ui-MacBook-Pro:flaskr need4spd$ python flaskr_crud.py

 * Running on http://127.0.0.1:5000/

 * Restarting with reloader


request 요청이 들어오면 아래와 같은 로그가 올라옵니다.

before_request

[{'email': u'admin2@localhost', 'description': u'my description', 'name': u'admin2'}, {'email': u'admin3@localhost', 'description': u'1', 'name': u'admin3'}, {'email': u'admin4@localhost', 'description': u'1', 'name': u'admin4'}, {'email': u'admin5@localhost', 'description': u'1', 'name': u'admin5'}]

teardown_request

127.0.0.1 - - [12/Sep/2013 15:30:08] "GET / HTTP/1.1" 200 -

before_request

teardown_request

127.0.0.1 - - [12/Sep/2013 15:30:08] "GET /static/jquery-1.8.1.js HTTP/1.1" 304 -

before_request

teardown_request

127.0.0.1 - - [12/Sep/2013 15:30:08] "GET /static/style.css HTTP/1.1" 304 -

제가 프린트해놓은 내용까지 다 찍혔네요... static resource인 js, css파일에 대한 요청도 같이 들어오는 것을 확인하실 수 있습니다.


8) 화면



느낌

- grails에 비해서는 확실히 가볍습니다. 처음에 flask 및 SQLAlchemy / virtualenv 설정만 되어있으면 가볍게 뭐든 만들 수 있을것 같습니다. 하지만 파이썬을 잠깐 공부한 입장에서는 언어가 익숙하지 않은 부담과 새로운 템플릿 엔진을 봐야하는 부담이 있구요... 버전이 0.10이라는것이.. 살짝 걸립니다. 

아! 그리고 파이썬은 괜찮은 IDE가 없을까요? ㅎㅎ


저작자 표시 비영리 변경 금지
신고
Posted by 용식
TAG flask, python

grails 테스트 후 점심시간 + 여러 회의시간 사이사이 짬짬히 flask를 가지고... SQLAlchemy + MySQL을 사용해서 간단한 도메인 클래스로부터 테이블 생성하고 샘플 데이터 insert 까지만 테스트를 해보았다.

오늘 오전에 키튼님, 프리츠님으로부터 grail보다 ror이 낫다. flask 한번 해보라. 라는 조언을 듣고.. 이왕이면 루비보다는 파이썬이라는 생각으로.... 도전!


http://flask.pocoo.org/

http://flask.pocoo.org/docs/patterns/sqlalchemy/


파이썬이 익숙하지 않다보니... 어렵다.. 쩝...

일단, Mac OSX를 기본으로 python 2.7이 설치되어 있고, 맥용 MySQL이 설치되어 있는 상태에서 진행하였다.


1. virtualenv 설치

 - python 같은 경우는 라이브러리 설치 혹은 설정이 바뀔경우 전역적으로 사용하는 부분이 바뀌어버리기 때문에 이런 상황에서 발생하는 사이드이펙트를 막기위해서 가상환경을 적용하여 사용하는듯하다. 이 프로그램을 활용하면 웹어플리케이션별로 가상으로 자기만의 환경을 가지도록 설정 할 수 있다. 설치 방법은 아래와 같다.

sudo easy_install virtualenv


2. Flask 설치

sudo pip install Flask


3. 프로젝트 디렉토리 생성

 - 어플리케이션 (여기서는 테스트 어플리케이션)을 만들 디렉토리를 생성한다. 아무곳에 생성해도 상관없다.

나는 아래의 디렉토리에 생성하였다.

/Users/need4spd/Programming/python/flask/workspace/flaskr


4. virtualenv 설치 및 적용

 - 위 프로젝트 디렉토리로 이동하여 아래의 명령어를 실행한다.

virtualenv venv

그러면, 디렉토리안에 venv라는 디렉토리가 설치되었을 것이다. 이 상태에서 아래의 명령어로 해당 프로젝트에 가상환경을 적용한다.

. venv/bin/activate

정상적으로 적용이되면 prompt앞에 (venv)라고 표시가 되어, 가상환경 상태인지를 알 수 있게 된다. 가상환경해제는 "deactivate"만 입력하면 된다. 이후부터는 쭉 가상환경이 적용된 상태이다.


5. SQLAlchemy 설치

 - SQLAlchemy를 설치한다.

sudo easy_install SQLAlchemy


6. clang 설치

 - Xcode를 실행 후 preference -> download에 들어가 command line tool을 설치한다.


7. mysql 모듈을 설치한다.

sudo easy_install mysql-python


8. .bash_profile에 아래의 변수를 추가하고 export한다.

export DYLD_LIBRARY_PATH=/usr/local/mysql/lib:$DYLD_LIBRARY_PATH


이제 환경은 준비가 끝났다.


sample code를 작성해보자. sample code는... db를 연결하고, domain으로부터 table을 만들고 샘플 데이터를 insert하는 형태가 된다.


models.py를 보면 User라는 이름의 도메인을 하나 정의한것을 볼 수 있다.

database.py가 db connection을 얻어오는 역할을 하며, init_db 메서드에서 models.py를 import하여 table을 생성한다.

sqlalchemy_orm.py가 데이터를 insert하는 예제코드이다.




이제 이걸 이용해서... webapplication crud 테스트를 한번.....

걍 내친김에 RoR까지 한번 봐야겠다.. Django는 스킵. 이히히.. 근데 어렵다 이건.. 좀.. 눈에 잘 안들어와...

원서 보듯이 펴놓고.. 뚫어지게 봐야겠다..

저작자 표시 비영리 변경 금지
신고
Posted by 용식
TAG flask, python

간단한 회전큐 로직을 작성하는 문제...


역시 업무에 쓰이지 않으니까... 그새 문법이고 뭐고 다 까먹었다..-.ㅜ



저작자 표시 비영리 변경 금지
신고
Posted by 용식

http://dogfeet.github.com/articles/2012/iamport-python.html

저작자 표시 비영리 변경 금지
신고
Posted by 용식

s="12345"

l=list(s)


저작자 표시 비영리 변경 금지
신고
Posted by 용식

저작자 표시 비영리 변경 금지
신고
Posted by 용식
TAG dict, python

저작자 표시 비영리 변경 금지
신고
Posted by 용식


티스토리 툴바