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

Post on 15-Jul-2015

4.175 views 5 download

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

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

Django 101 - 2015/2/14 Python Korea

파이

저는

입니다.

Django

알파카코믹스

로 만들었습니다.

https://alpacacomics.com

Django를 배우기 전에

HTTP 요청과 응답을

이해해봅시다.

식당에 갑니다.

스테이크를 주문합니다.

주방에서 음식을 만듭니다.

손님에게 내놓습니다.

식당에서

스테이크 1인분이요!

HTTP

https://alpacacomics.com

HTTP

https://alpacacomics.com

ServerHTML

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.comServer

HTML

CSS

JS

...

Django

Server를 확대하면

VIEW

Server

urls.py …

MODEL

TEMPLATE

Data

Base

Web

Server

VIEW

Server

urls.py …

MODEL

TEMPLATE

Data

Base

Web

ServerDjango

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

더 할게 없네

categorytitle

content

Post

created 는 덤으로

별거 없습니다.

이제 만들어봅시다.

실습 프로젝트

https://github.com/perhapsspy/pylog/commits/master

보면서 합시다.

Python 2.7.x

설치되어 있으시겠죠?

어..없으면 곤란합니다.

pip install virtualenvwappermkvirtualenv pylogworkon 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 pylogdjango-admin startapp blogpython manage.py runserverctrl + 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 blogpython manage.py migratepython manage.py createsuperuserpython 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/06c31a37649d8cc52a2199886b67be3acf49f885

기본 template 적용

https://github.com/perhapsspy/pylog/commit/ba2543addd36bf5717d62d31e35c8376b23f8e57

template 상속으로home 구현

https://github.com/perhapsspy/pylog/commit/fe9827f4486ed73fa5fc0c8ca67325fcf3b5d9a7

home에서글 목록 보여주기

https://github.com/perhapsspy/pylog/commit/0c00fb190b48dcbe7a916666ef3d77a3c1a727b0

글 내용 보기 만들기

https://github.com/perhapsspy/pylog/commit/148b4de0f7d166933bf3e9d327d4d7195a40cbaa

FBV를 CBV로 바꾸기

https://github.com/perhapsspy/pylog/commit/22595aa6df9589b74a5764722f71d599bd372438

글쓰기 기능 추가

https://github.com/perhapsspy/pylog/commit/d9b03567d57be664b976550567825435cb56d4ec

글 목록에서 분류 표시

https://github.com/perhapsspy/pylog/commit/2f38bbd60055029022abff4c4cd1e3a0d9028095

분류 기능 추가

https://github.com/perhapsspy/pylog/commit/713e03d43828d3301ae6b266e59638c6ee42b4a3

테스트 케이스 작성

https://github.com/perhapsspy/pylog/commit/1b487115c9f6602a7a65464096ef11512f3d520f

수고하셨습니다.