쉽게 쓰여진 django

136
Django 윤동주 feat. 김태훈

Upload: tae-hoon-kim

Post on 27-May-2015

6.717 views

Category:

Technology


3 download

DESCRIPTION

https://github.com/carpedm20/Easily-written-Django

TRANSCRIPT

Page 1: 쉽게 쓰여진 Django

쉽게

쓰여진

Django

개발자란

슬픈

천명인

알면서도

윤동주feat. 김태훈

Page 2: 쉽게 쓰여진 Django

김태훈HeXA

carpedm20

Page 3: 쉽게 쓰여진 Django

Web?

Page 4: 쉽게 쓰여진 Django
Page 5: 쉽게 쓰여진 Django
Page 6: 쉽게 쓰여진 Django
Page 7: 쉽게 쓰여진 Django
Page 8: 쉽게 쓰여진 Django
Page 9: 쉽게 쓰여진 Django
Page 10: 쉽게 쓰여진 Django

Web!

Page 11: 쉽게 쓰여진 Django

Django

Page 12: 쉽게 쓰여진 Django

Django장고? 쟁고? 드장고? 디장고? 쥐왕고?

Page 13: 쉽게 쓰여진 Django
Page 14: 쉽게 쓰여진 Django
Page 15: 쉽게 쓰여진 Django

Django가 정의한 Django

Django

Page 16: 쉽게 쓰여진 Django

Django가 정의한 DjangoThe web framework for perfectionists with deadlines

Django

Page 17: 쉽게 쓰여진 Django

내가 봤을 때 Django란세련된 Web을 더욱 빠르고, 적은 코드로 개발할 수 있게 해주는 도구

Django

Page 18: 쉽게 쓰여진 Django

그렇다면 Web이란 무엇인가?

거미줄?

Page 19: 쉽게 쓰여진 Django

Web이란 무엇인가?

WWW 에서 정보를 주고 받을 수 있는 프로토콜읭... 프로토콜???

Page 20: 쉽게 쓰여진 Django

프로토콜Protocol

Web이란 무엇인가?

Page 21: 쉽게 쓰여진 Django

통신을 원하는 두 개체간에 무엇을, 어떻게, 언제통신할 것인가를 서로 약속한 규약

Web이란 무엇인가?

프로토콜

Page 22: 쉽게 쓰여진 Django

HTTP Request

GET http://hexa.perl.sh/login?id=carpedm20&pw=secret HTTP/1.1Host: hexa.perl.shProxy-Connection: keep-aliveAccept: text/html; charset=UTF-8

User-Agent: Chrome/29.0.1547.76 Accept-Encoding: sdchAccept-Language: ko-KR,ko;q=0.8,en-US;q=0.6,en;q=0.4Cookie: PHPSESSID=oeilogqc1qf3g06aghh3qrekt3

Web이란 무엇인가?

프로토콜

Page 23: 쉽게 쓰여진 Django

HTTP/1.1 200 OKDate: Tue, 08 Oct 2013 04:48:07 GMTServer: Apache/2.2.22 (Ubuntu)Content-Type: text/html; charset=UTF-8

<!DOCTYPE html><head>

Web이란 무엇인가?

프로토콜

HTTP Request

Page 24: 쉽게 쓰여진 Django

<link rel="shortcut icon" href="img/favicon.ico" type="image/x-icon" />

<!-- Mobile converting -->

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"><html xmlns="http://www.w3.org/1999/xhtml">

<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><link rel="stylesheet" href="style.css" /><title>HeXA; Hackers' eXciting Academy -</title><script type="text/javascript" src="./script/base_script.js"></script> <script>

window.onload = function() {}

</script></head><body>

<div class="container">

Web이란 무엇인가?

프로토콜

HTTP Request

Page 25: 쉽게 쓰여진 Django

HTTP Request

Web이란 무엇인가?

프로토콜

Page 26: 쉽게 쓰여진 Django

Web이란 무엇인가?

우리가 앞으로 만들 것구글을 이길 크고 아름다운 X

Page 27: 쉽게 쓰여진 Django

Web이란 무엇인가?

Input을 받아 Output 을 출력하는 프로그램

우리가 앞으로 만들 것

Page 28: 쉽게 쓰여진 Django

Web이란 무엇인가?

우리가 앞으로 만들 것

#include <iostream>using namespace std;int main(){

cin >> input;// do somethingcout << output;

return 0;}

C++

Page 29: 쉽게 쓰여진 Django

Web이란 무엇인가?

우리가 앞으로 만들 것

input = raw_input()# do somethingprint output

Python

Page 30: 쉽게 쓰여진 Django

Web이란 무엇인가?

우리가 앞으로 만들 것

print "%s\n" % "Content-Type:text/html;"print "<title>HeXA; Hackers' eXciting Academy -</title>\n"print "<script type="text/javascript" src="./script/base_script.js"></script>“

input = raw_input()if not input:

print "<p>Error</p>"else:

print "<p>Welcome</p>"

Python

Page 31: 쉽게 쓰여진 Django

Web이란 무엇인가?

Quiz : HeXA 홈페이지는 몇 번의 print를 해야 할까?

우리가 앞으로 만들 것

Page 32: 쉽게 쓰여진 Django
Page 33: 쉽게 쓰여진 Django

기본 구조

Page 34: 쉽게 쓰여진 Django

기본 구조

하나의 Project, 여러 개의 App

Page 35: 쉽게 쓰여진 Django

기본 구조

blog

post comment account …..

하나의 Project, 여러 개의 App

Page 36: 쉽게 쓰여진 Django

기본 구조

뭔지 모르겠다아아아ㅏ 일단 프로젝트를 만들자!

Page 37: 쉽게 쓰여진 Django

기본 구조

일단 프로젝트를 만들자

~ $ django-admin.py startproject blog~ $ cd blog~/tutorial $ lsblog manage.py~/tutorial $ ls blog__init__.py settings.py urls.py wsgi.py

참고. 터미널 / 쉘 실행은 HeXA 블루

Page 38: 쉽게 쓰여진 Django

기본 구조

일단 프로젝트를 만들자

blog/├── blog│ ├── __init__.py│ ├── settings.py│ ├── urls.py│ └── wsgi.py└── manage.py 프로젝트 관리 도구

각종 설정이 들어있는 파일

URL을 연결해 주는 파일

웹 서버 게이트웨이 인터페이스

Page 39: 쉽게 쓰여진 Django

기본 구조

일단 프로젝트를 만들자

~/blog $ python manage.py runserver 0.0.0.0:port

port에는 9000 ~ 1000 사이 아무거나 골라 쓰세요.혹시 누군가와 겹친다면... 두근두근? .

Page 40: 쉽게 쓰여진 Django

기본 구조

일단 프로젝트를 만들자

It worked!

Page 41: 쉽게 쓰여진 Django

기본 구조

프로젝트를 만들었으니, 이젠 App을 만들 차례!하나의 Project, 여러 개의 App

blog

post comment account …..

Page 42: 쉽게 쓰여진 Django

기본 구조

일단 프로젝트를 만들자

~/blog $ django-admin.py startapp helloworld~/blog $ lshelloworld manage.py tutorial~/blog $ ls helloworld__init__.py admin.py models.py tests.py views.py

Page 43: 쉽게 쓰여진 Django

기본 구조

일단 프로젝트를 만들자

~/blog $ cd blog~/blog/blog $ vi settings.py

(...)INSTALLED_APPS = (

(...)'django.contrib.messages','helloworld',)

(...)

Project 한테 helloworld App을 추가 시키겠다고 말하기!

settings.py

Page 44: 쉽게 쓰여진 Django

기본 구조

일단 프로젝트를 만들자

~/blog $ cd ../helloworld~/blog/helloworld $ vi views.py

from django.http import HttpResponse

# Create your views here.def hello(request):

return HttpResponse("Hello, World!")

첫 번째 views.py 완성!

views.py

Page 45: 쉽게 쓰여진 Django

기본 구조

일단 프로젝트를 만들자

~/blog/helloworld $ cd ../~/blog $ vi blog/urls.py

(...)urlpatterns = patterns('',

url(r'^helloworld/', 'helloworld.views.hello'),(...)

urls.py 도 완성!

urls.py

ps. ^ 는주소앞부분의끝을의미→ hexa.iptime.org:9000/helloworld/

바로여기

Page 46: 쉽게 쓰여진 Django

기본 구조

일단 프로젝트를 만들자

~/blog $ python manage.py runserver 0.0.0.0:port

Page 47: 쉽게 쓰여진 Django

기본 구조

일단 프로젝트를 만들자

~/blog $ python manage.py runserver 0.0.0.0:port

빠밤!

Page 48: 쉽게 쓰여진 Django

기본 구조

그렇다면 지금까지 우린 뭘 한 걸까?

Page 49: 쉽게 쓰여진 Django

기본 구조

urls.py 부터 보자

아니 장고 양반! Page not found라니 그게 무슨 소리요?

Page 50: 쉽게 쓰여진 Django

기본 구조

urls.py

urlpatterns = patterns('',

url(r'^helloworld/', 'helloworld.views.index'),url(r'^register/', 'account.views.register'),url(r'^login/', 'account.views.login'),url(r'^write/', 'post.views.write_post'),

)

blog

post comment account …..

urls.py

Page 51: 쉽게 쓰여진 Django

기본 구조

urls.py

urlpatterns = patterns('',

url(r'^helloworld/', 'helloworld.views.index'),url(r'^register/', 'account.views.register'),url(r'^login/', 'account.views.login'),url(r'^write/', 'post.views.write_post'),

)

hexa.iptime.org:9000/register/ 는 account App의 register()로hexa.iptime.org:9000/login/ 은 account App의 login()로hexa.iptime.org:9000/write/ 는 post App의 write_post()로 가세요!

blog

post comment account …..

urls.py

Page 52: 쉽게 쓰여진 Django

기본 구조

urls.py

hexa.iptime.org:9000/register/ 는 account App의 register()로hexa.iptime.org:9000/login/ 은 account App의 login()로hexa.iptime.org:9000/write/ 는 post App의 write_post()로 가세요!

blog

post comment account …..

from django.http import HttpResponse

def hello(request):return HttpResponse("Hello, World!")

views.py

urlpatterns = patterns('',

url(r'^helloworld/', 'helloworld.views.index'),url(r'^register/', 'account.views.register'),url(r'^login/', 'account.views.login'),url(r'^write/', 'post.views.write_post'),

)

urls.py

Page 53: 쉽게 쓰여진 Django

기본 구조

urls.py == 이정표

urls.py

Page 54: 쉽게 쓰여진 Django

기본 구조

urls.py

urlpatterns = patterns('',url(r'^post/', include(‘post.urls')),url(r'^account/', include('account.urls')),

)

urls.py

hexa.iptime.org:9000/post/ 는 post App에 있는 urls.py를 찾아 보시고요hexa.iptime.org:9000/account/ 은 account App의 urls.py를 찾아 보세요!

helloworld/├── __init__.py├── admin.py├── models.py├── tests.py├── urls.py└── views.py

보통 App의 생김새

Page 55: 쉽게 쓰여진 Django

기본 구조

걱정 마! 예제를 준비했어!

urls.py

Page 56: 쉽게 쓰여진 Django

기본 구조

urls.py

hexa.iptime.org:9000/post/write 로 접속

blog/├── blog│ ├── __init__.py│ ├── settings.py│ ├── urls.py│ └── wsgi.py├── post│ ├── __init__.py│ ├── admin.py│ ├── models.py│ ├── urls.py│ └── views.py├── account│ ├── __init__.py│ ├── admin.py│ ├── models.py│ ├── urls.py│ └── views.py└── manage.py

Page 57: 쉽게 쓰여진 Django

기본 구조

urls.py

hexa.iptime.org:9000/post/write 로 접속

blog 의 urls.py 에서 어디를 봐야 할지 찾는다blog/├── blog│ ├── __init__.py│ ├── settings.py│ ├── urls.py│ └── wsgi.py├── post│ ├── __init__.py│ ├── admin.py│ ├── models.py│ ├── urls.py│ └── views.py├── account│ ├── __init__.py│ ├── admin.py│ ├── models.py│ ├── urls.py│ └── views.py└── manage.py

프로젝트 총 관리 폴더

Page 58: 쉽게 쓰여진 Django

기본 구조

urls.py

hexa.iptime.org:9000/post/write 로 접속

blog 의 urls.py 에서 어디를 봐야 할지 찾는다

urlpatterns = patterns('',url(r'^post/', include(‘post.urls')),url(r'^account/', include('account.urls')),

)

blog/├── blog│ ├── __init__.py│ ├── settings.py│ ├── urls.py│ └── wsgi.py├── post│ ├── __init__.py│ ├── admin.py│ ├── models.py│ ├── urls.py│ └── views.py├── account│ ├── __init__.py│ ├── admin.py│ ├── models.py│ ├── urls.py│ └── views.py└── manage.py

프로젝트 총 관리 폴더

Page 59: 쉽게 쓰여진 Django

기본 구조

urls.py

hexa.iptime.org:9000/post/write 로 접속

blog 의 urls.py 에서 어디를 봐야 할지 찾는다

urlpatterns = patterns('',url(r'^post/', include(‘post.urls')),url(r'^account/', include('account.urls')),

)

post 의 urls.py 에서 어디를 봐야 할지 찾는다

blog/├── blog│ ├── __init__.py│ ├── settings.py│ ├── urls.py│ └── wsgi.py├── post│ ├── __init__.py│ ├── admin.py│ ├── models.py│ ├── urls.py│ └── views.py├── account│ ├── __init__.py│ ├── admin.py│ ├── models.py│ ├── urls.py│ └── views.py└── manage.py

post App 폴더

Page 60: 쉽게 쓰여진 Django

urlpatterns = patterns('',url(r'^delete/', ‘post.views.delete_post’),url(r’^write/’, ‘post.views.write_post'),

)

기본 구조

urls.py

hexa.iptime.org:9000/post/write 로 접속

blog 의 urls.py 에서 어디를 봐야 할지 찾는다

urlpatterns = patterns('',url(r'^post/', include(‘post.urls')),url(r'^account/', include('account.urls')),

)

post 의 urls.py 에서 어디를 봐야 할지 찾는다

blog/├── blog│ ├── __init__.py│ ├── settings.py│ ├── urls.py│ └── wsgi.py├── post│ ├── __init__.py│ ├── admin.py│ ├── models.py│ ├── urls.py│ └── views.py├── account│ ├── __init__.py│ ├── admin.py│ ├── models.py│ ├── urls.py│ └── views.py└── manage.py

post App 폴더

Page 61: 쉽게 쓰여진 Django

기본 구조

urls.py

hexa.iptime.org:9000/post/write 로 접속

blog 의 urls.py 에서 어디를 봐야 할지 찾는다

urlpatterns = patterns('',url(r'^post/', include(‘post.urls')),url(r'^account/', include('account.urls')),

)

post 의 urls.py 에서 어디를 봐야 할지 찾는다

blog/├── blog│ ├── __init__.py│ ├── settings.py│ ├── urls.py│ └── wsgi.py├── post│ ├── __init__.py│ ├── admin.py│ ├── models.py│ ├── urls.py│ └── views.py├── account│ ├── __init__.py│ ├── admin.py│ ├── models.py│ ├── urls.py│ └── views.py└── manage.py

post 의 views.py 에서 무엇을 한다

post App 폴더

urlpatterns = patterns('',url(r'^delete/', ‘post.views.delete_post’),url(r’^write/’, ‘post.views.write_post'),

)

Page 62: 쉽게 쓰여진 Django

기본 구조

urls.py

hexa.iptime.org:9000/post/write 로 접속

blog 의 urls.py 에서 어디를 봐야 할지 찾는다

urlpatterns = patterns('',url(r'^post/', include(‘post.urls')),url(r'^account/', include('account.urls')),

)

post 의 urls.py 에서 어디를 봐야 할지 찾는다

blog/├── blog│ ├── __init__.py│ ├── settings.py│ ├── urls.py│ └── wsgi.py├── post│ ├── __init__.py│ ├── admin.py│ ├── models.py│ ├── urls.py│ └── views.py├── account│ ├── __init__.py│ ├── admin.py│ ├── models.py│ ├── urls.py│ └── views.py└── manage.py

post 의 views.py 에서 무엇을 한다

def write_post(request):

return HttpResponse("장고 어렵지 아니해")

post App 폴더

urlpatterns = patterns('',url(r'^delete/', ‘post.views.delete_post’),url(r’^write/’, ‘post.views.write_post'),

)

Page 63: 쉽게 쓰여진 Django

기본 구조

urls.py

hexa.iptime.org:9000/post/write 로 접속

blog 의 urls.py 에서 어디를 봐야 할지 찾는다

urlpatterns = patterns('',url(r'^post/', include(‘post.urls')),url(r'^account/', include('account.urls')),

)

post 의 urls.py 에서 어디를 봐야 할지 찾는다

blog/├── blog│ ├── __init__.py│ ├── settings.py│ ├── urls.py│ └── wsgi.py├── post│ ├── __init__.py│ ├── admin.py│ ├── models.py│ ├── urls.py│ └── views.py├── account│ ├── __init__.py│ ├── admin.py│ ├── models.py│ ├── urls.py│ └── views.py└── manage.py

post 의 views.py 에서 무엇을 한다

post App 폴더

urlpatterns = patterns('',url(r'^delete/', ‘post.views.delete_post’),url(r’^write/’, ‘post.views.write_post'),

)

9001로 바꼈지만 못본척 해줘

Page 64: 쉽게 쓰여진 Django

즐거운코딩 타임뭔 소린진 몰라도 해보면 알겠지

기본 구조

Page 65: 쉽게 쓰여진 Django

기본 구조

코딩 타임

~/blog$ vi blog/urls.py

(...)urlpatterns = patterns('',

url(r'^helloworld/', include('helloworld.urls')),(...)

urls.py

ps. ^ 는주소앞부분의끝을의미→ hexa.iptime.org:9000/helloworld/

바로여기

Page 66: 쉽게 쓰여진 Django

기본 구조

코딩 타임

~/blog$ cp blog/urls.py helloworld/urls.py~/blog$ vi helloworld/urls.py

(...)urlpatterns = patterns('',

url(r'^$', 'helloworld.views.hello'),(...)

urls.py

ps. $ 는문장의끝을의미→ hexa.iptime.org:9000/helloworld/

바로여기

Page 67: 쉽게 쓰여진 Django

기본 구조

코딩 타임

(...)urlpatterns = patterns('',

url(r'^$', 'helloworld.views.hello'),(...)

helloworld/urls.py

(...)urlpatterns = patterns('',

url(r'^helloworld/', include('helloworld.urls')),(...)

blog/urls.py

blog/├── blog│ ├── __init__.py│ ├── settings.py│ ├── urls.py│ └── wsgi.py├── helloworld│ ├── __init__.py│ ├── admin.py│ ├── models.py│ ├── urls.py│ └── views.py└── manage.py

Page 68: 쉽게 쓰여진 Django

기본 구조

잠깐! 매번 URL이 바뀌는 건 어떻게 하지?

가족 같은헥사 1

친구란 이런 것 가족 같은헥사 2

Page 69: 쉽게 쓰여진 Django

기본 구조

Dynamic URL다이나믹 듀오 유알엘

Page 70: 쉽게 쓰여진 Django

기본 구조

Dynamic URL

~/blog$ vi helloworld/urls.py

(...)urlpatterns = patterns('',

url(r'^$', 'helloworld.views.hello'),url(r'^([\w]+)/', 'helloworld.views.hello'),

(...)

urls.py

ps. \w 는모든단어를의미→ /helloworld/123/ or /helloworld/HeXA/ps2. [\w] 는 모든 단어 중 하나를 의미ps3. [\w]+ 는 [\w]+가 하나 이상 있다는 의미ps4. ([\w]+) 는 하나의 value 로 취급

Page 71: 쉽게 쓰여진 Django

기본 구조

~/blog$ vi helloworld/views.py

from django.http import HttpResponse

# Create your views here.def hello(request, message = "HeXA"):

return HttpResponse("Hello, World! Your message is " + message)

views.py

Dynamic URL

message 가 아무것도 없을 때 자동으로 HeXA가 됨

Page 72: 쉽게 쓰여진 Django

기본 구조

Dynamic URL

message가 number로 바뀐 것 같은 건 너만의 착각

Page 73: 쉽게 쓰여진 Django

기본 구조

이제 urls.py 와 views.py 가 뭔지는 대충 이해 했겠지?!

못했다면 크고 아름답게 손을 들어!

Page 74: 쉽게 쓰여진 Django

중간 점검하프 웨이

Page 75: 쉽게 쓰여진 Django

중간 점검

이제 감이 슬슬 오나요?안 온다곤 하지마

Page 76: 쉽게 쓰여진 Django

이제 감이 슬슬 오나요?안 온다곤 하지마

언제 다하지...

템플릿까진 해야 하는데...

중간 점검

Page 77: 쉽게 쓰여진 Django

기본 구조

일단 프로젝트를 만들자

휴식 타임

여백의 미

피피티 만들기 귀찮아서는 절데 아니야

Page 78: 쉽게 쓰여진 Django

기본 구조

이제는 template를 알아보자이정돈 ‘중학교 필수 영단어’에서 마스터 했겠지?

Page 79: 쉽게 쓰여진 Django

기본 구조

내가 몰라서 찾아본 건 절대 아니야...

이제는 template를 알아보자

Page 80: 쉽게 쓰여진 Django

나는 (UNIST) (컴공)의 (칼페디엠)이다!나이는 (23)살, 여자친구는 (없)다!

야 (신난)다!

...

이런 게 대충 한 (300)줄쯤 된다고생각해보자! 야 (신난)다!

이쯤 되면 (항상똑같은 부분)은(분리)하는게 (좋)다는 걸 다들 느꼈겠지?

기본 구조

이제는 template를 알아보자

Page 81: 쉽게 쓰여진 Django

나는 (UNIST) (컴공)의 (턴즈)이다!나이는 (22)살, 여자친구는 (있)다!

야 (행복하)다!

...

이런 게 대충 한 (999)줄쯤 된다고생각해보자! 야 (싫)다!

이쯤 되면 (항상똑같은 부분)은(분리)하는게 (좋)다는 걸 다들 느꼈겠지?

기본 구조

이제는 template를 알아보자

Page 82: 쉽게 쓰여진 Django

나는 (UNIST) (컴공)의 (턴즈)이다!나이는 (22)살, 여자친구는 (있을리가 없)다!

야 (행복하)다!

...

이런 게 대충 한 (999)줄쯤 된다고생각해보자! 야 (싫)다!

이쯤 되면 (항상똑같은 부분)은(분리)하는게 (좋)다는 걸 다들 느꼈겠지?

기본 구조

이제는 template를 알아보자

Page 83: 쉽게 쓰여진 Django

기본 구조

반복되는 구조를 template로 만듦tempate == 틀

이제는 template를 알아보자

Page 84: 쉽게 쓰여진 Django

기본 구조

그럼 한번 적용해 보자!즐겁게 틀을 만들어 봅시다

이제는 template를 알아보자

Page 85: 쉽게 쓰여진 Django

기본 구조

~/blog$ mkdir templates~/blog$ vi templates/index.html

안녕하세요. 저는 {{ first }} 이고, {{ second}} 의 {{ third }} 입니다.

index.html

이제는 template를 알아보자

Page 86: 쉽게 쓰여진 Django

기본 구조

잠깐!까먹었는지 확인해 보자

이제는 template를 알아보자

Page 87: 쉽게 쓰여진 Django

뭘 고쳐야 할까?틀리면 때릴거다

기본 구조

이제는 template를 알아보자

방금 이걸 추가했는데

Page 88: 쉽게 쓰여진 Django

정답틀리면 때릴거다

기본 구조

이제는 template를 알아보자

1. 방금 추가한 template를

장고가 찾을 수 있게 알려줘야 하고

Page 89: 쉽게 쓰여진 Django

정답틀리면 때릴거다

기본 구조

이제는 template를 알아보자

2. 추가한 template이 사용될 URL을 정해야 하고1. 방금 추가한 template를

장고가 찾을 수 있게 알려줘야 하고

Page 90: 쉽게 쓰여진 Django

정답틀리면 때릴거다

기본 구조

이제는 template를 알아보자

2. 추가한 template이 사용될 URL을 정해야 하고

3. 그 URL에 대한 View를 정애야 함

1. 방금 추가한 template를

장고가 찾을 수 있게 알려줘야 하고

Page 91: 쉽게 쓰여진 Django

기본 구조

~/blog$ vi blog/settings.py

(...)

TEMPLATE_DIRS = ('./templates',

)

settings.py

이제는 template를 알아보자

Django 에게 아까 만든 tempates 디렉토리에서 tempate를 찾으라고 알려준다

1. 추가한 template를 장고가 찾을 수 있게 알려줘야 하고

Page 92: 쉽게 쓰여진 Django

기본 구조

~/blog$ vi helloworld/urls.py

(...)urlpatterns = patterns('',

url(r'^me/([\w]+)/([\w]+)/([\w]+)/', 'helloworld.views.me'), (...)

settings.py

이제는 template를 알아보자

name group role

2. 추가한 template이 사용될 URL을 정해야 하고

Page 93: 쉽게 쓰여진 Django

기본 구조

~/blog$ vi helloworld/views.py

from django.http import HttpResponsefrom django.template.loaderimport get_template from django.templateimport Context

def hello(request, message= 'HeXA'):return HttpResponse('Hello, World! Your number is ' + message)

def me(request, name, group, role):t = get_template('index.html')context = Context({'first': name,

'second': group,'third': role,})

html = t.render(context)return HttpResponse(html, mimetype = 'text/html;charset=UTF-8')

index.html

이제는 template를 알아보자

보통 가독성을 위해서 이렇게 이쁘게 쓴다

3. URL에 대한 View를 정애야 함

Page 94: 쉽게 쓰여진 Django

정답틀리면 때릴거다

기본 구조

이제는 template를 알아보자

2. 추가한 template이 사용될 URL을 정해야 하고

3. 그 URL에 대한 View를 정애야 함

1. 방금 추가한 template를

장고가 찾을 수 있게 알려줘야 하고

Page 95: 쉽게 쓰여진 Django

기본 구조

이제는 template를 알아보자

성공!

Page 96: 쉽게 쓰여진 Django
Page 97: 쉽게 쓰여진 Django

참 쉽죠?하핳

Page 98: 쉽게 쓰여진 Django

마지막 점검다 이해는 했겠지?

Page 99: 쉽게 쓰여진 Django

중간 점검

이제 감이 슬슬 오나요?안 온다곤 하지마

Page 100: 쉽게 쓰여진 Django

이제 감이 슬슬 오나요?안 온다곤 하지마

언제 다하지...모델은 언제 하지...

중간 점검

Page 101: 쉽게 쓰여진 Django

모델은 다음 시간에

Page 102: 쉽게 쓰여진 Django

맛보기

뭐지?!

Page 103: 쉽게 쓰여진 Django

from django.db import models

class Reporter(models.Model):full_name = models.CharField(max_length=70)

# On Python 3: def __str__(self):def __unicode__(self):

return self.full_name

class Article(models.Model):pub_date = models.DateField()headline = models.CharField(max_length=200)content = models.TextField()reporter = models.ForeignKey(Reporter)

# On Python 3: def __str__(self):def __unicode__(self):

return self.headline

맛보기

Page 104: 쉽게 쓰여진 Django

필수잡담 1. pip & virtualenv넘어가면 너 손해야... 난 몰라

Page 105: 쉽게 쓰여진 Django

Python?

pip & virtualenv

Page 106: 쉽게 쓰여진 Django

Python!

pip

pip & virtualenv

Page 107: 쉽게 쓰여진 Django

Tools for Python!

mechanize requests scrapy simplejson

pip

pip & virtualenv

Page 108: 쉽게 쓰여진 Django

Tools for Python = 모듈 (module)

mechanize requests scrapy simplejson

저게 뭔지는 지금 몰라도 됩니다

도서관 스터디룸 자동 예약 포탈봇 네이버 웹툰 “전부” 다운로더 울산 버스 알리미

pip

pip & virtualenv

Page 109: 쉽게 쓰여진 Django

모듈, 어떻게 설치할까?

pip

pip & virtualenv

Page 110: 쉽게 쓰여진 Django

$ pip install django$ pip install simplejson$ pip install mechanize

끝개.쉬.움

pip

pip & virtualenv

Page 111: 쉽게 쓰여진 Django

유명한 모듈들

pip

pip & virtualenv

Page 112: 쉽게 쓰여진 Django

HTTP 통신 for 인간이거 이전에 나온 건 쓰기 어렵

Django보다 가벼운 웹 개발이거 이전에 나온 건 쓰기 어렵

파이썬에서 엔드라이브 업로드Designed by carpedm20

음악 추천 with 머신러닝딱히 유명한건 아님

Page 113: 쉽게 쓰여진 Django

from twill.commands import *import timeimport stringwhile True:

for i in range(3):date=str(now.tm_year)+string.zfill(now.tm_mon,

2)+str(now.tm_mday+i)url='http://library2.unist.ac.kr/'+datego(url)

fv("2", 2, "20111167")fv("2", 3, "")submit('4')go(url)fv("2", 4, '3')fv("2", 5, "20111137")fv("2", 6, "20111168")

모듈 맛보기 : 스터디룸 자동 예약HeXA는 스터디룸 따위 뺏기지 않는다

Page 114: 쉽게 쓰여진 Django

Python

virtualenv

pip & virtualenv

Page 115: 쉽게 쓰여진 Django

Pythons ???

2.7.62.7.02.6.82.6.8 3.3.02.6.02.5.0

약간 왕따

virtualenv

pip & virtualenv

Page 116: 쉽게 쓰여진 Django

2.7.62.7.02.6.82.6.8 3.3.02.6.02.5.0

Python 버전마다 쓸 수 있는 도구가 다름

못 써 요 못 써 요

못 써 요

써 요

못 써 요

Page 117: 쉽게 쓰여진 Django

하지만 서버에 설치된 Python은 하나

Page 118: 쉽게 쓰여진 Django

내가 필요한 Python 및 도구만을 모아두는 방법은 없을까?

난 이게 좋아 ㅋ

내 전용 파이썬 공간 = 환경 = environment

Page 119: 쉽게 쓰여진 Django

virtualenv 등장!버추어 파이터 환경 = 가상 환경

virtualenv

pip & virtualenv

Page 120: 쉽게 쓰여진 Django

$ mkvirtualenv blogNew python executable in webtoon/bin/pythonInstalling setuptools............done.Installing pip...............done.

(blog)$ deactiviate

$ workon(...이미 생성된 가상 환경들의 목록...)

$ workon blog(blog)$

(blog)$ pip install DjangoDownloading/unpacking Django

Downloading Django-1.6.2.tar.gz (6.6MB): 6.6MB downloaded(...)

virtualenv

pip & virtualenv

Page 121: 쉽게 쓰여진 Django

(blog)carpedm30@HeXA:~$ python>>> import django>>> django.VERSION(1, 6, 2, 'final', 0)>>>

Django 설치 성공!

virtualenv

pip & virtualenv

Page 122: 쉽게 쓰여진 Django

필수잡담 2. Python 핵심 가이드넘어가면 너 손해야... 난 몰라 (2)

Page 123: 쉽게 쓰여진 Django

Python 철학

못생긴 것 보다 아름다운 것이 더 낫다.

함축적인 것 보다 분명한 것이 더 낫다.

복잡한 것 보다 간단한 것이 더 낫다.

중첩된 것 보다 일렬로 있는게 더 낫다.

빡빡한 것 보다 널널한게 더 낫다.

가독성이 중요하다.

...

모든 프로그래밍 언어에는 각자의 철학이 있다

by Tim Peters

Python 핵심 가이드

Page 124: 쉽게 쓰여진 Django

Python 철학

빠르게 짜고, 빠르게 확인하고, 빠르게 고친다

코딩은 즐거워야 한다

Quick & Fun

모든 프로그래밍 언어에는 각자의 철학이 있다

by carpedm20

Python 핵심 가이드

Page 125: 쉽게 쓰여진 Django

(blog)carpedm30@HeXA:~$ python >>> print 'hello world!''hello world!'

코드 ↔ cout << "hello world!" << endl;

결과값

Python 핵심 가이드

Page 126: 쉽게 쓰여진 Django

print 3 + 4 * (5 - 6)print 8 / 5 print 8.0 / 5print 8 % 5print 'carpedm20' * 4print 'carpedm20' + "carpedm20"

Python 핵심 가이드

Page 127: 쉽게 쓰여진 Django

(blog)carpedm30@HeXA:~$ python >>> 3 + 4 * (5 - 6)-1>>> 8 / 51>>> 8.0 / 51.6>>> 8 % 53>>> 'carpedm20' * 4'carpedm20carpedm20carpedm20carpedm20'>>> 'carpedm20' + "carpedm20"'carpedm20carpedm20'

코드

결과값

Python 핵심 가이드

인터프린터 : 프로그래밍 언어의 소스 코드를 바로 실행하는 컴퓨터 프로그램 또는 환경

잡다한 계산

Page 128: 쉽게 쓰여진 Django

>>> grade = 4>>> if grade < 3.3:... if grade < 2.7:... print "장짤"... else:... print "반장"... else:... print "완장"...완장>>>

Python 핵심 가이드

조건문 if

Page 129: 쉽게 쓰여진 Django

>>> sum = 0>>> for i in range(10):... sum += I...>>> print sum45>>> print range(10)[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]>>>

Python 핵심 가이드

반복문 for

↔ for (int i = 0; i < 10; i++)

Page 130: 쉽게 쓰여진 Django

>>> a=[1,2,3]>>> a[0]+a[1]+a[2]6>>> a[1]=5>>> a[1, 5, 3]>>>

Python 핵심 가이드

List

Page 131: 쉽게 쓰여진 Django

>>> a=(1,2,3)>>> a[0]+a[1]+a[2]6>>> a[1]=5Traceback (most recent call last):File "<stdin>", line 1, in <module>TypeError: 'tuple' object does not support item assignment>>> a(1, 2, 3)>>>

Python 핵심 가이드

Tuple

List 와 달리 = 연산자로 수정이 불가능!

Page 132: 쉽게 쓰여진 Django

>>> oldbie = [... ('김태훈', 2011, 23),... ('한충우', 2011, 22),... ('김도경', 2013, 23),... ]>>> for person in oldbie:... name, year, old = person... print name, year, '학번', old, '살'...김태훈 2011 학번 23 살한충우 2011 학번 22 살김도경 2013 학번 23 살>>>

Python 핵심 가이드

List & Tuple

이걸 c++로 짠다면?!

Page 133: 쉽게 쓰여진 Django

>>> def isOld(old):... if old == 22:... return True... else:... return False...>>> for person in oldbie:... name, _, old = person... if isOld(old):... print name + ' is old‘... else:... print name + ' is young‘...김태훈 is young한충우 is old 도경 is young

Python 핵심 가이드

Function

C++ 과 달리 return 타입을 지정해 주지 않아도 됨

↔ Skip 하고 싶은 변수는 _ 로

Page 134: 쉽게 쓰여진 Django

Page 135: 쉽게 쓰여진 Django

끝 인줄 알았니?내가 이렇게까지 설명 했는데, 과제를 해야 하지 않겠니?

Page 136: 쉽게 쓰여진 Django

기본 구조

PS. 이 ppt는 sparcs의 호떡의 장고세미나를 base로 만들어졌습니다

http://sparcs.kaist.ac.kr/seminar/#hodduc-20120618