본문 바로가기
Language/파이썬

장고(django) 셋팅(setting)과 북마크 앱(bookmark app) - 파이썬 장고를 활용한 쉽고 빠른 웹 개발 프로그래밍

by javapp 자바앱 2022. 1. 1.
728x90

새해 첫 날

파이썬 웹 프로그래밍

장고 웹 프레임워크 시작!

 

프로젝트 생성

 

장고 패키지 설치

 

터미널 창

django-admin startproject mysite(자유)

// 데이터베이스 및 user, group 테이블 생성
python manage.py migrate

python manage.py createsuperuser

// 앱 생성 (모듈)(기능)
python manage.py startapp polls

test 겸 polls 라는 앱(모듈)을 생성해 봤습니다.

 

테스트를 위한 runserver 설정 실행

 


 

 

앱 만들기 예제)

 

코딩 순서

  • 뼈대 만들기
    • startapp : 앱 생성
    • settings.py : 앱 등록
  • 모델
    • models.py : 모델(테이블)정의
    • admin.py : 사이트에 모델 등록
    • makemigrations : 변경사항 추출
    • migrate : 변경사항 반영 
  • URLconf
    • urls.py : URL 정의
    • views.py : 뷰 로직 작성
  • 템플릿 
    • template 디렉터리 : html 등 작성
  • 그외

 

앱 생성

// 앱 생성 (모듈)(기능)
python manage.py startapp polls

 

 

앱 등록

 

bookmark - apps.py 에 BookmarkConfig 라고 설정돼있기 때문에

 

settings.py 에서 

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'bookmark.apps.BookmarkConfig',
]

 

 


 

 

테이블 생성

 

 

모델 

  테이블 정의

models.py

class Bookmark(models.Model):
    title = models.CharField('TITLE', max_length=100, blank=True)
    url = models.URLField('URL',unique=True)
    
    # 객체를 문자열로 표현
    # 장고에서 모델 클래스의 객체는 테이블에 들어있는 레코드 하나
    def __str__(self):
        return self.title

 

 

 

  Admin 사이트에 테이블 반영

admin.py

from django.contrib import admin

from bookmark.models import Bookmark

# Register your models here.

# Admin 사이트에서 어떤 모습으로 보여줄지 정의
@admin.register(Bookmark) # 어드민 사이트에 등록
class BookmarkAdmin(admin.ModelAdmin):
    list_display = ('id','title','url')

  

* 테이블 새로 만들때 model.py admin.py 두 개 파일 수정

* 모델 객체를 등록

 

 

데이터베이스 변경 사항 반영

python manage.py makemigrations
python manage.py migrate

Operations to perform:
  Apply all migrations: admin, auth, bookmark, contenttypes, sessions
Running migrations:
  Applying bookmark.0001_initial... OK

 

 

python manage.py makemigrtions 는 DB에 migrate할 변동내역을 적어놓기만하는 것이고

실제 DB에 그 내용이 반영되는 것은

python manage.py migrate 를 통해서만! 입니다.

 

 

테이블 모습 확인

http://127.0.0.1:8000/admin/

테이블 메타 내부 클래스 속성 변경 가능

 

 


 

 

개발 코딩하기

 

 

URLconf

mysite/urls.py 와 bookmark/urls.py 2개 파일에 코딩하는 것이 좋다.

 

  방법 1

  mysite/urls.py

from django.contrib import admin
from django.urls import path

from bookmark.views import BookmarkLV, BookmarkDV # 추가

urlpatterns = [
    path('admin/', admin.site.urls),

    # 추가
    path('bookmark/',BookmarkLV.as_view(), name='index'),
    path('bookmark/<int:pk>',BookmarkDV.as_view(), name='detail')
]

 

 

 

View

from django.shortcuts import render

from django.views.generic import ListView, DetailView # 제네릭 뷰(여러개, 한개)
from bookmark.models import Bookmark # 테이블 조회를 위한 모델 클래스

# 템플릿 시스템에 넘겨준다.
# 디폴트로 지정해주는 방법 1. object_list, 2. 모델명 소문자_list.html (bookmark/bookmark_list.html)
class BookmarkLV(ListView):
    model = Bookmark # model

# object , bookmark/bookmark_detail.html
class BookmarkDV(DetailView):
    model = Bookmark

 

 

Template

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>JJango Bookmark</title>
</head>
<body>

    <div id ="content">
        <h1>Bookmark list</h1>

        <ul>
<!--            object list 객체 ( 뷰에서 넘겨주는 컨텍스트 변수-->
            {% for bookmark in object_list %}
                <li>
<!--                {{bookmark}} 는 테이블의 특정 레코드 하나를 의미, __str__ 를 호출-->
<!--                detail 의 url 패턴 : /bookmark/1/형식 으로 웹 요청 보낸다. url패턴 기능     -->
                    <a href ="{% url 'detail' bookmark.id %}">{{bookmark}}</a>
                </li>
            {% endfor%}
        </ul>
    </div>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>JJango bookmark detail</title>
</head>
<body>
  <div id="content">
      <h1>{{object.title}}</h1>

      <ul>
          <li>URL: <a href="{{object.url}}">{{object.url}}</a></li>
      </ul>
  </div>
</body>
</html>

 

{{bookmark}} --> models.py : Bookmark : __str__() 

def __str__(self):
    return self.title

 

{%url%} 패턴

<a href ="{% url 'detail' bookmark.id %}">{{bookmark}}</a>

 detail 의 url 패턴 : /bookmark/1/형식 으로 웹 요청 보낸다. url패턴 기능

path('bookmark/<int:pk>',BookmarkDV.as_view(), name='detail')

 

실행결과

 

 

장고는 

MVC 패턴과 유사한 MVT 패턴을 사용한다.

그래서 View 와 Template 사이의 메시지 교류에서 중요하게 보이는

{%url%} 패턴에 대한 학습을 한다면 좋을 것 같다. {{ object }} 이러한 부분도 마찬가지

 

 

 

 

책 참고 : 파이썬 웹 프로그래밍 실전편(개정판) - 김석훈

 

 

 

댓글