20120625
호떡의 장고 세미나 세 번째 시간
지난 시간에 뭐 했더라 ?
지난 시간에 뭐 했더라 ?
템플릿 필터 {{ 어쩌구 | 필터 1| 필터 2 }}
템플릿 태그 {% 여는태그 %} … {% 닫는태그 %}Models class Person(models.Model)
Admin /admin/
Reusing templatesUsersForm
Today’s Topic
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;
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;
코드의 중복
묶어봅시다
v
v
Content !
Outline
Content
..{% block content %}기본으로 보일 내용 ..{% endblock %}..
base.html
..{% extends “base.html” %}{% block content %}덮어쓸 내용 !{% endblock %}..
something.html
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
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 %}
Forms
덧셈 계산기
~/tutorial $ python manage.py startapp calc
~/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>
~/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 설정들은 알아서
~/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>
~/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})
~/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>
실습 1 : 이준영 파이널
더 알고싶은 사람을 위해…개인적으로는 추천하지 않습니다
… 쓰고싶으면 써보세요
Users
?
~/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()
유저 추가하기
~/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 확인하기
실습 2 : Ahae 회원제로 바꾸기
~/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 }}
~/tutorial $ vi ahae/views.pyfrom 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')
~/tutorial $ vi ahae/urls.pyurlpatterns = patterns('', url(r'^(\d+)/', 'ahae.views.print_ahae'), url(r'^login/$', 'ahae.views.ahae_login'),)
Rodumani, 1212 를 입력하면…
Rodumani, bakwi 를 입력하면…
~/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/')})
~/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 }}
오늘은 여기까지 !
미니 프로젝트
• 주제 자유
• 3~4 인 1 팀 구성
• Trac, SVN 을 사용할 것
• 페이지 2 개 이상 , Model 2 가지 이상
사용
(Form 이 하나 이상 들어가도록 )• Admin 구현
• ~ 수요일 7 시까지
미니 프로젝트 !?
팀 구성
/ 민정 지향 필립/ 종욱 중언 태현 / ( 박 ) 준성 재의 지혁/ 창원 정민 기훈
143.248.234.124 팀장 이름 ... SVN
다음 예고 : 수요일 7 시
• 가급적 수요일 낮부터 만나서 마무리 작업을 할 것을 권장
• 수요일 7 시에 모여서 발표 , 평가 진행• 가장 잘 한 팀에게는 상품이…
마지막 예고 : 금요일 9 시
• 그 동안 못 다룬 토픽들• Django Deployment Tips
http://djangobook.com http://djangoproject.com
http://djangosnippet-s.org
Hodduc@SPARCS
Top Related