django framework


파이썬 기반의 무료 오픈소스 웹 애플리케이션 프레임워크(Open Source Web Application Framework)


- 빠른 개발, 쉬운 구축 (개발 비용감소)


- 확장성, 보안


- 기본적인 admin 기능의 구현



-하지만 좋지 않은 성능




Architecture


- MVC 패턴 기반 MVT 아키텍처






  1. Model : data 구조 혹은 스키마

  2. View : MVC 의 Controller에 해당 

  3. Template : MVC의  view에 해당








Structure








  • sample2 : root project

  • managy.py : django와 상호작용하는 커맨드라인 유틸리티

  • settings.py: 환경 구성

  • urls.py: url선언에 대한 저장. url dispatcher 구성

  • wsgi.py : WSGI 호환 웹서버의 진입점




https://docs.djangoproject.com/ko/1.11/intro/tutorial01/


https://zetawiki.com/wiki/%EC%9E%A5%EA%B3%A0_manage.py_%EB%AA%85%EB%A0%B9%EC%96%B4




'programming > Python' 카테고리의 다른 글

pyenv를 통한 python 개발환경 구성  (0) 2018.12.12
HOST, IP Address 간단하게 활용  (0) 2018.06.16
Python 주요사항 및 특징  (0) 2018.06.13


MacOS 기준 설치

$ brew install pyenv

$ brew upgrade pyenv





path 설정 - 설치시 나오는 문구로 설정

$ vi ~/.bash_profile




>> if which pyenv > /dev/null; then eval "$(pyenv init -)"; fi



=> 설치 시 나오는 문구를 적용하면 된다.






pyenv를 통한 설치 가능 리스트


$ pyenv install --list





virtualenv 설치 및 설정 - 설치시 나오는 문구로 설정

$ brew install pyenv-virtualenv



$ vi ~/.bash_profile



>> if which pyenv-virtualenv-init > /dev/null; then eval "$(pyenv virtualenv-init -)"; fi




! virtaulenv 는 프로젝트마다 가상환경을 구성할 수 있는 가상환경을 제공한다.





virtualenv 목록


$ pyenv virtualenvs





virtualenv 만들기


$ pyenv install 3.6.5

$ pyenv virtualenv 3.6.5 python-3.6.5


--> pyenv virtualenv [version] [naming]






virtualenv 시작 및 종료


$ pyenv activate python-3.6.5 << 시작

$ pyenv deactivate                 << 종료





alias를 통한 시작 및 종료

$ vi ~/.bash_profile


>> alials p3on='pyenv activate python-3.6.5'

>> alias poff='pyenv deactivate'


$ p3on


$ poff






Jupyter Notebook & Bpython pip install

$ p3on

$ pip install --upgrade pip

$ pip install bpython


$ bpython                     << 실행


$ pip install jupyter


$ jupyter notebook            << 실행




'programming > Python' 카테고리의 다른 글

django framework overview  (0) 2019.01.28
HOST, IP Address 간단하게 활용  (0) 2018.06.16
Python 주요사항 및 특징  (0) 2018.06.13



local host Name 및 IP , Remote Host 와 IP 구하기


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import socket
 
def print_mynetwork_info():
    host = socket.gethostname()
    ip_addr = socket.gethostbyname(host)
    print('HOST:' + host)
    print("ip Address:" + ip_addr)    
 
def print_remoteNetwork_info():
    remote_host = 'www.naver.com'
    remote_ip = socket.gethostbyname(remote_host)
    try:
        print(remote_host)
        print(remote_ip)
    except socket.error as identifier:
        print('error msg:' + expression)
        #예외 무시
        pass
    except:
        print('all eror')
        #예외 무시
        pass    
    finally:
        print('end')
 
 
if __name__ == '__main__':
    print_mynetwork_info()
    print_remoteNetwork_info()
cs



>>

HOST:myHost

ip Address:192.168.0.24

www.naver.com

210.89.160.88

end





로우 레벨의 네트워크 함수를 다루는 경우 IP 주소의 일반적인 문자열 표기 방식은 많이 사용하지 않는다. 이 문자열을 32비트의 바이너리 형식으로 변경해야한다.




IPv4 주소를 다른 포맷으로 변환


파이썬의 소켓 라이브러리는 여러가지 IP주소포맷을 다룰 수 있는 유틸리티 함수를 가지고 있고, 여기서 inet_aton()과  inet_ntoa()를 사용할 수 있다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import socket
from binascii import hexlify
 
def convert_ipAddress():
    host = socket.gethostname()
    ipAddr = socket.gethostbyname(host)
    packed_ip = socket.inet_aton(ipAddr)
    unppcked_ip = socket.inet_ntoa(packed_ip)
 
    print(ipAddr)
#바이너리 데이터를 16진수로 표현
    print(hexlify(packed_ip))
    print(unppcked_ip)
 
 
if __name__ == '__main__':
    convert_ipAddress()
cs




>>

192.168.0.24
b'c0a80018'
192.168.0.24




호스트와 네트워크 바이트 순서에 맞게 정수 변환

호스트의 운영체제로부터 얻은 데이터를 네트워크 바이트 순서로 변환하거나 반대로 변환하는 작업을 수행하는 경우가 있는데, 운영체제 혹은 네트워크 환경에 따라 데이터의 포맷의 표현방식이 각자 다르기 때문이다.

네트워크 바이트 순서 = 시스템이 내부적으로 데이터를 표현하는 방법 



1
2
3
4
5
6
7
8
9
10
11
import socket
 
def convert_integer():
    data=1234
    # 32-bit long
    print ('original: %s -> long host byte order: %s, network byte order:%s' %(data,socket.ntohl(data),socket.htonl(data)))
    # 16-bit short
    print ('original: %s -> long host byte order: %s, network byte order:%s' %(data,socket.ntohs(data),socket.htons(data)))
 
 
convert_integer()
cs



>>

original: 1234 -> long host byte order: 3523477504, network byte order:3523477504

original: 1234 -> long host byte order: 53764, network byte order:53764










참고 서적 : 파이썬을 활용한 네트워크 프로그래밍


'programming > Python' 카테고리의 다른 글

django framework overview  (0) 2019.01.28
pyenv를 통한 python 개발환경 구성  (0) 2018.12.12
Python 주요사항 및 특징  (0) 2018.06.13


Python


- 파이썬은 1991년 발표된 인터프리터 방식의 프로그래밍 언어이다. 


- 인터프리터란 코드 한줄 한줄 읽어가며 실행하는 프로그램이고 실행하는 도중 에러가 나면 다음 코드는 실행되지 않는다.


- 즉, 파이썬은 스크립트 기반의 언어이다.


- 2000년도에 python2, 2008년도에 python3가 나왔다.




특징


- 명시적이고 심플하며 간결하다.


- 그렇기 때문에 높은 생산성을 가지고 있다.


- 문법이 굉장히 쉽다.


- 하지만 문법이 엄격하다. 예를 들면, 들여쓰기가 의무 규칙이고 자체가 하나의 코드 블럭이 되기 때문에 tab문자를 사용하지 않도록 권장한다.


- PEB-8에 명시된 공식 코딩 가이드에서는 스페이스 바로 공백 4문자를 넣기를 권장한다.


- 반복 가능한 객체. 이것은 파이썬의 가장 큰 특징 중 하나이다.

 : 파이썬에서는 반복가능한 객체(iterable)라는 강력한 기능을 제공하며 집합,문자열,리스트,함수 등 반복을 가능하게 한다.


- 가상 머신 위에서 실행되기 때문에 실행속도는 느린편이다. 

 : 가상 머신은 3.3 버전 이후 pyvenv를 사용한다.


- 다양하고 많은 라이브러리를 지원한다.




병렬 처리


- 기본적으로 파이썬 프로그램은 하나의 쓰레드에서 실행된다. (Single Thread)


- 쓰레드 클래스에서 daemon 속성은 서브쓰레드가 데몬 쓰레드인지 아닌지를 지정하는 것인데, 데몬 쓰레드란 백그라운드에서 실행되는 쓰레드로 메인 쓰레드가 종료되면 즉시 종료되며, 데몬 쓰레드가 아니라면 서브 쓰레드는 메인 쓰레드가 종료되도 자신의 작업이 끝날 때까지 계속 실행된다.


- 파이썬은 멀티스레딩을 지원하기 위해 GIL(Global Interpreter Lock)을 도입하여 사용하게 되었다. 따라서 python  스레드 10개를 만들어도 실제 10개가 만들어져도 GIL때문에 하나밖에 안돌아가는 현상이 있다. 뿐만 아니라 여러 성능 문제도 존재하기 때문에 파이썬에서의 병렬처리는 다중 스레드가 아닌 다중 프로세스로 GIL을 우회하는 방식을 사용한다.


네트워크 프로그래밍을 수행할 경우 파이썬의 동시성 및 병렬성에 대해 자세히 알아봐야 할 것 같다.




Python2 vs Python3


- 특이하게 python3는 python2와 호환되지 않는다.


- python2에는 많은 문제와 취약점을 갖고 있다.


- python3.x 부터 모든 문자는 유니코드 처리한다. 유니코드 특성상 2바이트 혹은 4바이트를 차지하는데 2.x 는 기본 1바이트이기 때문에 속도차이는 당연히 날 것이고 이 문제를 해결하기 위해 3.3 버전 이후부터 문자열 객체에서 가장 많은 바이트를 차지하는 문자를 기준으로 각 문자가 차지할 공간을 정하도록 변경되었다.




PEP


- PEP 이란 Python Enhancement Proposals 약자로서 파이썬을 개선하기 위한 제안서를 의미한다. 이러한 PEP 다음과 같이 크게 3 종류로 구분할 있으며, Python Software Foundation 공식 웹사이트인 python.org 에서 관리한다


- 특히 파이썬 코딩에 관련된 제안서는 PEP-8 에서 확인 할 수 있다.




FrameWork


Django : 풀 스택 웹 프레임워크

Flask : 마이크로 웹 프레임워크

Pygame : 파이썬으로 비디오 게임을 제작하기 위한 프레임워크






개발환경


파이썬 IDLE, Atom, SublimeText, VisualStudio Code, Eclipse-PyDev







앞으로 파이썬을 통해 주로 다뤄보고자 하는 것은  파이썬을 통한 네트워크 프로그래밍과 Django 프레임워크이다.








참고


http://pythonstudy.xyz/python/article/24-쓰레드-Thread

https://namu.wiki/w/Python



'programming > Python' 카테고리의 다른 글

django framework overview  (0) 2019.01.28
pyenv를 통한 python 개발환경 구성  (0) 2018.12.12
HOST, IP Address 간단하게 활용  (0) 2018.06.16

+ Recent posts