flask - request.script_root 이용하기

하나의 웹을 여러 path 에 올려야 할 경우가 있다. 예를 들면, 테스트를 위해서 /web1, /web2 이런식으로 구성해서 올릴 경우이다. 이런 경우 프론트단에서 URL로 지정해 놓은 값들을 수정해 줘야 한다. ajax 를 호출한다고 생각해 보자. 원래 /web/api/room 이런식으로 ajax 를 호출하는 경우가 있었다면 /web1, /web2 에 따라서 /web1/api/room, /web2/api/room 이렇게… Read More

pymssql nextset() 빈값 이슈

최근에 구현한 부분에서 이상한 경험을 했는데 같은 db 프로시저를 호출하는 코드를 쓰고 테스트를 했는데 어떤 조건으로는 데이터가 순서에 맞게 잘 나오고 안나오고 하는 경우였다. 데이터는 mssql 저장 프로시저에서 2개의 결과셋을 반환하는데 첫번째에서는 보여줄 데이터의 금액, 건수 합산 데이터를 보여주고, 두번째에서는 실제 보여줄 데이터가 나오는 것이었다. 그래서 generator 를 이용해서 g.next(), g.next() 이렇게 2번… Read More

flask - render_template 어떻게 사용할까?

flask 를 사용하다보면 view 코드가 길어지는 경우가 있는데 그 중 하나가 views.py 에 route 함수가 많아져서 길어지는것 그리고 다른 하나는 render_template() 함수에 파라미터가 많아져서 길어지는 경우다. 전자의 경우 blueprint 로 분할하거나 resource 단위로 분할하면 해결할수 있다. (이건 다른 포스트에서 자세히 설명하겠다.) 후자의 경우에는 어떻게 해결 할수 있을까? 뭐 이런식으로 길어지는 경우다. return render_… Read More

Python - 리스트 순회중 수정하는 문제

본 글은 Toptal에 올라온 Buggy Python Code: The 10 Most Common Mistakes That Python Developers Make 글을 보고 공부하면서 쓴 글이다. 번역 + 개인의 공부내용이라고 생각하면 될 것 같다. Common Mistake #5: Modifying a list while iterating over it 리스트 순회중 수정하는 문제 >>> odd = lambda x : bool(x % 2) >>> numbers… Read More

flask - json_encoder 지정하기

API 상에서 JSON 으로 응답을 내보내기 위해서는 데이터를 Json Serialize(직렬화)를 해야한다. 그런데 json 에서 표현할 수 있는 데이터는 한정이 되어 있어서 각 프로그래밍 언어에 있는 모든 타입을 지원하지는 못한다. Decimal 형도 그런 예 중 하나인데 파이썬에서는 json.dumps()를 통해서 주로 직렬화를 하고 그 함수의 기능 중에 cls 인자를 통해서 JSONEncoder 를 구현한… Read More

Python - 파이썬 범위 규칙에 대한 잘못된 이해

본 글은 Toptal에 올라온 Buggy Python Code: The 10 Most Common Mistakes That Python Developers Make 글을 보고 공부하면서 쓴 글이다. 번역 + 개인의 공부내용이라고 생각하면 될 것 같다. Common Mistake #4: Misunderstanding Python scope rules 파이썬 범위 규칙에 대한 잘못된 이해 파이썬 범위 해석은 LEGB(Local, Enclosing, Global, Built-in)에 기초하고 있다고 알려져 있다. 충분히… Read More

Python - 예외처리 블록에 대한 잘못된 파라미터 지정

본 글은 Toptal에 올라온 Buggy Python Code: The 10 Most Common Mistakes That Python Developers Make 글을 보고 공부하면서 쓴 글이다. 번역 + 개인의 공부내용이라고 생각하면 될 것 같다. Common Mistake #3: Specifying parameters incorrectly for an exception block 예외처리 블록에 대한 잘못된 파라미터 지정 try: l = ["a", "b"] int(l[2]) except ValueError, IndexError: # To… Read More

Python - 잘못된 클래스 변수의 사용

본 글은 Toptal에 올라온 Buggy Python Code: The 10 Most Common Mistakes That Python Developers Make 글을 보고 공부하면서 쓴 글이다. 번역 + 개인의 공부내용이라고 생각하면 될 것 같다. Common Mistake #2: Using class variables incorrectly 잘못된 클래스 변수의 사용 class A(object): x = 1 class B(A): pass class C(A): pass print A.x,… Read More

Python - 함수 디폴트인자의 잘못된 사용

본 글은 Toptal에 올라온 Buggy Python Code: The 10 Most Common Mistakes That Python Developers Make 글을 보고 공부하면서 쓴 글이다. 번역 + 개인의 공부내용이라고 생각하면 될 것 같다. Common Mistake #1: Misusing expressions as defaults for function arguments 함수 디폴트인자의 잘못된 사용 def foo(bar=[]): bar.append("baz") return bar print foo() print foo() print… Read More

pycharm - bookmarks 북마크

pycharm 에는 북마크 기능이 있다. 많은 파일과 소스 파일내에 특정 위치를 빠르게 이동하기 위해서는 북마크 기능이 필수적이다. F11(윈도우 기준) 키를 눌러서 현재 있는 위치에 북마크를 지정 할 수 있다. 중요한 점은 소스파일 뿐만 아니라 project 뷰 안에 파일을 선택한 상태에서도 F11을 통해서 북마크에 추가 할 수가 있다. Shift+F11 를 누르면 현재까지 북마크한 파일이나… Read More

flask - jinja2 tojson 필터

flask 문서를 보다보니 standard filters 라는 항목이 있는데 tojson 이 그 내용이다.(기본적으로 제공하는 필터라는 내용) 간략하게 애기하자면, 어떤 랜더링할 변수에 tojson 이라고 jinja2 템플릿 상에서 | 를 이용해서 붙이게 되면 json으로 변환된 값을 랜더링해준다. 예를들어, user 라는 dict 객체에 데이터를 넣어서 전달한다고 할 때, @app.route('/') def hello_world(): user ={} user['name'] = 'ash84'… Read More

pycharm - settings.jar 개발환경 공유

사내 팀에서 pycharm 을 파이썬 개발 공식툴로 사용하고 있다. 처음에 커뮤니티버전에서 시작해서, 개인 프로페셔널을 쓰다가, 이제는 회사에서 라이센스를 끊어서(기업용) 사용하고 있다. 개인 개발용으로도 구입해서 사용하고 있는데, 회사와 내 개인용 컴퓨터(맥) 간의 pycharm 환경을 동일하게 맞추고 싶었다. 테마, 폰트, 색깔 같은 외향적인 부분이 가장 크게 맞추고 싶은 부분이었고 개인적으로 사용하는 서버나 그런것들도 다시 설정하기도… Read More

pipreqs - requirements 뽑기

virtualenv 를 사용하면 사실 좋긴 한데, 그게 아닌 경우에 대해서 개발 서버에서 작업했을때 requirements.txt 를 뽑기가 어렵다. requirements.txt 가 필요한 이유는 서버에 세팅시 pip install -r 옵션을 통해서 한번에 라이브러리를 설치할수 있기때문에 필수이다. pipreqs 를 사용하면 특정 프로젝트 하위에서 사용하는 라이브러리 리스트를 추출할 수 있다. virtualenv 를 도입하기 힘든 환경에서 사용하면 좋을 듯.… Read More

(flask) jsonschema 를 이용해서 request.json 검사하기

API에서 파라미터의 유효성 검사는 필수적인 요소이긴 하지만, 개발자로서 여간 귀찮은 일이 아닐 수 없다. API의 양이 많을수록 할 일은 많아진다. 세세하게 체크할 부분은 해야하지만 기본적으로 파라미터 유무, 파라미터의 데이터 형을 체크하는 부분이 필요했다. API는 기본적으로 JSON 을 POST로 받는 식으로 구성되어 있어서 JSON을 검증하는 부분이 필요했다. JSON 검증을 위해서 jsonschema 를 활용할 수 있다는 것을… Read More

기술 링크 정리 #3 - 2016/12/28

파이썬 관련 파이썬 코리아 격월 세미나 파이썬 코리아의 세미나는 자주 열리지 않는 편인데, 12/17일에 격월 세미나가 열렸었다. 다음번 격월 세미나를 기다려본다. 웹 개발, 왜 어려운가? 오픈소스 네이밍 특징들 파이썬을 만난지 100일♥째 Python 3.6.0 is now available! Python 3.6이 릴리즈 되었다. 관련해서 정리한 내용을 확인해보자. 기타 Git 100% 활용하기: 협업을 위한… Read More

(flask) JSON 데이터 받기 및 예외처리

(adsbygoogle = window.adsbygoogle || []).push({}); flask 에서 json 데이터를 받아서 처리할 때 reqeust.get_json() 혹은 request.json 을 이용할 수 있는데, mime type을 application/json 타입으로 보내는데, {} 없이 빈 JSON 문자열 조차도 안 보내는 경우가 있을수가 있다. from flask import Flask from flask import request app = Flask(__name__) @app.route("/test", methods=['POST']) def test(… Read More

기술 링크 정리 #2 - 2016/12/20

파이썬 관련 Python 3.6: A quick look 지난주 Python3.6.0 RC1 이 나왔다고 했는데, Pycharn 2016.3 버전에서 Python3.6을 어떻게 지원하고 있는지에 대해서 설명하고 있다. 특히 f-string 에 대해서 Pycharm에서 쓰기 쉽게 지원하고 있는것을 보여준다. PYCON PH 2017 CDO 파이콘 필리핀 2017의 티켓판매를 시작했다고 한다. 파이썬코리아 댓글에서 열리는 섬은 여행 금지구역이고 장소는… Read More

기술 링크 정리 #1 - 2016/12/09

파이썬 관련 Python 3.6.0 RC1 Python3.6.0 Release Candidate1 에 대한 내용을 담고 있다. 에 가면 좀더 자세한 내용을 볼 수 있다. CPython 구현 개선에 대한 내용이 있는데, dict 타입을 재구현해서 PyPy와 비교해서 더 빠르다고 하고, Python3.5 와 비교해서 20% ~ 25% 향상 되었다고 한다. 포맷 문자열이 아래와 같이 가능해진다. >>… Read More

SQLAlchemy with StoreProcedure

(adsbygoogle = window.adsbygoogle || []).push({}); 제목자체가 역설적이지만, 이렇게 써야 할때가 있다. 예를들면, 레거시를 다시 재개발하는 수준에서 특정 프로시저는 단순히 db를 조회하는 것 이상의 프로그래밍적인 기능을 가지고 있을때가 있다. 또한, 다른 이유로 ORM인 SQLAlchemy와 저장프로시저를 혼합해야할 때가 있는데, 그럴때 따로 저장프로시저용 코드를 쓰기 보다는 SQLAlchemy 를 이용해서 프로시저를 실행하고 값을 가져오는 것이 좋다. 개인적으로 SQLAlchemy를 써서 좋다고… Read More

PyconAPAC 2016 후기 슬라이드

Pycon APAC 2016 후기 from SeongHyun Ahn 파이콘 관련 글을 쓰고 있는 중인데, 위의 슬라이드는 회사에서 팀내에 공유한 내용이다. 별 다른 후기가 있는것은 아니고 이런 행사도 있다는 것, 그리고 어떤 행사, 어떤 특징을 가지고 있는지에 대해서 소개한 슬라이드이다. 팀내에서 이런 슬라이드를 가지고 공유한 이유는 가보지 못한 개발자들에게 좀더 이런 컨퍼런스들이 열리고 있고, 현재 어떤 주제들이… Read More