1 / 51

2012 06 25

2012 06 25 . 호떡의 장고 세미나. 세 번째 시간. 지난 시간에 뭐 했더라 ?. 템플릿 필터. {{ 어쩌구 | 필터 1| 필터 2 }}. 템플릿 태그. {% 여는태그 %} … {% 닫는태그 %}. Models. c lass Person( models.Model ). Admin. /admin/. 지난 시간에 뭐 했더라 ?. Reusing templates Users Form. Today’s Topic. int sum1 = 0 ; int sum2 = 0;

missy
Download Presentation

2012 06 25

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 20120625

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

  3. 지난 시간에뭐했더라?

  4. 템플릿 필터 {{ 어쩌구|필터1|필터2 }} 템플릿 태그 {% 여는태그%} … {% 닫는태그%} Models class Person(models.Model) Admin /admin/ 지난 시간에뭐했더라?

  5. Reusing templates Users Form Today’sTopic

  6. 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;

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

  8. 코드의 중복

  9. 묶어봅시다

  10. v

  11. v Content !

  12. base.html .. {% block content %} 기본으로 보일 내용.. {% endblock %} .. Outline Content .. {% extends “base.html” %} {% block content %} 덮어쓸 내용! {% endblock %} .. something.html

  13. base.html .. <div class=‘title’> {% block title%} {% endblock %} </div> {% block content %} {% endblock %} .. Outline Title Content {% extends “base.html” %} {% block title %}제목제목제목{% endblock %} {% block content %} 내용내용내용내용 {% endblock %} something.html

  14. base.html {% block title %} {% endblock %} {% block content %} {% endblock %} Outline Outline_Inner Title {% extends “base.html” %} {% block title %}제목 {% endblock %} {% block content %} ... {% block inner_content%} {% endblock %} {% endblock %} Content app/base.html {% extends “app/base.html” %} {% block inner_content%} ..{% endblock %} something.html

  15. Forms

  16. 덧셈 계산기

  17. ~/tutorial $ python manage.py startappcalc

  18. ~/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>

  19. ~/tutorial $ vi calc/views.py from django.shortcuts import render defcalc(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', {'result': n1+n2}) 이제 INSTALLED_APPS, URL 설정들은 알아서 

  20. ~/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>

  21. ~/tutorial $ vi calc/views.py from django.shortcuts import render defcalc(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', {'result': result, 'errors': errors})

  22. ~/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>

  23. 실습1: 이준영 파이널

  24. 더 알고싶은 사람을 위해… 개인적으로는 추천하지 않습니다 …쓰고싶으면 써보세요

  25. Users

  26. ?

  27. ~/tutorial $ python manage.py shell >>> from django.contrib.auth.models import User >>> user = User.objects.create_user('rodumani', 'changjej@gmail.com', 'bakwi') >>> user.save() >>> >>> user.is_staff = True >>> user.save() 유저 추가하기

  28. ~/tutorial $ python manage.py shell >>> from django.contrib.auth import authenticate >>> authenticate(username='rodumani', password='logue') >>> authenticate(username='rodumani', password='bakwi') <User: rodumani> ID/PW 확인하기

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

  30. ~/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 }}

  31. ~/tutorial $ vi ahae/views.py from django.shortcuts import redirect from django.contrib.auth import authenticate, login defahae_login(request): if request.method == 'POST': username = request.POST['username'] password = request.POST['password'] user = authenticate(username=username, password=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')

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

  33. Rodumani, 1212를 입력하면… Rodumani, bakwi를 입력하면…

  34. ~/tutorial $ vi ahae/views.py from django.contrib.auth.decorators import login_required @login_required(login_url='/ahae/login/') def print_ahae(request, N): N = int(N) ... defahae_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': request.GET.get('next', '/ahae/13/')})

  35. ~/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 }}

  36. 오늘은 여기까지!

  37. 미니 프로젝트

  38. 미니 프로젝트!? • 주제 자유 • 3~4인 1팀 구성 • Trac, SVN을 사용할 것 • 페이지 2개 이상, Model 2가지 이상 사용(Form이 하나 이상 들어가도록) • Admin 구현 • ~ 수요일 7시까지

  39. / 민정 지향 필립 / 종욱 중언 태현 / (박)준성 재의 지혁 / 창원 정민 기훈 143.248.234.124 팀장이름... SVN 팀 구성

  40. 다음 예고 : 수요일 7시 • 가급적 수요일 낮부터 만나서 마무리 작업을 할 것을 권장 • 수요일 7시에 모여서 발표, 평가 진행 • 가장 잘 한 팀에게는 상품이…

  41. 마지막예고 :금요일 9시 • 그 동안 못 다룬 토픽들 • Django Deployment Tips

  42. http://djangobook.com http://djangoproject.com http://djangosnippets.org

More Related