ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 내 이해를 도울 Django flow
    ML, DL & Python/Django 2019. 6. 17. 00:18

    안녕하세요 이번 포스팅은 장고를 구현함에 있어서 초기 세팅해야하는 것들과 장고의 처음 시작부터 끝까지 그리고 장고를 만드는 과정에서 필요한 코드 같은 것들을 R에서 ggplot을 정리한 것처럼 정리해보겠습니다.

    본 포스팅은 장고걸스를 통해서 많은 도움을 얻었습니다.

     

    1. django 설치

     

     

    장고를 설치하기 위해서는 python 3.6버젼 이상(권장) , 그리고 pip가 최신 버젼이여야 합니다. 따라서 command linedp 아래와 같은 코드를 입력합니다.

     

    C:\Users\내로컬위치 > python -m pip install --upgrade pip

     

    그 다음은 장고를 설치해야겠죠?

    pip install django~=2.0.0
    
    -결과-
    Collecting Django~=2.0.6
      Downloading Django-2.0.6-py3-none-any.whl (7.1MB)
    Installing collected packages: Django
    Successfully installed Django-2.0.6

     

    매번 경로를 입력해주는 것은 시간이 많이 소요되므로 '>' 이후에 입력할 코드만 쓰겠습니다.

     

     

    2. 나만의 장고 프로젝트 생성

     

     

    프로젝트를 생성하기 위해서 저는 제 로컬 폴더 자체에 설치하겠습니다.

     

    로컬경로에 설치
    django-admin startproject "프로젝트 이름"

    command line에 프로젝트를 생성하게 되면 로컬 파일에 프로젝트 이름으로 파일이 생성되는 것을 확인할 수 있습니다.

    또한 폴더의 구조를 확인해보면 다음과 같습니다.

    startproject로 만든 구조

     

     

    3. 전체적인 장고의 세팅을 변경하고자 할 때 로컬/프로젝트이름(이하 posting)/posting/settings.py에서 설정

     

     

    장고를 통해서 만든 내 서버의 전체적인 세팅(DB, other project, time, domain...)을 변경하고자 할 때는 settings.py에 들어가서 변경합니다.

     

    other project는 이 후 step에서 설명하겠습니다.

     

    보통 DB는 sqlite3로 설정되어 있습니다. 바로 다음 step를 확인하시죠!

     

     

    4. DB설정

     

     

    settings.py에서 DATABASES를 확인해보면 따로 건든 것이 없는데 db.sqlite3로 설정되어 있는 것을 확인할 수 있습니다.

    다음으로 저희가 해야하는 일은 서버의 database를 생성하는 것입니다. 

     

    command line에서 다음의 코드를 입력합니다.

     

    python manage.py migrate

    이렇게 하면 db가 서버에 생성된 것입니다. 여기서 저희는 주의할 것이 있습니다. 장고는 데이터베이스에 바로 반영할 수 있도록 migration file이라는 것을 준비해두었기 때문에 이제부터 만들 other application의 모델을 db에 반영하기 위해서는 모델을 만든다음 위의 코드를 꼭 입력해줘야 합니다.

     

     

    5. 장고 모델 만들기 

     

     

    여기서 말하는 모델이 어떤 것이냐면 db의 저장할 모델을 만드는 것입니다. 즉, 저희가 기존에 생각하는 머신러닝이나 알고리즘 모델이 아닌 데이터를 어떤 형식으로 저장할 것인지, db에 저장할 데이터 구조를 정해주는 함수를 말합니다.

     

    이제 모델을 생성하기 위해서 아까 위에서도 설명드린 other app을 만들 것입니다.

    command line에 다음과 같은 코드를 입력합니다.

     

    python manage.py startapp '파일이름'

    그럼 이와 같은 폴더구조가 최종적으로 만들어집니다.

     

    따라서 보이시는 model.py에 db에 데이터를 넣거나 admin에서 관리하고자할 때 데이터를 어떤 형식으로 관리하고 넣을 것인지를 정하는 모델을 만들어서 넣습니다. 이때 어떤 기술적인 내용이 들어가는 것이 아니라 진짜 단순하게 어떤 컬럼을 저희가 원하는 형식으로(date,numeric,string...)지정할 것인지를 설정하는 것입니다.

     

    자 이제 이렇게 만들었다면 저희 db에 우리가 만든 모델을 추가해줘야합니다. 그리고 장고 모델에 몇가지 변화가 생겼다는 것을 인식시켜 줘야 합니다. (model.py에 모델을 추가할 때마다 아래의 코드를 입력해야 합니다.)

     

    python manage.py makemigrations '파일이름'

    여기서 끝이 아닙니다. 그럼 이제 모델을 만들어서 장고에게 모델에 변화가 있다는 것을 인식시켜줬다면 이제 서버에 반영을 해야합니다. 다음의 코드를 입력하면 모델을 최종적으로 db에 저장하고 반영한 것입니다.

     

    python manage.py migrate '파일이름'

     

     

    6. 장고 관리자 계정 생성하기 및 admin으로 모델 가져오기(등록)

     

     

    python manage.py createsuperuser #admin 계정 만들기
    #파일이름/admin.py
    from django.contrib import admin
    from .models import "model.py에 생성한 모델 이름"
    
    admin.site.register("model.py에 생성한 모델 이름")

     

     

    7. 장고 최신성 유지 및 백업 용이성

     

     

    git과 git-bash를 사용하여 장고의 최신성과 백업 용이성을 확보한다.

     

    우리가 지금까지 만든 장고는 다른사람이 확인할 수도 볼 수도 없다. 왜냐하면 현재 장고는 각자의 로컬에서 실행되고 있으며 다른 사람이 보기 위해서는 domain이 필요하다.

    따라서 파이썬으로 도메인을 만들어서 다른 사람도 볼 수 있도록 배포하는 사이트인 "pythonanywhere"를 확인하면 좋을듯 하다.

     

     

    8. 장고 urls.py 설정

     

     

    먼저 프로젝트이름/urls.py에 들어간다 들어간 다음 아래의 코드를 작성한다.

    from django.contrib import admin
    from django.urls import path, include
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('', include('파일이름.urls')),#other app의 url변경사항을 모두 포함(include)하여라 웹 url에 반영하는 명령어
    ]

    include명령어가 있는 코드를 다시 설명하자면 http://127.0.0.1:8000/로 들어오는 모든 접속 요청(post)를 파일이름.urls로 전송하는 것입니다.

     

    자 이제 other app 즉, 파일이름 폴더에 들어가서 urls.py 파일을 만듭니다. 그리고 다음과 같이 입력합니다.

     

    from django.urls import path
    from . import views #views.py의 모든 view함수를 불러온다
    
    urlpatterns = [
        path('', views."views.py에서 만든 임의의 함수 이름", name='views.py에서 만든 임의의 함수 이름'),
    ]
    

     

    여기까지 flow를 거쳤다면 장고의 전체적인 Flow에 거의 다 온 것입니다. 이제 view를 설정해보겠습니다.

     

     

    9. 장고 view함수 설정

     

     

    장고 views.py는 이전에 model.py에서 설정한 모델과는 달리 실질적으로 각자의 웹상에 어떤 데이터를 띄어줄 것인지를 만드는 공간입니다.

     

    해당 views.py에 넣을 함수의 예는 제가 포스팅한 "장고를 이용한 리그오브레전드 전적검색 만들기"를 참고해주시면 감사하겠습니다.

     

    확인하셨나요? 아마 views에 함수를 만들어 넣으셨더라도 다시 서버를 실행해보면 에러가 나타날 것입니다. 왜 에러가 나타나는지 아시는 분들도 계실텐데 웹상에 데이터를 넣기 위해서는 어떤 템플릿 정적 템플릿이 필요합니다. 네. html이라는 저희의 웹을 꾸며줄 정적템플릿이 필요합니다.

     

     

    10. html, css 파일만들어서 내가 만든 웹 띄우기

     

     

    이부분도 마찬가지로 코드를 설명하는 부분이 아니고 전체적인 flow를 설명하는 단계이므로 코드를 보시고 싶으신 분들은 9번에 있는 제가 올린 포스팅 참고 바랍니다.

     

    html로 뼈대와 내용을 채워넣고 css로 꾸미면 저희가 원하는 사이트를 만들어낼 수 있습니다.

    즉, "파일이름"(other app)에 templates폴더를 만들고 "파일이름"이라는 폴더를 만들고 그 안에 .html파일을 만듭니다.

    html의 위치 ->("프로젝트이름"/"파일이름"/templates/"파일이름"/.html)

     

    장고에서는 또 강력한 기능을 제공하는데 동적데이터의 사용이 손쉽다는 것입니다.

     

    원래 html은 제가 작성한 코드 내에서 작성한 것들만 반영되고 노출되는 정적 템플릿 입니다. 하지만 저희는 views를 통해서 함수도 만들고 여러개의 데이터를 한번에 만들거나 불러올 수 있었죠? 근데 그것을 html에 담는다? 굉장히 많은 공수가 들어갈 수 있습니다.

     

    하지만 python 은 views.py의 각 함수에서 함수로 만든 데이터를 사용할 웹으로 보내기 위해서 render(request,~~~)를 사용합니다. 그래서 여러개의 데이터가 동시에 발생해도 html상에 무리없이 올려서 웹상에 반영되도록 만들 수 있습니다.

    (%url "폴더(other app)이름:views.py의 함수",~~ %) -> 위의 내용을 설명하는 코드 즉, 장고의 템플릿 태그

     

    덧붙이자면 views.py의 각 함수는 각 html과 1:1매칭이므로 만약에 여러개의 함수를 하나의 html에 담기 위해서는 여러개의 함수를 하나의 함수로 만들어서 render.request 해야합니다.


    댓글

Designed by Tistory.