건전지로 달리는 쟝고 세미나. 정재성 django web framework cgi

79
건건건건 건건건 건건 건건건

Upload: kale-fairless

Post on 02-Apr-2015

225 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

건전지로 달리는쟝고 세미나

Page 2: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

정재성

Page 3: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

Django

Page 4: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

Web Framework

Page 5: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

CGI

Page 6: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

#!/usr/bin/env python

import MySQLdb

print "Content-Type: text/html\n"print "<html><head><title>Books</title></head>"print "<body>"print "<h1>Books</h1>"print "<ul>"

connection = MySQLdb.connect(user='me', passwd='letmein', db='my_db')cursor = connection.cursor()cursor.execute("SELECT name FROM books ORDER BY pub_date DESC LIMIT 10")

for row in cursor.fetchall(): print "<li>%s</li>" % row[0]

print "</ul>"print "</body></html>"

connection.close()

Page 7: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

Don’t reinvent the wheel.

Page 8: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

MVC

Page 9: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

#!/usr/bin/env python

import MySQLdb

print "Content-Type: text/html\n"print "<html><head><title>Books</title></head>"print "<body>"print "<h1>Books</h1>"print "<ul>"

connection = MySQLdb.connect(user='me', passwd='letmein', db='my_db')cursor = connection.cursor()cursor.execute("SELECT name FROM books ORDER BY pub_date DESC LIMIT 10")

for row in cursor.fetchall(): print "<li>%s</li>" % row[0]

print "</ul>"print "</body></html>"

connection.close()

Page 10: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

models.pyviews.pyurls.py

template.html

Page 11: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

# models.py (the database tables)

from django.db import models

class Book(models.Model): name = models.CharField(max_length=50) pub_date = models.DateField()

Page 12: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

# views.py (the business logic)

from django.shortcuts import render_to_responsefrom models import Book

def latest_books(request): book_list = Book.objects.order_by('-pub_date')[:10] return render_to_response('latest_books.html', {'book_list': book_list})

Page 13: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

# urls.py (the URL configuration)

from django.conf.urls.defaults import *import views

urlpatterns = patterns('', (r'^latest/$', views.latest_books),)

Page 14: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

# latest_books.html (the template)

<html><head><title>Books</title></head><body><h1>Books</h1><ul>{% for book in book_list %}<li>{{ book.name }}</li>{% endfor %}</ul></body></html>

Page 15: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

Loosely coupled

Page 16: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

History

Page 17: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

Install

Page 18: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

Install Python

Page 19: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

Install Django

Page 20: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

http://www.djangoproject.-com/

Page 21: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

$ tar xzvf Django-*.tar.gz $ cd Django-* $ python setup.py install

Page 22: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

Databases

코끼리 , 나뭇잎돌고래 , 11g

Page 23: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

Databases

PostgreSQL, SQLiteMySQL, Oracle

Page 24: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

Starting a Project

Page 25: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

$ django-admin.py startproject courserating

Page 26: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

courserating/ __init__.pymanage.pysettings.pyurls.py

Page 27: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

Running DEV Server

Page 28: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

$ python manage.py runserver

Page 29: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

$ python manage.py runserver Validating models... 0 errors found

Django version 1.2.1, using settings 'courserating.settings' Development server is running at http://127.0.0.1:8000/ Quit the server with CONTROL-C.

Page 30: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI
Page 31: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

Views and URLconfs

Page 32: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

First Django-Powered Page

Page 33: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

# views.pyfrom django.http import HttpResponse

def hello(request): return HttpResponse("Hello world")

Page 34: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

# urls.pyfrom django.conf.urls.defaults import *from views import hello

urlpatterns = patterns('', ('^hello/$', hello),)

Page 35: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI
Page 36: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI
Page 37: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

# settings.py

... ROOT_URLCONF = 'courserating.urls' ...

Page 38: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

1. Request /hello/2. Look at ROOT_URLCONF3. Look at URLpatterns4. Match then call the associ-ated view function5. The view function returns as HttpResponse6. Convert HttpResponse to the proper HTTP response

Page 39: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

Dynamic Content

Page 40: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

>>> import datetime>>> now = datetime.datetime.now()>>> nowdatetime.datetime(2010, 6, 5, 1, 15, 20, 840166)>>> print now2010-06-05 01:15:20.840166

Page 41: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

# views.pyfrom django.http import HttpResponseimport datetime

def current(request): now = datetime.datetime.now() html = "<html><body>Now %s.</body></html>" % now return HttpResponse(html)

Page 42: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

# urls.pyfrom django.conf.urls.defaults import *from views import hello, current

urlpatterns = patterns('', ('^hello/$', hello), ('^current/$', current),)

Page 43: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI
Page 44: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

# urls.pyfrom django.conf.urls.defaults import *from views import hello, current

urlpatterns = patterns('', ('^hello/$', hello), (‘^current/$', current), (‘^another_current/$', current),)

Page 45: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

Dynamic URLs

Page 46: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

# urls.pyurlpatterns = patterns('', ('^time/$', current), ('^time/plus/1/$', one_hour_ahead), ('^time/plus/2/$', two_hours_ahead), ('^time/plus/3/$', three_hours_ahead), ('^time/plus/4/$', four_hours_ahead),)

Page 47: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

urlpatterns = patterns('', # ... (r'^time/plus/\d+/$', hours_ahead), # ...)

Page 48: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

urlpatterns = patterns('', # ... (r'^time/plus/(\d{1,2})/$', hours_ahead), # ... )

Page 49: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

# views.pydef hours_ahead(request, offset): try: offset = int(offset) except ValueError: raise Http404() dt = datetime.datetime.now() + date-time.timedelta(hours=offset) html = "<html><body>In %s hour(s), it will be %s.</body></html>" % (offset, dt) return HttpResponse(html)

Page 50: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI
Page 51: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

Templates

Page 52: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

# views.pyfrom django.http import HttpResponseimport datetime

def current(request): now = datetime.datetime.now() html = "<html><body>Now %s.</body></html>" % now return HttpResponse(html)

Page 53: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

>>> from django.conf import settings >>> settings.configure()

>>> from django.template import Template, Con-text>>> t = Template('My ID is {{ name }}.')>>> c = Context({'name': ‘hodduc'})>>> print t.render(c)My ID is hodduc.>>> c = Context({'name': ' r4t5y6'})>>> print t.render(c)My ID is r4t5y6.>>> print t <django.template.Template object at 0x7fb-b238c76d0>

Page 54: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

>>> from django.template import Context>>> c = Context({"foo": "bar"})>>> c['foo']'bar'>>> del c['foo']>>> c['foo']Traceback (most recent call last): ...KeyError: 'foo'>>> c['newvariable'] = 'hello'>>> c['newvariable']'hello'

Page 55: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

>>> from django.template import Template, Con-text>>> person = {'name': ‘Yoona', 'age': ‘21'}>>> t = Template('{{ person.name.upper }} is {{ person.age }} years old.')>>> c = Context({'person': person})>>> t.render(c)u‘YOONA is 21 years old.'

Page 56: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

More Templates

Page 57: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

{% if girlgeneration %} <strong>I Love You!</strong> {% else %} <p>Then give it to dogs</p> {% if wondergirls %} <p>Jimotmi</p> {% endif %}{% endif %}

Page 58: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

{% for girl in girlgeneration %} <h1>{{ girl.name }}</h1> <ul> {% for a in girl.recent_solo_albums reversed %} <li>{{ a.name }}</li> {% endfor %} </ul>{% endfor %}

Page 59: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

{% if girlgeneration == wondergirls %} <p>Really?!</p> {% else %} <p>That’s right!</p>{% endif %}

Page 60: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

{% if variable > 1 %}{% if variable <= 1.23 %}{% if variable != 'foo' %}{% if variable == "foo" %}{% if variable == True %}{% if variable == [1, 2, 3] %}{% if variable == {'key': 'value'} %}

Page 61: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

{{ name|lower }}{{ my_list|first|upper }}{{ my_list|length }}{{ bio|truncatewords:"30" }}{{ pub_date|date:"F j, Y" }}{{ codes|addslashes }}{{ html|striptags }}{{ value|default:"nothing" }}

Page 62: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

{# World of Warcraft #} Hello

Page 63: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

Templates in Views

Page 64: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

# views.pyfrom django.http import HttpResponseimport datetime

def current(request): now = datetime.datetime.now() html = "<html><body>Now %s.</body></html>" % now return HttpResponse(html)

Page 65: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

# views.pyfrom django.template import Template, Con-textfrom django.http import HttpResponseimport datetime

def current(request): now = datetime.datetime.now() t = Template("<html><body>It is now {{ current_date }}.</body></html>") html = t.render(Context({'current_date': now})) return HttpResponse(html)

Page 66: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

# /templates/current.html

<html><body>It is now {{ current_date }}.</body></html>

Page 67: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

# views.pyfrom django.template import Template, Con-textfrom django.http import HttpResponseimport datetime

def current(request): now = datetime.datetime.now() fp = open('/templates/current.html') t = Template(fp.read()) fp.close() html = t.render(Context({'current_date': now})) return HttpResponse(html)

Page 68: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

# settings.pyTEMPLATE_DIRS = ( '/templates', )

Page 69: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

# views.pyfrom django.template.loader import get_templatefrom django.template import Contextfrom django.http import HttpResponseimport datetime

def current(request): now = datetime.datetime.now() t = get_template('current.html') html = t.render(Context({'current_date': now})) return HttpResponse(html)

Page 70: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

# views.pyfrom django.shortcuts import render_to_responseimport datetime

def current(request): now = datetime.datetime.now() return render_to_response('current.html', {'current_date': now})

Page 71: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

Reusing Templates

Page 72: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

# girlgeneration.html

<html><body>{% include 'members/tanggu.html' %}...</body><html>

# tanggu.html

<p>Romang</p>

Page 73: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

# base.html

<html><head> <title>{% block title %}{% end block %}</ti-tle></head><body> <h1>KAIST</h1> {% block content %}{% endblock %} {% block footer %} <p>Daejeon</p> {% endblock %}</body><html>

Page 74: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

# dorm.html

{% extends "base.html" %}{% block title %}Penalties{% endblock %}{% block content %}GG{% endblock %}

# maru.html

{% extends "base.html" %}{% block title %}Hell{% endblock %}{% block content %}Then give it to dogs!{% endblock %}

Page 75: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

내일은…

Page 76: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

Models

Page 77: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

Admin Sites

Page 78: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

Forms

Page 79: 건전지로 달리는 쟝고 세미나. 정재성 Django Web Framework CGI

Users