파이썬 웹 개발 연습차 django 로 기본 실습을 해보고자 한다 ~!!
TO DO LIST
파이썬 설치 + django 라이브러리 기본 세팅hello world ^^(get)- db 연결
- db 저장
- 요청 파라미터 값을 db 에 저장 (get)
- db 저장값 가져와서 출력
- post 요청해보기
* 실습환경은 mac os
1. db 연결 및 가져와서 출력
다양한 db 를 사용할 수 있겠지만 일단은 django 에서 기본 제공하는 SQLite 사용했다.
프로젝트를 생성하면 기본적으로 프로젝트 폴더의 settings.py 에 SQLite 연결 세팅되어있다.
1
2
3
4
5
6
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
기본 세팅이나 테이블 생성 같은건 튜토리얼에 너무 자세히 나와있다.
여기서 중요한건 django 에서는 ORM 형태로 db작업을 한다.
ORM이 뭘까여?
ORM 은 object relation mapper 의 약어로 sql 문 없이 객체를 db 에 매핑시키고 조작하게 해주는 것이다. (sql 쿼리 직접 조작이 아님)
장점
- DB 종류에 종속적이지 않음
- 객체를 직관적으로 사용하기에 비즈니스 로직에 집중 가능
단점
- 대형쿼리같은게 있으면 직접 쿼리 작성한게 아니기에 효율성이 떨어질 수 있음
간단히 말하면 자바에서의 mybatis 같은 sql 쿼리 통해서 사용자가 직접 테이블 조작하는 것과는 다르게, 그 데이터가 필요한 객체를 통해 제어하는 방식이다.
약간 낯설긴한데, 쓰다보면 익숙해지겠지.
일단은 db에서 select 해서 데이터 가져오고, update 하는 것 해봤는데 너무 간단하다.
1
2
3
4
5
6
7
8
def getAllLogs():
allLog=Log.objects.all() # sql: select * from Log
for log in allLog :
if (log.action == '넘나리신기') :
# sql: update Log set action ='바꿔바꿔' where action='넘나리신기'
log.action='바꿔바꿔'
log.save()
print(log) # 콘솔창에 출력해보기
2. 요청 파라미터 값 db 저장
일단 요청 파라미터 값 가져오는 방식은 두 가지가 있다.
- query string
url 뒤에 ~~?param=1 이런식으로 붙여서 오는 방식이다.
request에서 바로 파라미터 이름으로 받을 수 있다.1 2
def param(request): action = request.GET.get('action') #~~?action='액션' 이런식으로 보내면 받는다.
- url parameter url 뒤에 바로 붙여서 보내는 방식이다.
~/param값 이런식이다. 이럴땐, 서버 로직인 view.py 와 url 패턴 정의하는 urls.py 수정 필요하다.
1
2
3
4
view.py
def urlparam(request,action): #url param 도 메소드 인자로 받는다.
return HttpResponse("사용자 액션은 {} 입니다.".format(action)) #입력받은 값 바로 출력한다.
1
2
3
urls.py
path('urlparam/<action>', views.urlparam, name='urlparam'),
여기서 action 은 그냥 str 이기에 컨버터를 명시하지 않았다.
하지만 Int 같은거는 컨버터 명시해준다. («int:num») 이런식으로
요청 파라미터 가져오는 법은 배웠으니 이걸로 db 저장해본다.
너무 간단하게 모델 객체 하나 만들고 입력값을 객체에 저장만 하면 된다.
querystring 방식으로 해봤다.
1
2
3
4
5
6
def param(request):
action = request.GET.get('action') #~~?action='액션' 이런식으로 보내면 받는다.
log =Log(action=action) #모델 객체 만든다. action 값에 입력받은 값 넣어 초기화한다.
log.save() # 객체를 db 에 저장한다.
str=log.__str__() # 저장되는 내용 출력해보기
return HttpResponse(log.__str__())
이렇게 하고 나면, 관리자 페이지 통해서 정상적으로 db 저장된거 볼 수 있다.
ORM 방식이니까 너무 편하다. mybatis 쓸 땐, 커넥션 열고 어쩌고 쿼리 넣고 어쩌고 했는데, 그냥 코드 두 줄로 뚝딱;
3. POST 로 json 데이터 보내보기
json 데이터 만들기 우선 json 데이터를 만들기 위해서는 파이썬 객체를 json 형태로 바꾸는 작업이 필요하다.
json_dumps() 사용하는데, 인자로는 json 화 하고자 하는 객체, 인코딩 정보 등을 넣는다.post 보내기
requests 모듈 사용하면 간단하게 보낼 수 있다. import requests 하고, requests.post 로 url, 데이터 등을 넣어서 보낸다.
1
2
3
4
5
6
7
def sendJsonData(request):
data = {'logs':[{'action': '그냥 제이슨이양'}, {'action':'아무거나 씁니다.'}]}
dataJson= json.dumps(data, ensure_ascii=False).encode('utf-8')
# ensure-ascii 는 기본적으로 아스키코드로 저장되는걸 막기 위함. 기본적으로는 유니코드 str 으로 저장되서, utf-8 로 인코딩해 보낸다.
headers = {'Content-Type': 'application/json; charset=utf8'}
resp = requests.post('http://127.0.0.1:8000/hello/getJsonData', data = dataJson, headers=headers)
return HttpResponse(resp.content) # post response 의 내용을 그대로 받아서 출력
- post 로 받은 json db 에 저장하기 post 로 json을 받았으면, 문자열 형식으로 되어있으니까 다시 파이썬 객체 형식으로 json.loads 통해 만들어준다.
1
2
3
4
5
6
def getJsonData(request):
receivedData =json.loads(request.body) #post로 온 json 데이터
for data in receivedData['logs']: # 구조대로 for문 돌면서 저장한다.
log=Log(action=data['action'])
log.save()
이렇게 아주 기초적인 파트를 해봤다. 하면 하는건데, 사소한 파트 (인코딩 등등) 을 몰라서 조금 삽질한 것도 있다 .
낯설어서 그러지 익숙해지면 괜찮겠지 ㅎㅎㅎ
일단 끝 다음엔 dbms 바꿔서 해봐야지 !