710 likes | 730 Views
2012 06 18. The web framework for perfectionists with deadlines. django. KAIST PORTAL. SPARCS 홈페이지 bitbucket.org 대부분의 Trac System Google App Engine ……. and…. http://mashable.com/2011/07/26/startup-tools/. Django makes it easier to build better Web apps
E N D
SPARCS 홈페이지 bitbucket.org 대부분의 Trac System Google App Engine …… and…
Django makes it easier to build better Web apps More quickly, and with less code. django
@Hodduci ARAra / Wheel 아제로스 행성오그리마 시 지혜의 골짜기 마을 SPARCS 10 / KAIST 10 호떡
CGI vs. Django Why we use django? What is web?
Request: ara.kaist.ac.kr Response: 200 OK Server Client
Request: ara.kaist.ac.kr Response: 200 OK Server Client
서버님, http://ara.kaist.ac.kr 좀 보내주세요 INPUT을 받아 OUTPUT 출력하기 여기요 ㄲㄲ
#include <iostream> using namespace std; int main() { cin >> input; (do something…) cout << output; return 0; } The simplest way
#include <stdio.h> #include <stdlib.h> int main(void) { char *data; long m,n; printf("%s%c%c\n", "Content-Type:text/html;charset=iso-8859-1",13,10); printf("<TITLE>Multiplication results</TITLE>\n"); printf("<H3>Multiplication results</H3>\n"); data = getenv("QUERY_STRING"); if(data == NULL) printf("<P>Error! Error in passing data from form to script."); else if(sscanf(data,"m=%ld&n=%ld",&m,&n)!=2) printf("<P>Error! Invalid data. Data must be numeric."); else printf("<P>The product of %ld and %ld is %ld.",m,n,m*n); return 0; } = CGI
우리에겐 재겸신이Django가 있으니까요! Don’t reinvent the wheel
Project / Application Basic structure
! Project ‘tutorial’ with ‘helloworld’, ‘intro’ apps 오늘의 프로젝트
무작정 따라 해봅시다 Hello, World!
~ $ django-admin.py startproject tutorial ~ $ cd tutorial ~/tutorial $ ls manage.py tutorial ~/tutorial $ ls tutorial __init__.py settings.py urls.py wsgi.py
tutorial/ manage.py tutorial/ __init__.py settings.py urls.py wsgi.py 프로젝트 관리 유틸리티 패키지 디렉토리 Empty file : Python package 구분자 각종 세팅이 들어있는 파일 URL 매핑을 하는 파일 WSGI entry point
~/tutorial $ python manage.py runserver 0.0.0.0:port 실습 중에는 20000~30000 사이 아무거나 잡아서 쓰세요. 혹시 누군가와 숫자가 겹친다면 그것은 운명의 장난~♥
~/tutorial $ python manage.py startapphelloworld ~/tutorial $ ls helloworld manage.py tutorial ~/tutorial $ lshelloworld __init__.py models.py tests.py views.py
~/tutorial $ cd helloworld ~/tutorial/helloworld $ vi views.py from django.http import HttpResponse # Create your views here. defhelloworld(request): return HttpResponse("Hello, World!") 1. View 작성하기
~/tutorial/helloworld $ cd ../tutorial ~/tutorial/tutorial $ vi urls.py … urlpatterns = patterns(‘’, url(r‘^helloworld/’, ‘helloworld.views.helloworld’), … 2. View의 함수에 대응되는 URL 만들기
~/tutorial/tutorial $ vi settings.py INSTALLED_APPS = ( …. ‘django.contrib.messages’, ‘helloworld’, ) 3. 추가된 App을 Project에 등록하기
~/tutorial $ python manage.py runserver 0.0.0.0:port http://bit.sparcs.org:12345/
~/tutorial $ python manage.py runserver 0.0.0.0:port http://bit.sparcs.org:12345/helloworld/
Recursive URL Patterns Dynamic URL URL processing
urls.py • /register/ 는 User 앱의register() 로 가시구요 • /login/ 는 User 앱의login()로 가시구요. • /write/ 는 Board 앱의write_article() 로 가세요! … urlpatterns = patterns(‘’, (r‘^register/’, ‘myproj.User.views.register’), (r‘^login/’, ‘myproj.User.views.login’), (r’^write/’, ‘myproj.Board.views.write_article’), )
서울에서 부산까지 가는데모든 가능한 길이 한 이정표에 있다면?
urls.py • /user 는 User 앱으로가시구요 • /board 는 Board 앱으로 가세요. • 자세한 건 가보시면 압니다! … urlpatterns = patterns(‘’, (r‘^user/’, include(‘myproj.User.urls’)), (r’^board/’, include(‘myproj.Board.urls’)), )
/user/urls.py • /user/register/ 는 register() 로 가시구요 • /user/login/ 는 login() 로 가세요. • 그 외엔 관심 없어요! 잘못 오셨네요! … urlpatterns = patterns(‘’, (r‘^register/’, ‘views.register’), (r‘^login/’, ‘views.login’), )
~/tutorial $ vi tutorial/urls.py … urlpatterns = patterns(‘’, (r‘^helloworld/’, include(‘helloworld.urls’)), …
~/tutorial $ cp tutorial/urls.py helloworld/ ~/tutorial $ vi helloworld/urls.py … urlpatterns = patterns(‘’, (r‘^$’, ‘helloworld.views.hello’)), …
Tutorial/tutorial/urls.py … urlpatterns = patterns(‘’, (r‘^helloworld/’, include(‘helloworld.urls’)), … Tutorial/helloworld/urls.py … urlpatterns = patterns(‘’, (r‘^$’, ‘helloworld.views.helloworld’)), …
나는 자바계의 김정일이다! / K.H.L. 으아ㅏ아ㅏㅏㅏㅏㅏㅏㅏㅏ 대포동 발사!! /board/garbages/123456 아라개발팀에 카와이한 디자이너님이 계시다던데 사실인가요 / 호떡 진실은 저 너머에 /board/qandA/654321 여자친구와 데이트 후기 / qwertyasdf /board/love/1048576 매번 바뀌는 URL 규칙 참고: 픽션입니다 ^^
Dynamic URL • 저 regExp에 맞는 URL을 read로 보내주세요. • 단, 각각 match된 부분을 read의 Parameter로 쓸 거에요! … urlpatterns = patterns(‘’, … (r'^([\w \[\]\.]+)/([\d]+)/$', ‘warara.board.views.read') … )
Dynamic URL 만약 /garbage/3334343/ 라면 read(request, ‘garbage’, ‘3334343’) 을 호출한 것과 같게 동작 … urlpatterns = patterns(‘’, … (r'^([\w \[\]\.]+)/([\d]+)/$', ‘warara.board.views.read') … )
~/tutorial $ cd intro ~/tutorial/intro $ vi views.py # -*- coding: utf-8 -*- from django.http import HttpResponse def me(request, city, town, name): s = u"나는 %s %s의 %s이다!" % (city, town, name) return HttpResponse(s, mimetype='text/html; charset=UTF-8') 1. View 작성하기