간단한 블로그를 만들며
Django 이해하기
Django 101 - 2015/2/14 Python Korea
파이
저는
입니다.
Django
알파카코믹스
로 만들었습니다.
https://alpacacomics.com
Django를 배우기 전에
HTTP 요청과 응답을
이해해봅시다.
식당에 갑니다.
스테이크를 주문합니다.
주방에서 음식을 만듭니다.
손님에게 내놓습니다.
식당에서
스테이크 1인분이요!
HTTP
https://alpacacomics.com
HTTP
https://alpacacomics.com
Server
HTML
CSS
JS
...
https://alpacacomics.com
HTTP
Request
Response
대충 설명하면 이렇습니다.
주문 / 음식
URL* / HTML*
Request / Response
이 모든 것은
‘문서’로 되어있습니다.
https://alpacacomics.com
HTTP
Request
Response
Request ‘문서’
https://alpacacomics.com
HTTP
Request
Response
Response ‘문서’
인터넷 브라우저는
Request 문서를
만들어서 보내고
Response 문서를
받습니다.
그리고
예쁘게 보여줍니다.
서버는
Request 문서를 해석하고
Response 문서를
만들어 줍니다.
Django는
Request를 해석하고
Response를 만듭니다.
Django는 어디에?
https://alpacacomics.com
Server
HTML
CSS
JS
...
Django
Server를 확대하면
VIEW
Server
urls.py …
MODEL
TEMPLATE
Data
Base
Web
Server
VIEW
Server
urls.py …
MODEL
TEMPLATE
Data
Base
Web
Server Django
Django가 하는 일
Application server
다른 건 못해요.
VIEW
쓸모 있는 친구들
urls.py …
MODEL
TEMPLATE
Data
Base
Web
Server
uWSGI
Nginx
MySQL
manage.py runserver
Django만 확대하면
views.py
Django
urls.py
models.py
templates/ ...html
Middle
ware*
settings.py
대충 흐름만 보세요.
Django 홈페이지 보세요.
제대로 된 내용이 궁금하시면?!
http://www.djangoproject.com
간단한 블로그를 만들면서
이 흐름을 알아봅시다.
우리가 만들 블로그
어떤 블로그를 만들 것인가?
터..텀블러?
글 목록 보기
/
그냥 다 뿌립니다.
글 내용 보기
/{ 글 번호 }/
없으면 허전하죠.
글 쓰기
/create/
쓰긴 해야...
분류된 글 목록
/?category={ 분류 번호 }
필터 생색 내봅니다.
단순합니다.
모델도 설계해봅니다.
name
Category
더 할게 없네
category
title
content
Post
created 는 덤으로
별거 없습니다.
이제 만들어봅시다.
실습 프로젝트
https://github.com/perhapsspy/pylog/commits/master
보면서 합시다.
Python 2.7.x
설치되어 있으시겠죠?
어..없으면 곤란합니다.
pip install virtualenvwapper
mkvirtualenv pylog
workon pylog
deactivate
Python 가상 환경 만들기
https://virtualenvwrapper.readthedocs.org/en/latest/
pip install django
Django 설치
https://docs.djangoproject.com/en/1.7/intro/install/
django-admin startproject pylog
Django 프로젝트 생성
https://docs.djangoproject.com/en/1.7/intro/tutorial01/#creating-a-project
cd pylog
django-admin startapp blog
python manage.py runserver
ctrl + c
blog 앱 생성
http://127.0.0.1:8000/
pylog/blog/models.py
# -*- coding: utf-8 -*-
from django.db import models
class Category(models.Model):
class Meta:
verbose_name = u'분류'
ordering = ['name']
name = models.CharField(verbose_name=u'이름', max_length=50)
def __unicode__(self):
return self.name
class Post(models.Model):
class Meta:
verbose_name = u'글'
ordering = ['created']
category = models.ForeignKey(Category, verbose_name=u'분류', null=True, blank=True)
title = models.CharField(verbose_name=u'제목', max_length=256)
content = models.TextField(u'내용', blank=True, default='')
created = models.DateTimeField(auto_now_add=True, verbose_name=u'생성일')
def __unicode__(self):
return self.title
pylog/blog/admin.py
from django.contrib import admin
from blog.models import Category, Post
class CategoryAdmin(admin.ModelAdmin):
list_display = ['id', 'name']
list_editable = ['name']
search_fields = ['name']
ordering = ['name']
class PostAdmin(admin.ModelAdmin):
list_display = ['id', 'title', 'created']
list_filter = ['category']
list_display_links = ['id', 'title']
search_fields = ['title', 'content', ]
ordering = ['-created']
admin.site.register(Category, CategoryAdmin)
admin.site.register(Post, PostAdmin)
python manage.py makemigrations blog
python manage.py migrate
python manage.py createsuperuser
python manage.py runserver
Database Migration
http://127.0.0.1:8000/admin/
Category와 Post를
적당히 입력해봅시다.
admin 페이지에서
Post admin에 Category 추가
class PostAdmin(admin.ModelAdmin):
- list_display = ['id', 'title', 'created']
+ list_display = ['id','category', 'title', 'created']
list_filter = ['category']
+ list_editable = ['category']
list_display_links = ['id', 'title']
search_fields = ['title', 'content', ]
ordering = ['-created']
pylog/blog/admin.py
진행합니다.
이제부터는 github commit을 보면서
소스 넣기 힘들어요… 설명도 강의하면서...
home view
hi
https://github.com/perhapsspy/pylog/commit/06c31a3
7649d8cc52a2199886b67be3acf49f885
기본 template 적용
https://github.com/perhapsspy/pylog/commit/ba2543
addd36bf5717d62d31e35c8376b23f8e57
template 상속으로
home 구현
https://github.com/perhapsspy/pylog/commit/fe9827f
4486ed73fa5fc0c8ca67325fcf3b5d9a7
home에서
글 목록 보여주기
https://github.com/perhapsspy/pylog/commit/0c00fb1
90b48dcbe7a916666ef3d77a3c1a727b0
글 내용 보기 만들기
https://github.com/perhapsspy/pylog/commit/148b4d
e0f7d166933bf3e9d327d4d7195a40cbaa
FBV를 CBV로 바꾸기
https://github.com/perhapsspy/pylog/commit/22595a
a6df9589b74a5764722f71d599bd372438
글쓰기 기능 추가
https://github.com/perhapsspy/pylog/commit/d9b035
67d57be664b976550567825435cb56d4ec
글 목록에서 분류 표시
https://github.com/perhapsspy/pylog/commit/2f38bbd
60055029022abff4c4cd1e3a0d9028095
분류 기능 추가
https://github.com/perhapsspy/pylog/commit/713e03
d43828d3301ae6b266e59638c6ee42b4a3
테스트 케이스 작성
https://github.com/perhapsspy/pylog/commit/1b4871
15c9f6602a7a65464096ef11512f3d520f
수고하셨습니다.

간단한 블로그를 만들며 Django 이해하기