Home 얼레벌레 django 따라하기 2 - db 실습 및 post 날리기
Post
Cancel

얼레벌레 django 따라하기 2 - db 실습 및 post 날리기

파이썬 웹 개발 연습차 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 저장된거 볼 수 있다.

사용예시2

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 바꿔서 해봐야지 !

This post is licensed under CC BY 4.0 by the author.