Download - 2016 py con2016_lightingtalk_php to python
PHP to Python Convert
일지이렇게 하면 변환을
성공적으로 할 수 있다 !
발표자는 누구인가 ?
대학원 정보과학과 13 기 !! - 데이터베이스 석사 전공 중 ( 아아 나의 논문은 언제완성 ..?)
과학의 대중화가 아닌 대중의 과학화 ( 클래식 음악이 대중화되는 것은 아니지않는가 ?)
담당 기획자 > 아저씨 , 책 좀 팔아봐요 . … 판매가 지지부진해 ( 여러분 책은 금새 절판됩니다 . 절판되기 전에 구매합시다 )
PHP to Python 본격 변환 이야기
뭉글 뭉글…
어느 날 회사를 운영하는 지인이 자꾸 홈페이지 기능에 오류가 있다고 봐달라고 하기에 코드를 뜯어봤다 .그랬더니 …
가만 보니 PHP 4.3 까지만 유지되는 PHP RegisterGlobals 옵션을 사용해서 코딩된 것같다 .
앞으로도 이 지인이 내게 홈페이지 코드 수정 요청을 할 것 같다 . 그에 대비해 내가 코드를 유지보수하기에 뭐 좋은 방법 없을까 ?
파이썬 Flask 프레임워크를사용하자 !
…만들다 보니
1 번째 Case
include 문이 특정 기능을 담은 한 세트 ( 예를 들면 SMS 발송과 같은 ) 일 때 파이썬으로
어떻게 처리할까 ? 에 대한 고민을 한다 .
1 번째 Case
파일을 분해해서 디자인은 jinja 템플릿 파일로 만들고 기능은 ajax 로 보내도록 수정
<div id=”sms_send”><input type=”text” name=”phone”><textarea name=”content”></textarea></div>
@page.route(“/sms”, methods=[‘POST’])def sms_send(): ….
2 번째 Case
모든 화면에 걸쳐 동일한 정보 ( 예를 들면 상단 메모와같은 ..)
메뉴 이동시마다 이 정보를 어떻게 보여줄것인가 ?
2 번째 Case
Flask 의 context_processor 데코레이터를 사용해 매HTTP 요청 때마다 DB, 상수 파일로부터 이름을
가져와서 Jinja 가 사용할 수 있도록 템플릿 글로벌 변수로등록
3 번째 Case
하나의 변숫값을 가지고 OR 처리 구문을 레거시 그대로 사용할 것인가 ?
if ( $a == “00” && $b == “1” || $b == “2”) { …}
3 번째 케이스
표현식에 발상의 전환
if a == “00” and b in (“1”, “2”): …
같은 변수에 대해 or 비교를 하는 거라면 표현식을 길게 할 이유가 없다 .
if ( $a == “00” && $b == “1” || $b == “2”) { …}
4 번째 Case
Excel 을 HTML 태그로 내보내지 않는 효과적인 방법을…찾아라
기존엔 ..
4 번째 Case
엑셀 .. 엑셀 .. 그 이름 엑셀 ..
5 번째 Case
제 멋대로 코드와 HTML 이 혼재되어 있는 HTML 파일의 효과적인 정리 방안을 찾아라 !
5 번째 Case
템플릿 상속을 통해 태그 순서 등이 꼬이지 않는 템플릿작성
6 번째 Case
폼으로부터 검색할 필드와 값을 전달 받았을 때 어떻게 처리해야 할까 ?
6 번째 Case
SQLAlchemy 와 같은 ORM 을 사용하면 사용자가 보낸 변수를 그대로 컬럼명으로 사용할 수 없다 !!!
7 번째 Case
PHP 로 짤 때 아무 생각없이 사용하는 PHP 함수와 상수값들을 플라스크에 어떻게 녹일까 ?
7 번째 Case
사용자 PHP 함수는 함수의 성격을 살펴서 템플릿 필터 또는 템플릿 함수로 등록하고 , 상수는 하나의 파일로 모아 템플릿 글로벌 변수로 만듭니다 .
템플릿 글로벌 변수와 템플릿 함수의 등록 : context_processor 데코레이터
템플릿 필터의 등록 : template_filter 데코레이터 또는 app_template_filter 메서드
8 번째 Case
특정 기능을 제공하는 사용자 PHP 함수와 어떤 기준으로 템플릿 필터와 템플릿 함수로 나눌
것인가 ?
8 번째 Case
함수는 사용자 PHP 함수를 살펴봐서 jinja 가 제공하는 것이면 jina 에서 그대로 쓰고 그게 아니라면 함수의 성격을 살펴서 단순히 필터링을 통해 해결할 수 있는
문제인지 살펴 템플릿 필터 또는 템플릿 함수로 만든다 .
8 번째 Case ( …이어서 )
9 번째 Case
PHP 로 된 외부 라이브러리는 어떻게 해야하는가 ?
예를 들어 ..
업체가 제공한 SMS 전송 라이브러리 - 파이썬 라이브러리용은 없다 ! 으아악 !!
9 번째 Case
사이트에서 반드시 사용하는 외부 라이브러리는 파이썬 버전이 있는지 확인하고 없으면 PHP 소스코드를 살펴
파이썬으로 변환한다 . …이 작업의 결과로 깨달음을 얻음
---> 내가 잠시 미쳤구나 !!
10 번째 Case
정적 파일들을 재구성하는 문제는 어떻게 해결해야 할까 ?
/- /images/abc.png- /images/bcd.png- /board.php
10 번째 Case
Flask 에겐 url_for 함수가 있다 !!!
/images -> /static/images
ref{{ url_for(‘static’, filename=’images/abc.png’) }}
…끝으로 ( 사실 레거시 코드 변환은 하지마 !! 하지마 !!)
1. PHP 레거시 코드 작성을 파이썬으로 변환하는 일은 아직도 ing … 손댄지 몇년째 ..
2. 여기에 언급하지 못한 자바스크립트와의 전쟁3. 난 디자인은 못한단 말이다 !!! 근데 최소한의 크로스
브라우징은 만족해야지 . 으쌰으쌰
나는 이렇게 말하고 싶다 . 이런 변환 프로젝트는 처음 한 번이 어렵다 . 한 번 변환 프로젝트를 수행하고나면 칼빈
소총에서 K2 소총을 들고 전쟁에서 뛰어다니는 것과 같다 . (ps. 총은 M16 만 다룸 )
감사합니다 !