51
2012 06 25

2012 06 25. 호떡의 장고 세미나 세 번째 시간 지난 시간에 뭐 했더라 ? 템플릿 필터 {{ 어쩌구 | 필터 1| 필터 2 }} 템플릿 태그 {% 여는태그 %}

Embed Size (px)

Citation preview

Page 1: 2012 06 25. 호떡의 장고 세미나 세 번째 시간 지난 시간에 뭐 했더라 ? 템플릿 필터 {{ 어쩌구 | 필터 1| 필터 2 }} 템플릿 태그 {% 여는태그 %}

20120625

Page 2: 2012 06 25. 호떡의 장고 세미나 세 번째 시간 지난 시간에 뭐 했더라 ? 템플릿 필터 {{ 어쩌구 | 필터 1| 필터 2 }} 템플릿 태그 {% 여는태그 %}

호떡의 장고 세미나 세 번째 시간

Page 3: 2012 06 25. 호떡의 장고 세미나 세 번째 시간 지난 시간에 뭐 했더라 ? 템플릿 필터 {{ 어쩌구 | 필터 1| 필터 2 }} 템플릿 태그 {% 여는태그 %}

지난 시간에 뭐 했더라 ?

Page 4: 2012 06 25. 호떡의 장고 세미나 세 번째 시간 지난 시간에 뭐 했더라 ? 템플릿 필터 {{ 어쩌구 | 필터 1| 필터 2 }} 템플릿 태그 {% 여는태그 %}

지난 시간에 뭐 했더라 ?

템플릿 필터 {{ 어쩌구 | 필터 1| 필터 2 }}

템플릿 태그 {% 여는태그 %} … {% 닫는태그 %}

Models class Person(models.Model)

Admin /admin/

Page 5: 2012 06 25. 호떡의 장고 세미나 세 번째 시간 지난 시간에 뭐 했더라 ? 템플릿 필터 {{ 어쩌구 | 필터 1| 필터 2 }} 템플릿 태그 {% 여는태그 %}

Reusing templates

Users

Form

Today’s Topic

Page 6: 2012 06 25. 호떡의 장고 세미나 세 번째 시간 지난 시간에 뭐 했더라 ? 템플릿 필터 {{ 어쩌구 | 필터 1| 필터 2 }} 템플릿 태그 {% 여는태그 %}

int sum1 = 0;int sum2 = 0; int average1 = 0; int average2 = 0;

for (int i = 0; i < 4; i++) { sum1 += array1[i]; }average1 = sum1/4;

for (int i = 0; i < 4; i++) { sum2 += array2[i]; } average2 = sum2/4;

Page 7: 2012 06 25. 호떡의 장고 세미나 세 번째 시간 지난 시간에 뭐 했더라 ? 템플릿 필터 {{ 어쩌구 | 필터 1| 필터 2 }} 템플릿 태그 {% 여는태그 %}

int sum1 = 0;int sum2 = 0; int average1 = 0; int average2 = 0;

for (int i = 0; i < 4; i++) { sum1 += array1[i]; }average1 = sum1/4;

for (int i = 0; i < 4; i++) { sum2 += array2[i]; } average2 = sum2/4;

Page 8: 2012 06 25. 호떡의 장고 세미나 세 번째 시간 지난 시간에 뭐 했더라 ? 템플릿 필터 {{ 어쩌구 | 필터 1| 필터 2 }} 템플릿 태그 {% 여는태그 %}

코드의 중복

Page 9: 2012 06 25. 호떡의 장고 세미나 세 번째 시간 지난 시간에 뭐 했더라 ? 템플릿 필터 {{ 어쩌구 | 필터 1| 필터 2 }} 템플릿 태그 {% 여는태그 %}

묶어봅시다

Page 10: 2012 06 25. 호떡의 장고 세미나 세 번째 시간 지난 시간에 뭐 했더라 ? 템플릿 필터 {{ 어쩌구 | 필터 1| 필터 2 }} 템플릿 태그 {% 여는태그 %}

v

Page 11: 2012 06 25. 호떡의 장고 세미나 세 번째 시간 지난 시간에 뭐 했더라 ? 템플릿 필터 {{ 어쩌구 | 필터 1| 필터 2 }} 템플릿 태그 {% 여는태그 %}
Page 12: 2012 06 25. 호떡의 장고 세미나 세 번째 시간 지난 시간에 뭐 했더라 ? 템플릿 필터 {{ 어쩌구 | 필터 1| 필터 2 }} 템플릿 태그 {% 여는태그 %}
Page 13: 2012 06 25. 호떡의 장고 세미나 세 번째 시간 지난 시간에 뭐 했더라 ? 템플릿 필터 {{ 어쩌구 | 필터 1| 필터 2 }} 템플릿 태그 {% 여는태그 %}

v

Content !

Page 14: 2012 06 25. 호떡의 장고 세미나 세 번째 시간 지난 시간에 뭐 했더라 ? 템플릿 필터 {{ 어쩌구 | 필터 1| 필터 2 }} 템플릿 태그 {% 여는태그 %}

Outline

Content

..{% block content %}기본으로 보일 내용 ..{% endblock %}..

base.html

..{% extends “base.html” %}{% block content %}덮어쓸 내용 !{% endblock %}..

something.html

Page 15: 2012 06 25. 호떡의 장고 세미나 세 번째 시간 지난 시간에 뭐 했더라 ? 템플릿 필터 {{ 어쩌구 | 필터 1| 필터 2 }} 템플릿 태그 {% 여는태그 %}
Page 16: 2012 06 25. 호떡의 장고 세미나 세 번째 시간 지난 시간에 뭐 했더라 ? 템플릿 필터 {{ 어쩌구 | 필터 1| 필터 2 }} 템플릿 태그 {% 여는태그 %}
Page 17: 2012 06 25. 호떡의 장고 세미나 세 번째 시간 지난 시간에 뭐 했더라 ? 템플릿 필터 {{ 어쩌구 | 필터 1| 필터 2 }} 템플릿 태그 {% 여는태그 %}

Outline

Content

..<div class=‘title’>{% block title %}{% endblock %}</div>{% block content %}{% endblock %}..

base.html

{% extends “base.html” %}{% block title %}제목제목제목 {% endblock %}{% block content %}내용내용내용내용{% endblock %}something.html

Title

Page 18: 2012 06 25. 호떡의 장고 세미나 세 번째 시간 지난 시간에 뭐 했더라 ? 템플릿 필터 {{ 어쩌구 | 필터 1| 필터 2 }} 템플릿 태그 {% 여는태그 %}

Outline

{% block title %}{% endblock %}{% block content %}{% endblock %}

base.html

Outline_Inner {% extends “base.html” %}{% block title %} 제목{% endblock %}{% block content %}... {% block inner_content %} {% endblock %}{% endblock %}

something.html

Title

Content

app/base.html {% extends “app/

base.html” %}{% block inner_content %}..{% endblock %}

Page 19: 2012 06 25. 호떡의 장고 세미나 세 번째 시간 지난 시간에 뭐 했더라 ? 템플릿 필터 {{ 어쩌구 | 필터 1| 필터 2 }} 템플릿 태그 {% 여는태그 %}

Forms

Page 20: 2012 06 25. 호떡의 장고 세미나 세 번째 시간 지난 시간에 뭐 했더라 ? 템플릿 필터 {{ 어쩌구 | 필터 1| 필터 2 }} 템플릿 태그 {% 여는태그 %}

덧셈 계산기

Page 21: 2012 06 25. 호떡의 장고 세미나 세 번째 시간 지난 시간에 뭐 했더라 ? 템플릿 필터 {{ 어쩌구 | 필터 1| 필터 2 }} 템플릿 태그 {% 여는태그 %}

~/tutorial $ python manage.py startapp calc

Page 22: 2012 06 25. 호떡의 장고 세미나 세 번째 시간 지난 시간에 뭐 했더라 ? 템플릿 필터 {{ 어쩌구 | 필터 1| 필터 2 }} 템플릿 태그 {% 여는태그 %}

~/tutorial $ vi templates/calc.html

<form method='POST' action='/calc/'> <input type="text" name="n1"> 더하기 <input type="text" name="n2"> <input type="submit" value=" 계산 "> {% if result %} 결과는 {{ result }} {% endif %}</form>

Page 23: 2012 06 25. 호떡의 장고 세미나 세 번째 시간 지난 시간에 뭐 했더라 ? 템플릿 필터 {{ 어쩌구 | 필터 1| 필터 2 }} 템플릿 태그 {% 여는태그 %}

~/tutorial $ vi calc/views.py

from django.shortcuts import renderdef calc(request): if request.method == 'GET': return render(request, 'calc.html') else: n1 = int(request.POST.get('n1', 0)) n2 = int(request.POST.get('n2', 0)) return render(request, 'calc.html', {'re-sult': n1+n2})

이제 INSTALLED_APPS, URL 설정들은 알아서

Page 24: 2012 06 25. 호떡의 장고 세미나 세 번째 시간 지난 시간에 뭐 했더라 ? 템플릿 필터 {{ 어쩌구 | 필터 1| 필터 2 }} 템플릿 태그 {% 여는태그 %}
Page 25: 2012 06 25. 호떡의 장고 세미나 세 번째 시간 지난 시간에 뭐 했더라 ? 템플릿 필터 {{ 어쩌구 | 필터 1| 필터 2 }} 템플릿 태그 {% 여는태그 %}

~/tutorial $ vi templates/calc.html

<form method='POST' action='/calc/'> <input type="text" name="n1"> 더하기 <input type="text" name="n2"> <input type="submit" value=" 계산 "> {% csrf_token %} {% if result %} 결과는 {{ result }} {% endif %}</form>

Page 26: 2012 06 25. 호떡의 장고 세미나 세 번째 시간 지난 시간에 뭐 했더라 ? 템플릿 필터 {{ 어쩌구 | 필터 1| 필터 2 }} 템플릿 태그 {% 여는태그 %}
Page 27: 2012 06 25. 호떡의 장고 세미나 세 번째 시간 지난 시간에 뭐 했더라 ? 템플릿 필터 {{ 어쩌구 | 필터 1| 필터 2 }} 템플릿 태그 {% 여는태그 %}
Page 28: 2012 06 25. 호떡의 장고 세미나 세 번째 시간 지난 시간에 뭐 했더라 ? 템플릿 필터 {{ 어쩌구 | 필터 1| 필터 2 }} 템플릿 태그 {% 여는태그 %}

~/tutorial $ vi calc/views.py

from django.shortcuts import renderdef calc(request): if request.method == 'GET': return render(request, 'calc.html') else: errors = [] try: n1 = int(request.POST.get('n1', 0)) n2 = int(request.POST.get('n2', 0)) result = n1 + n2 except ValueError: errors.append('Not a number!') result = 0

return render(request, 'calc.html', {'re-sult': result, 'errors': errors})

Page 29: 2012 06 25. 호떡의 장고 세미나 세 번째 시간 지난 시간에 뭐 했더라 ? 템플릿 필터 {{ 어쩌구 | 필터 1| 필터 2 }} 템플릿 태그 {% 여는태그 %}

~/tutorial $ vi templates/calc.html

<form method='POST' action='/calc/'> <input type="text" name="n1"> 더하기 <input type="text" name="n2"> <input type="submit" value=" 계산 "> {% csrf_token %} {% for error in errors %} {{ error }} <br /> {% empty %} {% if result %} 결과는 {{ result }} {% endif %} {% endfor %}</form>

Page 30: 2012 06 25. 호떡의 장고 세미나 세 번째 시간 지난 시간에 뭐 했더라 ? 템플릿 필터 {{ 어쩌구 | 필터 1| 필터 2 }} 템플릿 태그 {% 여는태그 %}

실습 1 : 이준영 파이널

Page 31: 2012 06 25. 호떡의 장고 세미나 세 번째 시간 지난 시간에 뭐 했더라 ? 템플릿 필터 {{ 어쩌구 | 필터 1| 필터 2 }} 템플릿 태그 {% 여는태그 %}

더 알고싶은 사람을 위해…개인적으로는 추천하지 않습니다

… 쓰고싶으면 써보세요

Page 32: 2012 06 25. 호떡의 장고 세미나 세 번째 시간 지난 시간에 뭐 했더라 ? 템플릿 필터 {{ 어쩌구 | 필터 1| 필터 2 }} 템플릿 태그 {% 여는태그 %}

Users

Page 33: 2012 06 25. 호떡의 장고 세미나 세 번째 시간 지난 시간에 뭐 했더라 ? 템플릿 필터 {{ 어쩌구 | 필터 1| 필터 2 }} 템플릿 태그 {% 여는태그 %}

?

Page 34: 2012 06 25. 호떡의 장고 세미나 세 번째 시간 지난 시간에 뭐 했더라 ? 템플릿 필터 {{ 어쩌구 | 필터 1| 필터 2 }} 템플릿 태그 {% 여는태그 %}
Page 35: 2012 06 25. 호떡의 장고 세미나 세 번째 시간 지난 시간에 뭐 했더라 ? 템플릿 필터 {{ 어쩌구 | 필터 1| 필터 2 }} 템플릿 태그 {% 여는태그 %}

~/tutorial $ python manage.py shell>>> from django.contrib.auth.models import User>>> user = User.objects.create_user('rodumani', '[email protected]', 'bakwi')>>> user.save()>>>>>> user.is_staff = True>>> user.save()

유저 추가하기

Page 36: 2012 06 25. 호떡의 장고 세미나 세 번째 시간 지난 시간에 뭐 했더라 ? 템플릿 필터 {{ 어쩌구 | 필터 1| 필터 2 }} 템플릿 태그 {% 여는태그 %}

~/tutorial $ python manage.py shell>>> from django.contrib.auth import au-thenticate>>> authenticate(username='rodumani', password='logue')>>> authenticate(username='rodumani', password='bakwi')<User: rodumani>

ID/PW 확인하기

Page 37: 2012 06 25. 호떡의 장고 세미나 세 번째 시간 지난 시간에 뭐 했더라 ? 템플릿 필터 {{ 어쩌구 | 필터 1| 필터 2 }} 템플릿 태그 {% 여는태그 %}

실습 2 : Ahae 회원제로 바꾸기

Page 38: 2012 06 25. 호떡의 장고 세미나 세 번째 시간 지난 시간에 뭐 했더라 ? 템플릿 필터 {{ 어쩌구 | 필터 1| 필터 2 }} 템플릿 태그 {% 여는태그 %}

~/tutorial $ vi templates/login.html

<form method="POST" action="/ahae/login/"> ID <input type="text" name="username"> PW <input type="password" name="password"> <input type="submit"> {% csrf_token %}</form>

{{ error }}

Page 39: 2012 06 25. 호떡의 장고 세미나 세 번째 시간 지난 시간에 뭐 했더라 ? 템플릿 필터 {{ 어쩌구 | 필터 1| 필터 2 }} 템플릿 태그 {% 여는태그 %}

~/tutorial $ vi ahae/views.py

from django.shortcuts import redirectfrom django.contrib.auth import authenticate, logindef ahae_login(request): if request.method == 'POST': username = request.POST['username'] password = request.POST['password'] user = authenticate(username=username, pass-word=password) if user is not None and user.is_active: login(request, user) return redirect('/ahae/13/') else: error = "Invalid login" return render(request, 'login.html', {'error': error}) return render(request, 'login.html')

Page 40: 2012 06 25. 호떡의 장고 세미나 세 번째 시간 지난 시간에 뭐 했더라 ? 템플릿 필터 {{ 어쩌구 | 필터 1| 필터 2 }} 템플릿 태그 {% 여는태그 %}

~/tutorial $ vi ahae/urls.pyurlpatterns = patterns('', url(r'^(\d+)/', 'ahae.views.print_ahae'), url(r'^login/$', 'ahae.views.ahae_login'),)

Page 41: 2012 06 25. 호떡의 장고 세미나 세 번째 시간 지난 시간에 뭐 했더라 ? 템플릿 필터 {{ 어쩌구 | 필터 1| 필터 2 }} 템플릿 태그 {% 여는태그 %}

Rodumani, 1212 를 입력하면…

Rodumani, bakwi 를 입력하면…

Page 42: 2012 06 25. 호떡의 장고 세미나 세 번째 시간 지난 시간에 뭐 했더라 ? 템플릿 필터 {{ 어쩌구 | 필터 1| 필터 2 }} 템플릿 태그 {% 여는태그 %}

~/tutorial $ vi ahae/views.pyfrom django.contrib.auth.decorators import login_required@login_required(login_url='/ahae/login/')def print_ahae(request, N): N = int(N) ...

def ahae_login(request): ... if user is not None and user.is_active: login(request, user) return redirect(request.POST['next']) else: ... return ... return render(request, 'login.html', {'next': re-quest.GET.get('next', '/ahae/13/')})

Page 43: 2012 06 25. 호떡의 장고 세미나 세 번째 시간 지난 시간에 뭐 했더라 ? 템플릿 필터 {{ 어쩌구 | 필터 1| 필터 2 }} 템플릿 태그 {% 여는태그 %}

~/tutorial $ vi templates/login.html<form method="POST" action="/ahae/login/"> ID <input type="text" name="username"> PW <input type="password" name="password"> <input type="submit"> <input type="hidden" name="next" value="{{ next }}"> {% csrf_token %}</form>

{{ error }}

Page 44: 2012 06 25. 호떡의 장고 세미나 세 번째 시간 지난 시간에 뭐 했더라 ? 템플릿 필터 {{ 어쩌구 | 필터 1| 필터 2 }} 템플릿 태그 {% 여는태그 %}

오늘은 여기까지 !

Page 45: 2012 06 25. 호떡의 장고 세미나 세 번째 시간 지난 시간에 뭐 했더라 ? 템플릿 필터 {{ 어쩌구 | 필터 1| 필터 2 }} 템플릿 태그 {% 여는태그 %}

미니 프로젝트

Page 46: 2012 06 25. 호떡의 장고 세미나 세 번째 시간 지난 시간에 뭐 했더라 ? 템플릿 필터 {{ 어쩌구 | 필터 1| 필터 2 }} 템플릿 태그 {% 여는태그 %}

• 주제 자유

• 3~4 인 1 팀 구성

• Trac, SVN 을 사용할 것

• 페이지 2 개 이상 , Model 2 가지 이상

사용

(Form 이 하나 이상 들어가도록 )

• Admin 구현

• ~ 수요일 7 시까지

미니 프로젝트 !?

Page 47: 2012 06 25. 호떡의 장고 세미나 세 번째 시간 지난 시간에 뭐 했더라 ? 템플릿 필터 {{ 어쩌구 | 필터 1| 필터 2 }} 템플릿 태그 {% 여는태그 %}

팀 구성

/ 민정 지향 필립/ 종욱 중언 태현 / ( 박 ) 준성 재의 지혁/ 창원 정민 기훈

143.248.234.124 팀장 이름 ... SVN

Page 48: 2012 06 25. 호떡의 장고 세미나 세 번째 시간 지난 시간에 뭐 했더라 ? 템플릿 필터 {{ 어쩌구 | 필터 1| 필터 2 }} 템플릿 태그 {% 여는태그 %}

다음 예고 : 수요일 7 시

• 가급적 수요일 낮부터 만나서 마무리 작업을 할 것을 권장

• 수요일 7 시에 모여서 발표 , 평가 진행• 가장 잘 한 팀에게는 상품이…

Page 49: 2012 06 25. 호떡의 장고 세미나 세 번째 시간 지난 시간에 뭐 했더라 ? 템플릿 필터 {{ 어쩌구 | 필터 1| 필터 2 }} 템플릿 태그 {% 여는태그 %}

마지막 예고 : 금요일 9 시

• 그 동안 못 다룬 토픽들• Django Deployment Tips

Page 50: 2012 06 25. 호떡의 장고 세미나 세 번째 시간 지난 시간에 뭐 했더라 ? 템플릿 필터 {{ 어쩌구 | 필터 1| 필터 2 }} 템플릿 태그 {% 여는태그 %}

http://djangobook.com http://djangoproject.com

http://djangosnippet-s.org

Page 51: 2012 06 25. 호떡의 장고 세미나 세 번째 시간 지난 시간에 뭐 했더라 ? 템플릿 필터 {{ 어쩌구 | 필터 1| 필터 2 }} 템플릿 태그 {% 여는태그 %}

Hodduc@SPARCS