본문 바로가기

웹 개발/Web Development

[Django] 튜토리얼 Cheating Sheet

지금은 nodejs + React로 프론트엔드 개발을 주로 하고 있지만

이전에 Django 프레임워크를 사용하여 웹 개발을 한 적이 있었습니다. 

처음 Django 프레임워크를 사용할 때 일단 튜토리얼을 따라하면서 시작했는데

그때 제가 참고하려고 만든 Cheating Sheet 입니다.

프레임워크가 완전히 익숙해지기 전에 초기 개발 환경 설정시 참고하기 좋은 아~주 기본적인 내용입니다. :)


Django 


#1 환경설정

1)    Vs code를 실행해서 프로젝트를 위해 만든 폴더를 열어준다. or ('code .' command in cmd )

 

2)    가상환경 실행:

$ source myvenv/Scripts/activate  

      - 항상 myvenv(가상환경이름)이 있는 폴더 위치에서 실행 명령

          ** 가상환경 설치: python -m venv myvenv

 

3)    project만들기

$ Django-admin startproject [프로젝트명]

      - 폴더 안에 폴더가 생기면 상위 폴더 이름 헷갈리지 않게 바꾸기

 

4)    app만들기: Manage.py 있는 폴더에

$ python manage.py startapp [앱명]

      -app은 project의 구성단위

       project생성시 자동생성 폴더 내부(init.py, asgi.py, settings.py, urls,py, wsgi.py)

       App폴더 내부(init.py, admin.py, apps.py, models.py, tests.py, views.py)

 

5)    project에 app 존재 알리기: app 폴더에 프로젝트 생성시 자동으로 프로젝트 내부에 생긴 폴더에 있는 settings.py파일에 아래 코드 추가 

INSTALLED_APPS = [

     ‘[app명].apps.앱명Config’,

]

 

6)    Template 만들기: App이 유저에게 보일 화면을 구성하기 위해 app폴더 내에 templates 폴더를 만들고 해당 폴더 안에 html파일을 만든다.

    - templates/[파일명].html

 

7)    앱 기능 구현하기: app 폴더 안의 view.py에 아래와 같은 함수 추가하기 

Def 함수이름(request):

      Return render(request, ‘template 파일이름.html’)

       - template적용을 위한 기본 함수 / 함수이름이랑 파일이름 일치!

 

8)    url요청을 view에 연결하기: 프로젝트 내부 자동 폴더에 urls.py에 추가하기

 

import app명.views (app안에 있는 views파일)

urlpatterns = [

     path( ‘ ‘, app명.views.함수명, name = ‘path명’),

]

     - django프로젝트 어디서든 home경로를 통해 해당 함수 호출가능

     - user에게 보여지는 view랑 template폴더 안의 html파일이 연결

 

9) 서버 실행 

$ python manage.py runserver

 

 


1. settings.py ⇒ project에게 app의 존재 알리기
2. templates ⇒ views.py에서 처리된 데이터를 받아 사용자에게 화면을 보여줌
3. views.py ⇒ 데이터를 처리하는 함수 작성
4. urls.py ⇒ 요청에 맞는 함수를 views.py에서 찾아 요청 전달
**settings.py** → **templates**  → **views.py → urls.py** 순으로 연결


 

#2 모델 만들기

1)    app내부 폴더 models.py에 테이블 생성

class ~~(대문자로 테이블 이름 짓기)(models.Model):

              column = models.[datatye](condition)

       def __str__(self):

            return self.ㅁ.ㅁ    //ㅁ이 목록에 보이는 코드

** datatype 예시:

ForeignKey(settings.AUTH_USER_MODEL)

CharField(max_length=100)

TextField(blank=True)

DateTimeField(auto_now_add=True)

 

2)    python manage.py makemigrations로 migration만들기

      - python 코드를 DB가 알아들을 수 있게 하는 명령

 

3)    python manage.py migrate를 통해 DB에 적용하기

      - DB에 python코드의 내용을 적용하는 명령

 

#3 admin만들기

1)    admin만들기

python manage.py createsuperuser

else:

./manage.py createsuperserver

    127.0.0.1/admin 로 접속하여 admin 로그인 사이트 등장

 

2)    admin에 model 등록하기: app폴더에 admin.py안에

from .models(=model파일명) import [model table명/클래스명]

admin.site.register(table명/클래스명) 

     -  app사이트에 admin등록하기

** app을 setting파일에 등록해서 프로젝트에 파일 알리는 것과 같은 방식

**django의 setting.py 에 있는

TIME_ZONE='Asia/Seoul'

LANGUAGE_CODE='ko-kr' 으로 변경해주기

 

#4 view로 DB가져오기

1)    메소드 설정: app 폴더의 views.py 기존 코드에 아래 코드 추가

from .models(=model파일명) import [model table명/클래스명]

Def 함수이름(request):

      변수 = table명.objects (table안의 데이터)

      Return render(request, ‘template 파일이름.html’) 

 

2)    App명.templates. html파일에서 {{ view에 넘어온 데이터 변수명 }}

{{ view에 넘어온 데이터 변수명.column명 }} – 해당 column정보만 가져오기

{{ view에 넘어온 데이터 변수명.all }} – table의 모든 정보 가져오기

 

3)    urlConfig만들기:

       app내부의 templates폴더 안에 detail.html로 디테일 페이지를 만든다.

       app.urls.py 파일에 아래 코드 추가 

// urlpatterns = [path( ‘ ‘, app명.views.함수명, name = ‘path명’),]이 형식 내부에

urlpatterns = [ path( ‘admin/‘, admin.site.urls), 
                path( ‘ ‘, table명.views.함수명, name = ‘함수명과 같은 경로명’),
                path( ‘table명/<자료형:table명_column명>/’, table명.views.detail, name=’detail’),] 

Table의 pk (int겠지?)를 전달받아서 url을 디자인한다.

**<type:name> path-converter

 

4)    view만들기: template연결을 위해!

app폴더 내에 views.py파일 수정

from django.shortcuts import render, get_object_or_404 첫 줄에 추가하기

def detail(함수명)(request, table_pk):

    디테일 변수 = get_object_or_404(table명, pk= table의 pk)

    Return render(request, ‘html 파일 명.html’,  {‘appmaintemplate’: db받아올 template})

from django.shortcuts import render, get_object_or_404 첫 줄에 추가하기

def detail(함수명)(request, table_pk):    

	디테일 변수 = get_object_or_404(table명, pk= table의 pk)    
    
    Return render(request, ‘html 파일 명.html’,  {‘appmaintemplate’: db받아올 template})

 

5)    모델 수정하기

** def summary(self): return self.body[:100]  - 자기자신의 클래스(현클래스).body에서 100글자 출력하라는 함수