새해 첫 날
파이썬 웹 프로그래밍
장고 웹 프레임워크 시작!
터미널 창
django-admin startproject mysite(자유)
// 데이터베이스 및 user, group 테이블 생성
python manage.py migrate
python manage.py createsuperuser
// 앱 생성 (모듈)(기능)
python manage.py startapp polls
test 겸 polls 라는 앱(모듈)을 생성해 봤습니다.
앱 만들기 예제)
코딩 순서
- 뼈대 만들기
- 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 }} 이러한 부분도 마찬가지
책 참고 : 파이썬 웹 프로그래밍 실전편(개정판) - 김석훈
'Language > 파이썬' 카테고리의 다른 글
장고(django) 프로젝트 첫 페이지, 템플릿 상속 - 파이썬 장고를 활용한 쉽고 빠른 웹 개발 프로그래밍 (0) | 2022.01.11 |
---|---|
장고(django)blog app(+아카이브) - 파이썬 장고를 활용한 쉽고 빠른 웹 개발 프로그래밍 (0) | 2022.01.05 |
파이썬 AI 온라인 실무 기본 교육과정 / 데이터 핸들링을 위한 라이브러리 NumPy (0) | 2021.09.21 |
2021 파이썬 AI 온라인 실무 기본 및 응용 교육과정을 무료로 수강 ! | 엘리스 코딩 (0) | 2021.09.19 |
파이썬 판다스 - 크롤링으로 얻은 csv 파일들을 concat으로 모두 합치기 (2) | 2021.09.10 |
댓글