SlideShare a Scribd company logo
1 of 77
Django
Django
biography
Django Reinhardt 1910                   Django 2003   2005   7

                   Rails



discography
www.ljworld.com

www.lawrence.com

projects.washingtonpost.com/contress/
main features
main features
O/R Mapper

Automatic Admin Interface

Elegant URL Design

Template

Cache

i18n
O/R Mapper
O/R Mapper
DRY

Model
O/R Mapper
DRY

Model

        Model   Database
O/R Mapper
DRY

Model

         Model                Database

 SQLObject

 SELECT           keyword args

 ForeignKey           model

 Index        Model
Automatic Admin I/F
Automatic Admin I/F
model




rails    scafford

TurboGears      catwalk
Automatic Admin I/F
model




rails    scafford

TurboGears      catwalk
Automatic Admin I/F
model




rails    scafford

TurboGears      catwalk
Elegant URL Desgin
Elegant URL Desgin
      URL




emacs PROJECT/apps/project/urls.py

(r'^Task/(?P<task_id>d+)/edit/$','Project.apps.project.views.edit'),


emacs PROJECT/apps/project/views.py

def edit(request, task_id) :
    do_somthing
Elegant URL Desgin
      URL



http://host/WorkStyle/Task/5/edit/
emacs PROJECT/apps/project/urls.py

(r'^Task/(?P<task_id>d+)/edit/$','Project.apps.project.views.edit'),


emacs PROJECT/apps/project/views.py

def edit(request, task_id) :
    do_somthing
Elegant URL Desgin
      URL



http://host/WorkStyle/Task/5/edit/
                           5
emacs PROJECT/apps/project/urls.py

(r'^Task/(?P<task_id>d+)/edit/$','Project.apps.project.views.edit'),


emacs PROJECT/apps/project/views.py

def edit(request, task_id) :
    do_somthing
Elegant URL Desgin
      URL




emacs PROJECT/apps/project/urls.py

(r'^Task/(?P<task_id>d+)/edit/$','Project.apps.project.views.edit'),


emacs PROJECT/apps/project/views.py

def edit(request, task_id) :
    do_somthing
Template
Template


                  {{ XXX:escape }}


{% if task.update_date %}
 <tr>
  <th nowrap="nowrap">{% trans "Last Update" %}</th>
   <td>{{ task.update_date|date:"Y/m/d" }}</td>
 </tr>
{% endif %}
Template


                  {{ XXX:escape }}


{% if task.update_date %}                 filter
 <tr>
  <th nowrap="nowrap">{% trans "Last Update" %}</th>
   <td>{{ task.update_date|date:"Y/m/d" }}</td>
 </tr>
{% endif %}
Template


                  {{ XXX:escape }}
                                     Tag
{% if task.update_date %}
 <tr>
  <th nowrap="nowrap">{% trans "Last Update" %}</th>
   <td>{{ task.update_date|date:"Y/m/d" }}</td>
 </tr>
{% endif %}
cache
cache
       3

HTTP
Cache
cache                       locmem(

                     WorkStyle

           sqlite3                    SQL 5   O/R

        :P4-2.4GHz+1GBMem, Gentoo, apache:2.0.54, mod_python3.x

             :iBookG4-800MHz, 640MBMem, ApacheBench1.3d

          1000request 10concurrency
Cache
 cache                       locmem(

                      WorkStyle

            sqlite3                    SQL 5    O/R

         :P4-2.4GHz+1GBMem, Gentoo, apache:2.0.54, mod_python3.x

              :iBookG4-800MHz, 640MBMem, ApacheBench1.3d

           1000request 10concurrency




               normal apache locmem

totaltime      114.98        20.95       5.05

rec/sec          8.7         47.72       197.82
Cache
 cache                       locmem(

                      WorkStyle

            sqlite3                    SQL 5    O/R

         :P4-2.4GHz+1GBMem, Gentoo, apache:2.0.54, mod_python3.x

              :iBookG4-800MHz, 640MBMem, ApacheBench1.3d

           1000request 10concurrency                        total time       Request/sec
                                                      200

                                                      150
               normal apache locmem
                                                      100
totaltime      114.98        20.95       5.05
                                                       50
rec/sec          8.7         47.72       197.82
                                                       0
                                                       normal            apache    locmem
i18n
i18n
po

                      settings.py

Automatic Admin I/F
i18n
    po

                                    settings.py

    Automatic Admin I/F
   code
            _(“message”)


            {% trans “message” %}

template
i18n
    po

                                         settings.py

    Automatic Admin I/F
   po
            DJANGO_HOME/bin/make-messages.py -l ja


            DJANGO_HOME/bin/compile-messages.py

compile
i18n
po

                                     settings.py

Automatic Admin I/F

         > emacs settings.py

          MIDDLEWARE_CLASSES = (
             'django.middleware.locale.LocaleMiddleware',
             'django.middleware.sessions.SessionMiddleware',
             'django.middleware.common.CommonMiddleware',
          )
Python2.3




Apache2.x+mod_python3.x

fast-cgi(WSGI)

                 PostgreSQL/MySQL/SQLite3/SQLServer
Project

Django




Model




URL

view

Template
Django
   Django                  python manage.py init



                   python manage.py startapp APP
  Project

APP   APP          python manage.py install APP




  Project
            django-admin.py startproject PROJECT

   APP
NO
                    django-admin.py startproject PROJECT

YES

      Django
                    python manage.py init




                    python manage.py startapp APP




                    emacs app/APP/models/APP.py




                    python manage.py install APP
Project

django-admin.py startproject WorkStyle

 WorkStyle
          + apps
            __init__.py
          __init__.py
          urls.py
          settings.py
          manage.py
Project

django-admin.py startproject WorkStyle

 WorkStyle
          + apps
            __init__.py
          __init__.py
          urls.py
          settings.py
          manage.py
                            Project
> emacs Project/settings.py

# 'postgresql', 'mysql', 'sqlite3' or 'ado_mssql'.
DATABASE_ENGINE   = 'postgresql'
DATABASE_NAME     = 'workstyle'
DATABASE_USER     = 'workstyle'
DATABASE_PASSWORD = 'workstyle'
DATABASE_HOST     = ''
DATABASE_PORT     = ''
Django
       Django

python manage.py init

  ## DJANGO CORE TABLE
  auth_groups        auth_groups_permissions
  auth_messages      auth_permissions
  auth_users         auth_users_groups
  auth_users_user_permissions
  content_types      core_sessions
  packages           sites
python manage.py startapp workstyle

 WorkStyle
          + apps
            __init__.py
                 + workstyle
                   __init__.py
                   view.py
                             + models
                               __init__.py
                               workstyles.py
          __init__.py
          urls.py
          settings.py
          manage.py
python manage.py startapp workstyle

 WorkStyle
          + apps
            __init__.py
                 + workstyle
                   __init__.py
                   view.py
                             + models
                               __init__.py
                               workstyles.py
          __init__.py
          urls.py
          settings.py
          manage.py
python manage.py startapp workstyle

 WorkStyle
          + apps
            __init__.py
                 + workstyle
                   __init__.py
                   view.py
                             + models
                               __init__.py
                               workstyles.py
          __init__.py
          urls.py
          settings.py
          manage.py
python manage.py startapp workstyle

 WorkStyle
          + apps
            __init__.py
                 + workstyle
                   __init__.py
                   view.py
                             + models
                               __init__.py
                               workstyles.py
          __init__.py
          urls.py
          settings.py
          manage.py
python manage.py startapp workstyle

 WorkStyle
          + apps
            __init__.py
                 + workstyle
                   __init__.py
                   view.py
                             + models
                               __init__.py
                               workstyles.py
          __init__.py
          urls.py
          settings.py
          manage.py
python manage.py startapp workstyle

 WorkStyle
          + apps
            __init__.py
                 + workstyle
                   __init__.py
                   view.py
                             + models
                               __init__.py
                               workstyles.py
          __init__.py
          urls.py
          settings.py
          manage.py
Model
                                  Model

> emacs Project/apps/workstyle/models/workstyle.py

from django.core import meta

class Task(meta.Model):
  task = meta.TextField(db_index=True)
  create_date = meta.DateTimeField(auto_now_add=True)
  update_date = meta.DateTimeField()
  tag_searchable = meta.CharField(maxlength=800, db_index=True, null=True)
  estimate = meta.FloatField(max_digits=3, default=0, decimal_places=1,
null=True)
      status = meta.IntegerField(maxlength=1, default=3,
choices=TASK_STATUS_CHOICES, db_index=True)
      class META:
           ordering = ['-update_date']
Model
                                  Model
                               meta.Model
> emacs Project/apps/workstyle/models/workstyle.py

from django.core import meta

class Task(meta.Model):
  task = meta.TextField(db_index=True)
  create_date = meta.DateTimeField(auto_now_add=True)
  update_date = meta.DateTimeField()
  tag_searchable = meta.CharField(maxlength=800, db_index=True, null=True)
  estimate = meta.FloatField(max_digits=3, default=0, decimal_places=1,
null=True)
      status = meta.IntegerField(maxlength=1, default=3,
choices=TASK_STATUS_CHOICES, db_index=True)
      class META:
           ordering = ['-update_date']
Model

python manage.py install workstyle

   ## APPLICATION TABLE
   workstyle_tasks       workstyle_tags
   workstyle_taglists    workstyle_comments
   workstyle_attachments
Model

python manage.py install workstyle

   ## APPLICATION TABLE
   workstyle_tasks       workstyle_tags
   workstyle_taglists    workstyle_comments
   workstyle_attachments
Model

python manage.py install workstyle

   ## APPLICATION TABLE
   workstyle_tasks       workstyle_tags
   workstyle_taglists    workstyle_comments
   workstyle_attachments




                        Class
O/R
       Python

> export DJANGO_SETTINGS_MODULE=WorkStyle.settings
> python
O/R
         Python

> export DJANGO_SETTINGS_MODULE=WorkStyle.settings
> python

import django.models.workstyle import tasks, comments

#tasks       Task               workstyle_tasks
#(Black Magic)

tasks.get_list(**keyargs)   #

query = {}
query[‘status__in’] = [1,2,3]
tasks.get_list(**query)
O/R
       Python

> export DJANGO_SETTINGS_MODULE=WorkStyle.settings
> python


import django.models.workstyle import tasks, comments

tsk1 = tasks.get_object(pk=1) #pk
tsk1.status = 2
tsk1.save() #

tsk2 = tasks.Task(task='hoge',status=2, update_date=datetime.now())
tsk2.save() #
O/R
       Python

> export DJANGO_SETTINGS_MODULE=WorkStyle.settings
> python


import django.models.workstyle import tasks, comments

#
tsk.add_comment(comment=in_comment_body, commentator=in_commentator)

#                        1:n
tsk.get_comment_list()
O/R
        Python

> export DJANGO_SETTINGS_MODULE=WorkStyle.settings
> python


import django.models.workstyle import tasks, comments

#join:Comment
#   Comment           get_task     SQL
comments.get_list(select_related=True)
O/R
        Python

> export DJANGO_SETTINGS_MODULE=WorkStyle.settings
> python


import django.models.workstyle import tasks, comments

#join:Comment
#   Comment           get_task     SQL
comments.get_list(select_related=True)
URL Dispatcher

 > emacs Project/urls.py

    (r'^WorkStyle/', include('WorkStyle.apps.workstyle.urls')),

 > touch Project/apps/workstyle/urls.py
 > emacs Project/apps/workstyle/urls.py

(r'^Task/(?P<task_id>d+)/edit/$', 'WorkStyle.apps.workstyle.task.edit_task'),
URL Dispatcher

 > emacs Project/urls.py

    (r'^WorkStyle/', include('WorkStyle.apps.workstyle.urls')),

 > touch Project/apps/workstyle/urls.py
 > emacs Project/apps/workstyle/urls.py

(r'^Task/(?P<task_id>d+)/edit/$', 'WorkStyle.apps.workstyle.task.edit_task'),
> emacs WorkStyle/apps/workstyle/task.py

def edit_task(request, task_id) :
    task = get_object_or_404(tasks,pk=task_id)
    manipulator = tasks.ChangeManiplator()
    if request.POST :
        new_data = request.POST.copy()
        errors = manipulator.get_validation_errors(new_data)
        if not errors :
            #
            return render_to_response(....)
    else :
        errors = {}
        new_data = {'status': str(task.status), 'task': task.task,
'estimate': task.estimate}

    return render_to_response('workstyle/TaskFormEdit',{'form': form,
'task': task....})
> emacs WorkStyle/apps/workstyle/task.py

def edit_task(request, task_id) :
    task = get_object_or_404(tasks,pk=task_id)
    manipulator = tasks.ChangeManiplator()
    if request.POST :
        new_data = request.POST.copy()
        errors = manipulator.get_validation_errors(new_data)
        if not errors :
            #
            return render_to_response(....)
    else :
        errors = {}
        new_data = {'status': str(task.status), 'task': task.task,
'estimate': task.estimate}

    return render_to_response('workstyle/TaskFormEdit',{'form': form,
'task': task....})
Manipulator
        model

                      Manipulator      (Add,Change)
def create(request):
  manipulator = tasks.AddManipulator()
  new_data = request.POST.copy()
  errors = manipulator.get_validation_errors(new_data)
  if errors :
    #
  else :
    manipulator.do_html2python(request.POST)
    new_task = manipulator.save(request.POST)
Manipulator
        model                         Add Change

                      Manipulator      (Add,Change)
def create(request):
  manipulator = tasks.AddManipulator()
  new_data = request.POST.copy()
  errors = manipulator.get_validation_errors(new_data)
  if errors :
    #
  else :
    manipulator.do_html2python(request.POST)
    new_task = manipulator.save(request.POST)
Manipulator
       validation
        model

     errors           Manipulator      (Add,Change)
def create(request):
  manipulator = tasks.AddManipulator()
  new_data = request.POST.copy()
  errors = manipulator.get_validation_errors(new_data)
  if errors :
    #
  else :
    manipulator.do_html2python(request.POST)
    new_task = manipulator.save(request.POST)
Manipulator
        model

                      Manipulator      (Add,Change)
def create(request):
  manipulator = tasks.AddManipulator()
  new_data = request.POST.copy()
  errors = manipulator.get_validation_errors(new_data)
  if errors :
    #
  else :
    manipulator.do_html2python(request.POST)
    new_task = manipulator.save(request.POST)
Manipulator
class TaskManipulator(formfields.Manipulator):
    def __init__(self):
        self.fields = (
            formfields.LargeTextField(
                  field_name="task_tag",
                  validator_list=[self.isValidTagName]),
            formfields.TextField(
                  field_name="commentator",
                  maxlength=50,
                  is_required=False),
            formfields.SelectField(
                  field_name="status",
                  choices=TASK_STATUS,
                  is_required=True),
        )
    def isValidTagName(self, field_data, all_data):
        task_tag_list = string.split(field_data, "]")
        for task_tag in task_tag_list :
            task_tag = string.strip(string.replace(task_tag, "[", ""))
            if len(task_tag) > 49 :
                raise validators.ValidationError(_("Tag's name is must be
less than 50 characters."))
Manipulator
#view
  manipulator = TaskManipulator()
  try :
      task = tasks.get_object(pk=task_id)
  except ObjectDoesNotExist :
      raise Http404

  if request.POST :
      new_data = request.POST.copy()
      errors = manipulator.get_validation_errors(new_data)
      if not errors :
          return update_task(request, task_id)
  else :
Template
        settings.py Template

> emacs Project/settings.py

  TEMPLATE_DIRS = (
      WORKSTYLE_BASE_DIR + "/apps/workstyle/templates",
  )
Template
        settings.py Template

> emacs Project/settings.py

  TEMPLATE_DIRS = (
      WORKSTYLE_BASE_DIR + "/apps/workstyle/templates",
  )


 > emacs Project/apps/workstyle/templates/workstyle/TaskForm.html

    <div id="main">
    {% block formaction %}
<form
 action="{{ workstyle_root }}/Task/{{ task.id }}/update/"
 name="taskForm"
 method="POST" enctype="multipart/form-data"
 class="tableForm" onSubmit="return checkBody();">
    {% endblock %}
                                   Base
Template
        settings.py Template

> emacs Project/settings.py

  TEMPLATE_DIRS = (
      WORKSTYLE_BASE_DIR + "/apps/workstyle/templates",
  )


 > emacs Project/apps/workstyle/templates/workstyle/TaskFormNew.html

{% extends "workstyle/TaskForm" %}

{%block formaction %}
<form action="{{ workstyle_root }}/Task/add/" name="task_form"
 method="POST" enctype="multipart/form-data" class="tableForm"
 onSubmit="return checkBody();">
{% endblock %}

                                New extends Base
Template
        settings.py Template

> emacs Project/settings.py

  TEMPLATE_DIRS = (
      WORKSTYLE_BASE_DIR + "/apps/workstyle/templates",
  )


 > emacs Project/apps/workstyle/templates/workstyle/TaskFormEdit.html

{% extends "workstyle/TaskForm" %}

{%block formaction %}
<form
 action="{{ workstyle_root }}/Task/{{ task.id }}/update/"
 name="taskForm"
 method="POST" enctype="multipart/form-data" class="tableForm"
onSubmit="return checkBody();">
{% endblock %}                  Edit extends Base
> emacs Project/apps/workstyle/templatetags/wsfilter.py

 from django.core import template

 register = template.Library()

 def truncatelines(value, arg) :
     result = value
     #do something
     return result

 register.filter('truncatelines', truncatelines)
> emacs Porject/apps/workstyle/task.py
from WorkStyle.apps.workstyle.templatetags import wsfilters
> emacs Porject/apps/workstyle/task.py
from WorkStyle.apps.workstyle.templatetags import wsfilters




> emacs Project/apps/workstyle/templates/workstyle/TaskList.html

{% load wsfilters %}

{{ task.task|truncatelines:3 }}
Test
      pyunit

simon.bofh.ms
Django Milestone
0.92
Magic

1.00
www.everes.net

More Related Content

What's hot

The effective use of Django ORM
The effective use of Django ORMThe effective use of Django ORM
The effective use of Django ORMYaroslav Muravskyi
 
Moving from Django Apps to Services
Moving from Django Apps to ServicesMoving from Django Apps to Services
Moving from Django Apps to ServicesCraig Kerstiens
 
Synapseindia reviews sharing intro cakephp
Synapseindia reviews sharing intro cakephpSynapseindia reviews sharing intro cakephp
Synapseindia reviews sharing intro cakephpSynapseindiaComplaints
 
#SPUG - Legacy applications
#SPUG - Legacy applications#SPUG - Legacy applications
#SPUG - Legacy applicationsPiotr Pasich
 
Drupal 8 in action, the route to the method
Drupal 8 in action, the route to the methodDrupal 8 in action, the route to the method
Drupal 8 in action, the route to the methodjuanolalla
 
Zend Framework 1.9 Setup & Using Zend_Tool
Zend Framework 1.9 Setup & Using Zend_ToolZend Framework 1.9 Setup & Using Zend_Tool
Zend Framework 1.9 Setup & Using Zend_ToolGordon Forsythe
 
Hardcore URL Routing for WordPress - WordCamp Atlanta 2014 (PPT)
Hardcore URL Routing for WordPress - WordCamp Atlanta 2014 (PPT)Hardcore URL Routing for WordPress - WordCamp Atlanta 2014 (PPT)
Hardcore URL Routing for WordPress - WordCamp Atlanta 2014 (PPT)Mike Schinkel
 
関西PHP勉強会 php5.4つまみぐい
関西PHP勉強会 php5.4つまみぐい関西PHP勉強会 php5.4つまみぐい
関西PHP勉強会 php5.4つまみぐいHisateru Tanaka
 
國民雲端架構 Django + GAE
國民雲端架構 Django + GAE國民雲端架構 Django + GAE
國民雲端架構 Django + GAEWinston Chen
 
WordPress Queries - the right way
WordPress Queries - the right wayWordPress Queries - the right way
WordPress Queries - the right wayAnthony Hortin
 
Gary Gao: APIs Are Good
Gary Gao: APIs Are GoodGary Gao: APIs Are Good
Gary Gao: APIs Are Goodtalnoznisky
 
Perl web app 테스트전략
Perl web app 테스트전략Perl web app 테스트전략
Perl web app 테스트전략Jeen Lee
 
Hardcore URL Routing for WordPress - WordCamp Atlanta 2014
Hardcore URL Routing for WordPress - WordCamp Atlanta 2014Hardcore URL Routing for WordPress - WordCamp Atlanta 2014
Hardcore URL Routing for WordPress - WordCamp Atlanta 2014Mike Schinkel
 
V2 and beyond
V2 and beyondV2 and beyond
V2 and beyondjimi-c
 
Tips and tricks for building api heavy ruby on rails applications
Tips and tricks for building api heavy ruby on rails applicationsTips and tricks for building api heavy ruby on rails applications
Tips and tricks for building api heavy ruby on rails applicationsTim Cull
 
Looping the Loop with SPL Iterators
Looping the Loop with SPL IteratorsLooping the Loop with SPL Iterators
Looping the Loop with SPL IteratorsMark Baker
 
More tips n tricks
More tips n tricksMore tips n tricks
More tips n tricksbcoca
 
Como construir uma Aplicação que consuma e produza updates no Twitter usando ...
Como construir uma Aplicação que consuma e produza updates no Twitter usando ...Como construir uma Aplicação que consuma e produza updates no Twitter usando ...
Como construir uma Aplicação que consuma e produza updates no Twitter usando ...Cirdes Filho
 

What's hot (20)

The effective use of Django ORM
The effective use of Django ORMThe effective use of Django ORM
The effective use of Django ORM
 
Moving from Django Apps to Services
Moving from Django Apps to ServicesMoving from Django Apps to Services
Moving from Django Apps to Services
 
Synapseindia reviews sharing intro cakephp
Synapseindia reviews sharing intro cakephpSynapseindia reviews sharing intro cakephp
Synapseindia reviews sharing intro cakephp
 
#SPUG - Legacy applications
#SPUG - Legacy applications#SPUG - Legacy applications
#SPUG - Legacy applications
 
Drupal 8 in action, the route to the method
Drupal 8 in action, the route to the methodDrupal 8 in action, the route to the method
Drupal 8 in action, the route to the method
 
Zend Framework 1.9 Setup & Using Zend_Tool
Zend Framework 1.9 Setup & Using Zend_ToolZend Framework 1.9 Setup & Using Zend_Tool
Zend Framework 1.9 Setup & Using Zend_Tool
 
Hardcore URL Routing for WordPress - WordCamp Atlanta 2014 (PPT)
Hardcore URL Routing for WordPress - WordCamp Atlanta 2014 (PPT)Hardcore URL Routing for WordPress - WordCamp Atlanta 2014 (PPT)
Hardcore URL Routing for WordPress - WordCamp Atlanta 2014 (PPT)
 
Django Heresies
Django HeresiesDjango Heresies
Django Heresies
 
関西PHP勉強会 php5.4つまみぐい
関西PHP勉強会 php5.4つまみぐい関西PHP勉強会 php5.4つまみぐい
関西PHP勉強会 php5.4つまみぐい
 
國民雲端架構 Django + GAE
國民雲端架構 Django + GAE國民雲端架構 Django + GAE
國民雲端架構 Django + GAE
 
WordPress Queries - the right way
WordPress Queries - the right wayWordPress Queries - the right way
WordPress Queries - the right way
 
Gary Gao: APIs Are Good
Gary Gao: APIs Are GoodGary Gao: APIs Are Good
Gary Gao: APIs Are Good
 
Perl web app 테스트전략
Perl web app 테스트전략Perl web app 테스트전략
Perl web app 테스트전략
 
Hardcore URL Routing for WordPress - WordCamp Atlanta 2014
Hardcore URL Routing for WordPress - WordCamp Atlanta 2014Hardcore URL Routing for WordPress - WordCamp Atlanta 2014
Hardcore URL Routing for WordPress - WordCamp Atlanta 2014
 
V2 and beyond
V2 and beyondV2 and beyond
V2 and beyond
 
Tips and tricks for building api heavy ruby on rails applications
Tips and tricks for building api heavy ruby on rails applicationsTips and tricks for building api heavy ruby on rails applications
Tips and tricks for building api heavy ruby on rails applications
 
Looping the Loop with SPL Iterators
Looping the Loop with SPL IteratorsLooping the Loop with SPL Iterators
Looping the Loop with SPL Iterators
 
More tips n tricks
More tips n tricksMore tips n tricks
More tips n tricks
 
Perl6 grammars
Perl6 grammarsPerl6 grammars
Perl6 grammars
 
Como construir uma Aplicação que consuma e produza updates no Twitter usando ...
Como construir uma Aplicação que consuma e produza updates no Twitter usando ...Como construir uma Aplicação que consuma e produza updates no Twitter usando ...
Como construir uma Aplicação que consuma e produza updates no Twitter usando ...
 

Viewers also liked

How to Pronounce Django
How to Pronounce DjangoHow to Pronounce Django
How to Pronounce Djangojtauber
 
Django for Beginners
Django for BeginnersDjango for Beginners
Django for BeginnersJason Davies
 
Chord melody method bill hart
Chord melody method   bill hartChord melody method   bill hart
Chord melody method bill hartgretechen
 
Lenny breau-fingerstyle-jazz-guitar
Lenny breau-fingerstyle-jazz-guitarLenny breau-fingerstyle-jazz-guitar
Lenny breau-fingerstyle-jazz-guitargretechen
 
Jack marshall-bossanova-guitar-arrang compressed
Jack marshall-bossanova-guitar-arrang compressedJack marshall-bossanova-guitar-arrang compressed
Jack marshall-bossanova-guitar-arrang compressedlegalcards
 

Viewers also liked (7)

How to Pronounce Django
How to Pronounce DjangoHow to Pronounce Django
How to Pronounce Django
 
Django for Beginners
Django for BeginnersDjango for Beginners
Django for Beginners
 
Chord melody method bill hart
Chord melody method   bill hartChord melody method   bill hart
Chord melody method bill hart
 
Lenny breau-fingerstyle-jazz-guitar
Lenny breau-fingerstyle-jazz-guitarLenny breau-fingerstyle-jazz-guitar
Lenny breau-fingerstyle-jazz-guitar
 
Jack marshall-bossanova-guitar-arrang compressed
Jack marshall-bossanova-guitar-arrang compressedJack marshall-bossanova-guitar-arrang compressed
Jack marshall-bossanova-guitar-arrang compressed
 
(Guitar) partition pat martino jazz book
(Guitar) partition   pat martino jazz book(Guitar) partition   pat martino jazz book
(Guitar) partition pat martino jazz book
 
Best of jazz guitar
Best of jazz guitarBest of jazz guitar
Best of jazz guitar
 

Similar to 伝説のギタリストじゃない方のDjango

Gae Meets Django
Gae Meets DjangoGae Meets Django
Gae Meets Djangofool2nd
 
Mini Curso Django Ii Congresso Academico Ces
Mini Curso Django Ii Congresso Academico CesMini Curso Django Ii Congresso Academico Ces
Mini Curso Django Ii Congresso Academico CesLeonardo Fernandes
 
Hands on django part 1
Hands on django part 1Hands on django part 1
Hands on django part 1MicroPyramid .
 
GDG Addis - An Introduction to Django and App Engine
GDG Addis - An Introduction to Django and App EngineGDG Addis - An Introduction to Django and App Engine
GDG Addis - An Introduction to Django and App EngineYared Ayalew
 
Introduction to django
Introduction to djangoIntroduction to django
Introduction to djangoIlian Iliev
 
Intro to Pylons / Pyramid
Intro to Pylons / PyramidIntro to Pylons / Pyramid
Intro to Pylons / PyramidEric Paxton
 
나도 할 수 있다 오픈소스
나도 할 수 있다 오픈소스나도 할 수 있다 오픈소스
나도 할 수 있다 오픈소스효준 강
 
Django Introduction & Tutorial
Django Introduction & TutorialDjango Introduction & Tutorial
Django Introduction & Tutorial之宇 趙
 
Practical catalyst
Practical catalystPractical catalyst
Practical catalystdwm042
 
Pemrograman Python untuk Pemula
Pemrograman Python untuk PemulaPemrograman Python untuk Pemula
Pemrograman Python untuk PemulaOon Arfiandwi
 
Europython 2011 - Playing tasks with Django & Celery
Europython 2011 - Playing tasks with Django & CeleryEuropython 2011 - Playing tasks with Django & Celery
Europython 2011 - Playing tasks with Django & CeleryMauro Rocco
 

Similar to 伝説のギタリストじゃない方のDjango (20)

Django Vs Rails
Django Vs RailsDjango Vs Rails
Django Vs Rails
 
Django
DjangoDjango
Django
 
Gae Meets Django
Gae Meets DjangoGae Meets Django
Gae Meets Django
 
Mini Curso Django Ii Congresso Academico Ces
Mini Curso Django Ii Congresso Academico CesMini Curso Django Ii Congresso Academico Ces
Mini Curso Django Ii Congresso Academico Ces
 
Hands on django part 1
Hands on django part 1Hands on django part 1
Hands on django part 1
 
DJango
DJangoDJango
DJango
 
GDG Addis - An Introduction to Django and App Engine
GDG Addis - An Introduction to Django and App EngineGDG Addis - An Introduction to Django and App Engine
GDG Addis - An Introduction to Django and App Engine
 
Introduction to django
Introduction to djangoIntroduction to django
Introduction to django
 
Practical Celery
Practical CeleryPractical Celery
Practical Celery
 
templates in Django material : Training available at Baabtra
templates in Django material : Training available at Baabtratemplates in Django material : Training available at Baabtra
templates in Django material : Training available at Baabtra
 
Django
DjangoDjango
Django
 
Intro to Pylons / Pyramid
Intro to Pylons / PyramidIntro to Pylons / Pyramid
Intro to Pylons / Pyramid
 
Introduction to Django
Introduction to DjangoIntroduction to Django
Introduction to Django
 
Django web framework
Django web frameworkDjango web framework
Django web framework
 
나도 할 수 있다 오픈소스
나도 할 수 있다 오픈소스나도 할 수 있다 오픈소스
나도 할 수 있다 오픈소스
 
Django Introduction & Tutorial
Django Introduction & TutorialDjango Introduction & Tutorial
Django Introduction & Tutorial
 
Practical catalyst
Practical catalystPractical catalyst
Practical catalyst
 
Pemrograman Python untuk Pemula
Pemrograman Python untuk PemulaPemrograman Python untuk Pemula
Pemrograman Python untuk Pemula
 
Profile django
Profile djangoProfile django
Profile django
 
Europython 2011 - Playing tasks with Django & Celery
Europython 2011 - Playing tasks with Django & CeleryEuropython 2011 - Playing tasks with Django & Celery
Europython 2011 - Playing tasks with Django & Celery
 

More from makoto tsuyuki

スゴイ django - Python&Djangoで始めるWeb開発 in 札幌 #1
スゴイ django - Python&Djangoで始めるWeb開発 in 札幌 #1スゴイ django - Python&Djangoで始めるWeb開発 in 札幌 #1
スゴイ django - Python&Djangoで始めるWeb開発 in 札幌 #1makoto tsuyuki
 
Erulolo at Kamakurago #1
Erulolo at Kamakurago #1Erulolo at Kamakurago #1
Erulolo at Kamakurago #1makoto tsuyuki
 
Webフレームワークパネル(Django) at PyConJP 2012
Webフレームワークパネル(Django) at PyConJP 2012Webフレームワークパネル(Django) at PyConJP 2012
Webフレームワークパネル(Django) at PyConJP 2012makoto tsuyuki
 
引き出しとしてのDjango - SoozyCon7
引き出しとしてのDjango - SoozyCon7引き出しとしてのDjango - SoozyCon7
引き出しとしてのDjango - SoozyCon7makoto tsuyuki
 
Python Workshop the Edge - django
Python Workshop the Edge - djangoPython Workshop the Edge - django
Python Workshop the Edge - djangomakoto tsuyuki
 
変態的PHPフレームワーク rhaco
変態的PHPフレームワーク rhaco変態的PHPフレームワーク rhaco
変態的PHPフレームワーク rhacomakoto tsuyuki
 

More from makoto tsuyuki (9)

スゴイ django - Python&Djangoで始めるWeb開発 in 札幌 #1
スゴイ django - Python&Djangoで始めるWeb開発 in 札幌 #1スゴイ django - Python&Djangoで始めるWeb開発 in 札幌 #1
スゴイ django - Python&Djangoで始めるWeb開発 in 札幌 #1
 
Erulolo at Kamakurago #1
Erulolo at Kamakurago #1Erulolo at Kamakurago #1
Erulolo at Kamakurago #1
 
Not free
Not freeNot free
Not free
 
Testman
TestmanTestman
Testman
 
Webフレームワークパネル(Django) at PyConJP 2012
Webフレームワークパネル(Django) at PyConJP 2012Webフレームワークパネル(Django) at PyConJP 2012
Webフレームワークパネル(Django) at PyConJP 2012
 
引き出しとしてのDjango - SoozyCon7
引き出しとしてのDjango - SoozyCon7引き出しとしてのDjango - SoozyCon7
引き出しとしてのDjango - SoozyCon7
 
Python Workshop the Edge - django
Python Workshop the Edge - djangoPython Workshop the Edge - django
Python Workshop the Edge - django
 
変態的PHPフレームワーク rhaco
変態的PHPフレームワーク rhaco変態的PHPフレームワーク rhaco
変態的PHPフレームワーク rhaco
 
継承だろJK
継承だろJK継承だろJK
継承だろJK
 

Recently uploaded

Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024The Digital Insurer
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clashcharlottematthew16
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embeddingZilliz
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr LapshynFwdays
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Wonjun Hwang
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 

Recently uploaded (20)

Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clash
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embedding
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 

伝説のギタリストじゃない方のDjango

  • 2. Django biography Django Reinhardt 1910 Django 2003 2005 7 Rails discography www.ljworld.com www.lawrence.com projects.washingtonpost.com/contress/
  • 4. main features O/R Mapper Automatic Admin Interface Elegant URL Design Template Cache i18n
  • 7. O/R Mapper DRY Model Model Database
  • 8. O/R Mapper DRY Model Model Database SQLObject SELECT keyword args ForeignKey model Index Model
  • 10. Automatic Admin I/F model rails scafford TurboGears catwalk
  • 11. Automatic Admin I/F model rails scafford TurboGears catwalk
  • 12. Automatic Admin I/F model rails scafford TurboGears catwalk
  • 14. Elegant URL Desgin URL emacs PROJECT/apps/project/urls.py (r'^Task/(?P<task_id>d+)/edit/$','Project.apps.project.views.edit'), emacs PROJECT/apps/project/views.py def edit(request, task_id) : do_somthing
  • 15. Elegant URL Desgin URL http://host/WorkStyle/Task/5/edit/ emacs PROJECT/apps/project/urls.py (r'^Task/(?P<task_id>d+)/edit/$','Project.apps.project.views.edit'), emacs PROJECT/apps/project/views.py def edit(request, task_id) : do_somthing
  • 16. Elegant URL Desgin URL http://host/WorkStyle/Task/5/edit/ 5 emacs PROJECT/apps/project/urls.py (r'^Task/(?P<task_id>d+)/edit/$','Project.apps.project.views.edit'), emacs PROJECT/apps/project/views.py def edit(request, task_id) : do_somthing
  • 17. Elegant URL Desgin URL emacs PROJECT/apps/project/urls.py (r'^Task/(?P<task_id>d+)/edit/$','Project.apps.project.views.edit'), emacs PROJECT/apps/project/views.py def edit(request, task_id) : do_somthing
  • 19. Template {{ XXX:escape }} {% if task.update_date %} <tr> <th nowrap="nowrap">{% trans "Last Update" %}</th> <td>{{ task.update_date|date:"Y/m/d" }}</td> </tr> {% endif %}
  • 20. Template {{ XXX:escape }} {% if task.update_date %} filter <tr> <th nowrap="nowrap">{% trans "Last Update" %}</th> <td>{{ task.update_date|date:"Y/m/d" }}</td> </tr> {% endif %}
  • 21. Template {{ XXX:escape }} Tag {% if task.update_date %} <tr> <th nowrap="nowrap">{% trans "Last Update" %}</th> <td>{{ task.update_date|date:"Y/m/d" }}</td> </tr> {% endif %}
  • 22. cache
  • 23. cache 3 HTTP
  • 24. Cache cache locmem( WorkStyle sqlite3 SQL 5 O/R :P4-2.4GHz+1GBMem, Gentoo, apache:2.0.54, mod_python3.x :iBookG4-800MHz, 640MBMem, ApacheBench1.3d 1000request 10concurrency
  • 25. Cache cache locmem( WorkStyle sqlite3 SQL 5 O/R :P4-2.4GHz+1GBMem, Gentoo, apache:2.0.54, mod_python3.x :iBookG4-800MHz, 640MBMem, ApacheBench1.3d 1000request 10concurrency normal apache locmem totaltime 114.98 20.95 5.05 rec/sec 8.7 47.72 197.82
  • 26. Cache cache locmem( WorkStyle sqlite3 SQL 5 O/R :P4-2.4GHz+1GBMem, Gentoo, apache:2.0.54, mod_python3.x :iBookG4-800MHz, 640MBMem, ApacheBench1.3d 1000request 10concurrency total time Request/sec 200 150 normal apache locmem 100 totaltime 114.98 20.95 5.05 50 rec/sec 8.7 47.72 197.82 0 normal apache locmem
  • 27. i18n
  • 28. i18n po settings.py Automatic Admin I/F
  • 29. i18n po settings.py Automatic Admin I/F code _(“message”) {% trans “message” %} template
  • 30. i18n po settings.py Automatic Admin I/F po DJANGO_HOME/bin/make-messages.py -l ja DJANGO_HOME/bin/compile-messages.py compile
  • 31. i18n po settings.py Automatic Admin I/F > emacs settings.py MIDDLEWARE_CLASSES = ( 'django.middleware.locale.LocaleMiddleware', 'django.middleware.sessions.SessionMiddleware', 'django.middleware.common.CommonMiddleware', )
  • 32. Python2.3 Apache2.x+mod_python3.x fast-cgi(WSGI) PostgreSQL/MySQL/SQLite3/SQLServer
  • 34. Django Django python manage.py init python manage.py startapp APP Project APP APP python manage.py install APP Project django-admin.py startproject PROJECT APP
  • 35. NO django-admin.py startproject PROJECT YES Django python manage.py init python manage.py startapp APP emacs app/APP/models/APP.py python manage.py install APP
  • 36. Project django-admin.py startproject WorkStyle WorkStyle + apps __init__.py __init__.py urls.py settings.py manage.py
  • 37. Project django-admin.py startproject WorkStyle WorkStyle + apps __init__.py __init__.py urls.py settings.py manage.py Project
  • 38. > emacs Project/settings.py # 'postgresql', 'mysql', 'sqlite3' or 'ado_mssql'. DATABASE_ENGINE = 'postgresql' DATABASE_NAME = 'workstyle' DATABASE_USER = 'workstyle' DATABASE_PASSWORD = 'workstyle' DATABASE_HOST = '' DATABASE_PORT = ''
  • 39. Django Django python manage.py init ## DJANGO CORE TABLE auth_groups auth_groups_permissions auth_messages auth_permissions auth_users auth_users_groups auth_users_user_permissions content_types core_sessions packages sites
  • 40. python manage.py startapp workstyle WorkStyle + apps __init__.py + workstyle __init__.py view.py + models __init__.py workstyles.py __init__.py urls.py settings.py manage.py
  • 41. python manage.py startapp workstyle WorkStyle + apps __init__.py + workstyle __init__.py view.py + models __init__.py workstyles.py __init__.py urls.py settings.py manage.py
  • 42. python manage.py startapp workstyle WorkStyle + apps __init__.py + workstyle __init__.py view.py + models __init__.py workstyles.py __init__.py urls.py settings.py manage.py
  • 43. python manage.py startapp workstyle WorkStyle + apps __init__.py + workstyle __init__.py view.py + models __init__.py workstyles.py __init__.py urls.py settings.py manage.py
  • 44. python manage.py startapp workstyle WorkStyle + apps __init__.py + workstyle __init__.py view.py + models __init__.py workstyles.py __init__.py urls.py settings.py manage.py
  • 45. python manage.py startapp workstyle WorkStyle + apps __init__.py + workstyle __init__.py view.py + models __init__.py workstyles.py __init__.py urls.py settings.py manage.py
  • 46. Model Model > emacs Project/apps/workstyle/models/workstyle.py from django.core import meta class Task(meta.Model): task = meta.TextField(db_index=True) create_date = meta.DateTimeField(auto_now_add=True) update_date = meta.DateTimeField() tag_searchable = meta.CharField(maxlength=800, db_index=True, null=True) estimate = meta.FloatField(max_digits=3, default=0, decimal_places=1, null=True) status = meta.IntegerField(maxlength=1, default=3, choices=TASK_STATUS_CHOICES, db_index=True) class META: ordering = ['-update_date']
  • 47. Model Model meta.Model > emacs Project/apps/workstyle/models/workstyle.py from django.core import meta class Task(meta.Model): task = meta.TextField(db_index=True) create_date = meta.DateTimeField(auto_now_add=True) update_date = meta.DateTimeField() tag_searchable = meta.CharField(maxlength=800, db_index=True, null=True) estimate = meta.FloatField(max_digits=3, default=0, decimal_places=1, null=True) status = meta.IntegerField(maxlength=1, default=3, choices=TASK_STATUS_CHOICES, db_index=True) class META: ordering = ['-update_date']
  • 48. Model python manage.py install workstyle ## APPLICATION TABLE workstyle_tasks workstyle_tags workstyle_taglists workstyle_comments workstyle_attachments
  • 49. Model python manage.py install workstyle ## APPLICATION TABLE workstyle_tasks workstyle_tags workstyle_taglists workstyle_comments workstyle_attachments
  • 50. Model python manage.py install workstyle ## APPLICATION TABLE workstyle_tasks workstyle_tags workstyle_taglists workstyle_comments workstyle_attachments Class
  • 51. O/R Python > export DJANGO_SETTINGS_MODULE=WorkStyle.settings > python
  • 52. O/R Python > export DJANGO_SETTINGS_MODULE=WorkStyle.settings > python import django.models.workstyle import tasks, comments #tasks Task workstyle_tasks #(Black Magic) tasks.get_list(**keyargs) # query = {} query[‘status__in’] = [1,2,3] tasks.get_list(**query)
  • 53. O/R Python > export DJANGO_SETTINGS_MODULE=WorkStyle.settings > python import django.models.workstyle import tasks, comments tsk1 = tasks.get_object(pk=1) #pk tsk1.status = 2 tsk1.save() # tsk2 = tasks.Task(task='hoge',status=2, update_date=datetime.now()) tsk2.save() #
  • 54. O/R Python > export DJANGO_SETTINGS_MODULE=WorkStyle.settings > python import django.models.workstyle import tasks, comments # tsk.add_comment(comment=in_comment_body, commentator=in_commentator) # 1:n tsk.get_comment_list()
  • 55. O/R Python > export DJANGO_SETTINGS_MODULE=WorkStyle.settings > python import django.models.workstyle import tasks, comments #join:Comment # Comment get_task SQL comments.get_list(select_related=True)
  • 56. O/R Python > export DJANGO_SETTINGS_MODULE=WorkStyle.settings > python import django.models.workstyle import tasks, comments #join:Comment # Comment get_task SQL comments.get_list(select_related=True)
  • 57.
  • 58. URL Dispatcher > emacs Project/urls.py (r'^WorkStyle/', include('WorkStyle.apps.workstyle.urls')), > touch Project/apps/workstyle/urls.py > emacs Project/apps/workstyle/urls.py (r'^Task/(?P<task_id>d+)/edit/$', 'WorkStyle.apps.workstyle.task.edit_task'),
  • 59. URL Dispatcher > emacs Project/urls.py (r'^WorkStyle/', include('WorkStyle.apps.workstyle.urls')), > touch Project/apps/workstyle/urls.py > emacs Project/apps/workstyle/urls.py (r'^Task/(?P<task_id>d+)/edit/$', 'WorkStyle.apps.workstyle.task.edit_task'),
  • 60. > emacs WorkStyle/apps/workstyle/task.py def edit_task(request, task_id) : task = get_object_or_404(tasks,pk=task_id) manipulator = tasks.ChangeManiplator() if request.POST : new_data = request.POST.copy() errors = manipulator.get_validation_errors(new_data) if not errors : # return render_to_response(....) else : errors = {} new_data = {'status': str(task.status), 'task': task.task, 'estimate': task.estimate} return render_to_response('workstyle/TaskFormEdit',{'form': form, 'task': task....})
  • 61. > emacs WorkStyle/apps/workstyle/task.py def edit_task(request, task_id) : task = get_object_or_404(tasks,pk=task_id) manipulator = tasks.ChangeManiplator() if request.POST : new_data = request.POST.copy() errors = manipulator.get_validation_errors(new_data) if not errors : # return render_to_response(....) else : errors = {} new_data = {'status': str(task.status), 'task': task.task, 'estimate': task.estimate} return render_to_response('workstyle/TaskFormEdit',{'form': form, 'task': task....})
  • 62. Manipulator model Manipulator (Add,Change) def create(request): manipulator = tasks.AddManipulator() new_data = request.POST.copy() errors = manipulator.get_validation_errors(new_data) if errors : # else : manipulator.do_html2python(request.POST) new_task = manipulator.save(request.POST)
  • 63. Manipulator model Add Change Manipulator (Add,Change) def create(request): manipulator = tasks.AddManipulator() new_data = request.POST.copy() errors = manipulator.get_validation_errors(new_data) if errors : # else : manipulator.do_html2python(request.POST) new_task = manipulator.save(request.POST)
  • 64. Manipulator validation model errors Manipulator (Add,Change) def create(request): manipulator = tasks.AddManipulator() new_data = request.POST.copy() errors = manipulator.get_validation_errors(new_data) if errors : # else : manipulator.do_html2python(request.POST) new_task = manipulator.save(request.POST)
  • 65. Manipulator model Manipulator (Add,Change) def create(request): manipulator = tasks.AddManipulator() new_data = request.POST.copy() errors = manipulator.get_validation_errors(new_data) if errors : # else : manipulator.do_html2python(request.POST) new_task = manipulator.save(request.POST)
  • 66. Manipulator class TaskManipulator(formfields.Manipulator): def __init__(self): self.fields = ( formfields.LargeTextField( field_name="task_tag", validator_list=[self.isValidTagName]), formfields.TextField( field_name="commentator", maxlength=50, is_required=False), formfields.SelectField( field_name="status", choices=TASK_STATUS, is_required=True), ) def isValidTagName(self, field_data, all_data): task_tag_list = string.split(field_data, "]") for task_tag in task_tag_list : task_tag = string.strip(string.replace(task_tag, "[", "")) if len(task_tag) > 49 : raise validators.ValidationError(_("Tag's name is must be less than 50 characters."))
  • 67. Manipulator #view manipulator = TaskManipulator() try : task = tasks.get_object(pk=task_id) except ObjectDoesNotExist : raise Http404 if request.POST : new_data = request.POST.copy() errors = manipulator.get_validation_errors(new_data) if not errors : return update_task(request, task_id) else :
  • 68. Template settings.py Template > emacs Project/settings.py TEMPLATE_DIRS = ( WORKSTYLE_BASE_DIR + "/apps/workstyle/templates", )
  • 69. Template settings.py Template > emacs Project/settings.py TEMPLATE_DIRS = ( WORKSTYLE_BASE_DIR + "/apps/workstyle/templates", ) > emacs Project/apps/workstyle/templates/workstyle/TaskForm.html <div id="main"> {% block formaction %} <form action="{{ workstyle_root }}/Task/{{ task.id }}/update/" name="taskForm" method="POST" enctype="multipart/form-data" class="tableForm" onSubmit="return checkBody();"> {% endblock %} Base
  • 70. Template settings.py Template > emacs Project/settings.py TEMPLATE_DIRS = ( WORKSTYLE_BASE_DIR + "/apps/workstyle/templates", ) > emacs Project/apps/workstyle/templates/workstyle/TaskFormNew.html {% extends "workstyle/TaskForm" %} {%block formaction %} <form action="{{ workstyle_root }}/Task/add/" name="task_form" method="POST" enctype="multipart/form-data" class="tableForm" onSubmit="return checkBody();"> {% endblock %} New extends Base
  • 71. Template settings.py Template > emacs Project/settings.py TEMPLATE_DIRS = ( WORKSTYLE_BASE_DIR + "/apps/workstyle/templates", ) > emacs Project/apps/workstyle/templates/workstyle/TaskFormEdit.html {% extends "workstyle/TaskForm" %} {%block formaction %} <form action="{{ workstyle_root }}/Task/{{ task.id }}/update/" name="taskForm" method="POST" enctype="multipart/form-data" class="tableForm" onSubmit="return checkBody();"> {% endblock %} Edit extends Base
  • 72. > emacs Project/apps/workstyle/templatetags/wsfilter.py from django.core import template register = template.Library() def truncatelines(value, arg) : result = value #do something return result register.filter('truncatelines', truncatelines)
  • 73. > emacs Porject/apps/workstyle/task.py from WorkStyle.apps.workstyle.templatetags import wsfilters
  • 74. > emacs Porject/apps/workstyle/task.py from WorkStyle.apps.workstyle.templatetags import wsfilters > emacs Project/apps/workstyle/templates/workstyle/TaskList.html {% load wsfilters %} {{ task.task|truncatelines:3 }}
  • 75. Test pyunit simon.bofh.ms

Editor's Notes

  1. Pythonista&amp;#x3092;&amp;#x76EE;&amp;#x6307;&amp;#x3057;&amp;#x3066;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002; Python&amp;#x306F;&amp;#x4E00;&amp;#x756A;&amp;#x6577;&amp;#x5C45;&amp;#x306E;&amp;#x9AD8;&amp;#x3044;&amp;#x8A00;&amp;#x8A9E;&amp;#x306A;&amp;#x306E;&amp;#x3067;&amp;#x3001;&amp;#x5230;&amp;#x9054;&amp;#x306F;&amp;#x56F0;&amp;#x96E3;&amp;#x3060;&amp;#x3068;&amp;#x304A;&amp;#x3082;&amp;#x3063;&amp;#x3066;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002; &amp;#x4F55;&amp;#x3067;&amp;#x56F0;&amp;#x96E3;&amp;#x304B;&amp;#x3068;&amp;#x3044;&amp;#x3046;&amp;#x3068;&amp;#x3001;&amp;#x8077;&amp;#x5834;&amp;#x3067;&amp;#x306F;Python&amp;#x306E;&amp;#x30B3;&amp;#x30FC;&amp;#x30C9;&amp;#x304C;&amp;#x66F8;&amp;#x3051;&amp;#x308B;&amp;#x307B;&amp;#x304B;&amp;#x306B;&amp;#x3082;&amp;#x300C;&amp;#x30C7;&amp;#x30B6;&amp;#x30A4;&amp;#x30F3;&amp;#x304C;&amp;#x3059;&amp;#x3089;&amp;#x3063;&amp;#x3068;&amp;#x7F8E;&amp;#x3057;&amp;#x304F;&amp;#x3067;&amp;#x304D;&amp;#x308B;&amp;#x300D;&amp;#x300C;&amp;#x6839;&amp;#x6027;&amp;#x7CFB;&amp;#x3067;&amp;#x306A;&amp;#x3044;&amp;#x30A2;&amp;#x30A6;&amp;#x30C8;&amp;#x30C9;&amp;#x30A2;&amp;#x3063;&amp;#x307D;&amp;#x3044;&amp;#x30B9;&amp;#x30DD;&amp;#x30FC;&amp;#x30C4;&amp;#x304C;&amp;#x51FA;&amp;#x6765;&amp;#x308B;&amp;#x300D;&amp;#x3053;&amp;#x3068;&amp;#x3092;Pythonista&amp;#x306E;&amp;#x8981;&amp;#x4EF6;&amp;#x3068;&amp;#x3057;&amp;#x3066;&amp;#x3044;&amp;#x308B;&amp;#x304B;&amp;#x3089;&amp;#x3067;&amp;#x3059;&amp;#x3002; &amp;#x3067;&amp;#x3001;Django&amp;#x3067;&amp;#x3059;&amp;#x3002;Python&amp;#x306E;Web&amp;#x30D5;&amp;#x30EC;&amp;#x30FC;&amp;#x30E0;&amp;#x30EF;&amp;#x30FC;&amp;#x30AF;&amp;#x3067;&amp;#x3059;&amp;#x3002;&amp;#x30E9;&amp;#x30A4;&amp;#x30BB;&amp;#x30F3;&amp;#x30B9;&amp;#x306F;BSD&amp;#x3002;
  2. Django&amp;#x3092;&amp;#x30B0;&amp;#x30B0;&amp;#x30EB;&amp;#x3068;&amp;#x3001;&amp;#x4E0A;&amp;#x4F4D;&amp;#x306F;Django Reinhardt&amp;#x306B;&amp;#x95A2;&amp;#x3059;&amp;#x308B;&amp;#x3082;&amp;#x306E;&amp;#x3070;&amp;#x304B;&amp;#x308A;&amp;#x3067;&amp;#x3066;&amp;#x304D;&amp;#x307E;&amp;#x3059;&amp;#x3002;&amp;#x6D41;&amp;#x77F3;&amp;#x306B;&amp;#x672C;&amp;#x5BB6;&amp;#x306F;&amp;#x30DA;&amp;#x30FC;&amp;#x30B8;&amp;#x30E9;&amp;#x30F3;&amp;#x30AF;&amp;#x304C;&amp;#x4E0A;&amp;#x304C;&amp;#x3063;&amp;#x3066;&amp;#x304B;&amp;#x306A;&amp;#x308A;&amp;#x4E0A;&amp;#x4F4D;&amp;#x306B;&amp;#x51FA;&amp;#x3066;&amp;#x304F;&amp;#x308B;&amp;#x3088;&amp;#x3046;&amp;#x306B;&amp;#x306A;&amp;#x308A;&amp;#x307E;&amp;#x3057;&amp;#x305F;&amp;#x3001;&amp;#x79C1;&amp;#x306E;&amp;#x30D6;&amp;#x30ED;&amp;#x30B0;&amp;#x306F;&amp;#x3042;&amp;#x307E;&amp;#x308A;&amp;#x4E0A;&amp;#x306B;&amp;#x304D;&amp;#x307E;&amp;#x305B;&amp;#x3093;&amp;#x3002; &amp;#x3088;&amp;#x304F;Django&amp;#x306F;after Rails&amp;#x3068;&amp;#x3057;&amp;#x3066;&amp;#x30EA;&amp;#x30B9;&amp;#x30C8;&amp;#x3055;&amp;#x308C;&amp;#x307E;&amp;#x3059;&amp;#x304C;&amp;#x3001;&amp;#x958B;&amp;#x767A;&amp;#x81EA;&amp;#x4F53;&amp;#x306F;Rails&amp;#x3068;&amp;#x540C;&amp;#x6642;&amp;#x671F;&amp;#x306B;&amp;#x958B;&amp;#x59CB;&amp;#x3055;&amp;#x308C;&amp;#x3066;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002; Django&amp;#x306F;&amp;#x5730;&amp;#x65B9;&amp;#x65B0;&amp;#x805E;&amp;#x306E;&amp;#x30B5;&amp;#x30A4;&amp;#x30C8;&amp;#x69CB;&amp;#x7BC9;&amp;#x306E;&amp;#x305F;&amp;#x3081;&amp;#x306B;&amp;#x4F5C;&amp;#x308A;&amp;#x4E0A;&amp;#x3052;&amp;#x3089;&amp;#x308C;&amp;#x3066;&amp;#x304D;&amp;#x305F;&amp;#x30D5;&amp;#x30EC;&amp;#x30FC;&amp;#x30E0;&amp;#x30EF;&amp;#x30FC;&amp;#x30AF;&amp;#x306A;&amp;#x306E;&amp;#x3067;&amp;#x3001;CMS&amp;#x7684;&amp;#x306A;&amp;#x3082;&amp;#x306E;&amp;#x306B;&amp;#x5BFE;&amp;#x3059;&amp;#x308B;&amp;#x5074;&amp;#x9762;&amp;#x306F;&amp;#x975E;&amp;#x5E38;&amp;#x306B;&amp;#x5F37;&amp;#x3044;&amp;#x3067;&amp;#x3059;&amp;#x3002;&amp;#x30EF;&amp;#x30B7;&amp;#x30F3;&amp;#x30C8;&amp;#x30F3;&amp;#x30DD;&amp;#x30B9;&amp;#x30C8;&amp;#x306E;&amp;#x6570;&amp;#x767E;&amp;#x4E07;&amp;#x4EF6;&amp;#x306E;&amp;#x30C7;&amp;#x30FC;&amp;#x30BF;&amp;#x3092;&amp;#x4FDD;&amp;#x6301;&amp;#x3057;&amp;#x3066;&amp;#x3044;&amp;#x308B;&amp;#x8B70;&amp;#x6C7A;&amp;#x30C7;&amp;#x30FC;&amp;#x30BF;&amp;#x30D9;&amp;#x30FC;&amp;#x30B9;&amp;#x30B5;&amp;#x30A4;&amp;#x30C8;&amp;#x306B;&amp;#x3082;&amp;#x5229;&amp;#x7528;&amp;#x3055;&amp;#x308C;&amp;#x3066;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002;&amp;#x30EF;&amp;#x30B7;&amp;#x30F3;&amp;#x30C8;&amp;#x30F3;&amp;#x30DD;&amp;#x30B9;&amp;#x30C8;&amp;#x306B;&amp;#x306F;&amp;#x6700;&amp;#x8FD1;&amp;#x65B0;&amp;#x3057;&amp;#x3044;Django&amp;#x3067;&amp;#x3067;&amp;#x304D;&amp;#x305F;&amp;#x30A2;&amp;#x30D7;&amp;#x30EA;&amp;#x30B1;&amp;#x30FC;&amp;#x30B7;&amp;#x30E7;&amp;#x30F3;&amp;#x304C;&amp;#x5897;&amp;#x3048;&amp;#x305F;&amp;#x305D;&amp;#x3046;&amp;#x306A;&amp;#x306E;&amp;#x3067;&amp;#x3001;&amp;#x30EF;&amp;#x30B7;&amp;#x30F3;&amp;#x30C8;&amp;#x30F3;&amp;#x30DD;&amp;#x30B9;&amp;#x30C8;&amp;#x306B;&amp;#x306F;&amp;#x6C17;&amp;#x306B;&amp;#x5165;&amp;#x3089;&amp;#x308C;&amp;#x305F;&amp;#x3088;&amp;#x3046;&amp;#x3067;&amp;#x3059;&amp;#x3002;
  3. Web&amp;#x30A2;&amp;#x30D7;&amp;#x30EA;&amp;#x30B1;&amp;#x30FC;&amp;#x30B7;&amp;#x30E7;&amp;#x30F3;&amp;#x30D5;&amp;#x30EC;&amp;#x30FC;&amp;#x30E0;&amp;#x30EF;&amp;#x30FC;&amp;#x30AF;&amp;#x306B;&amp;#x306F;&amp;#x7121;&amp;#x3044;&amp;#x3068;&amp;#x306F;&amp;#x3044;&amp;#x3048;&amp;#x306A;&amp;#x304F;&amp;#x306A;&amp;#x3063;&amp;#x3066;&amp;#x304D;&amp;#x305F;O/R&amp;#x30DE;&amp;#x30C3;&amp;#x30D4;&amp;#x30F3;&amp;#x30B0;&amp;#x3068;&amp;#x304B;&amp;#x3001;Django&amp;#x306E;&amp;#x30B5;&amp;#x30A4;&amp;#x30C8;&amp;#x3067;&amp;#x30E1;&amp;#x30A4;&amp;#x30F3;&amp;#x6A5F;&amp;#x80FD;&amp;#x3068;&amp;#x3055;&amp;#x308C;&amp;#x3066;&amp;#x3044;&amp;#x308B;&amp;#x7269;&amp;#x305F;&amp;#x3061;&amp;#x3092;&amp;#x30EA;&amp;#x30B9;&amp;#x30C8;&amp;#x3057;&amp;#x3066;&amp;#x307F;&amp;#x307E;&amp;#x3057;&amp;#x305F;&amp;#x3002; &amp;#x65B0;&amp;#x805E;&amp;#x7CFB;&amp;#x30B5;&amp;#x30A4;&amp;#x30C8;&amp;#x306A;&amp;#x306E;&amp;#x3067;&amp;#x30AD;&amp;#x30E3;&amp;#x30C3;&amp;#x30B7;&amp;#x30E5;&amp;#x306F;&amp;#x7279;&amp;#x306B;&amp;#x529B;&amp;#x304C;&amp;#x5165;&amp;#x3063;&amp;#x3066;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002;&amp;#x3053;&amp;#x3053;&amp;#x306E;&amp;#x3068;&amp;#x3053;&amp;#x308D;&amp;#x696D;&amp;#x52D9;&amp;#x30B7;&amp;#x30B9;&amp;#x30C6;&amp;#x30E0;&amp;#x3092;&amp;#x3084;&amp;#x3063;&amp;#x3066;&amp;#x3044;&amp;#x308B;&amp;#x81EA;&amp;#x5206;&amp;#x3068;&amp;#x3057;&amp;#x3066;&amp;#x306F;&amp;#x3001;&amp;#x963F;&amp;#x5446;&amp;#x3068;&amp;#x3057;&amp;#x304B;&amp;#x601D;&amp;#x3048;&amp;#x306A;&amp;#x3044;&amp;#x30AD;&amp;#x30E3;&amp;#x30C3;&amp;#x30B7;&amp;#x30E5;&amp;#x304C;&amp;#x3042;&amp;#x308A;&amp;#x307E;&amp;#x3059;&amp;#x3002; i18n&amp;#x306F;&amp;#x30AA;&amp;#x30FC;&amp;#x30D7;&amp;#x30F3;&amp;#x30BD;&amp;#x30FC;&amp;#x30B9;&amp;#x5316;&amp;#x3057;&amp;#x3066;&amp;#x3059;&amp;#x3050;&amp;#x306B;&amp;#x53D6;&amp;#x308A;&amp;#x5165;&amp;#x308C;&amp;#x3089;&amp;#x308C;&amp;#x3066;&amp;#x3044;&amp;#x308B;&amp;#x306E;&amp;#x3067;&amp;#x3001;Admin Interface&amp;#x306A;&amp;#x3069;&amp;#x304C;&amp;#x65E2;&amp;#x306B;&amp;#x6570;&amp;#x5341;&amp;#x30AB;&amp;#x56FD;&amp;#x8A9E;&amp;#x306B;&amp;#x5BFE;&amp;#x5FDC;&amp;#x3057;&amp;#x3066;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002; &amp;#x65E5;&amp;#x672C;&amp;#x8A9E;&amp;#x3082;&amp;#x602A;&amp;#x3057;&amp;#x3044;&amp;#x8A33;&amp;#x306E;&amp;#x3082;&amp;#x306E;&amp;#x304C;&amp;#x6700;&amp;#x8FD1;&amp;#x306E;&amp;#x7248;&amp;#x306B;&amp;#x306F;&amp;#x5165;&amp;#x3063;&amp;#x3066;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002;
  4. DRY&amp;#x306E;&amp;#x539F;&amp;#x5247;&amp;#x3068;&amp;#x3044;&amp;#x3046;&amp;#x306E;&amp;#x306F;&amp;#x3001;&amp;#x30C9;&amp;#x30E1;&amp;#x30A4;&amp;#x30F3;&amp;#x30E2;&amp;#x30C7;&amp;#x30EB;&amp;#x306B;&amp;#x95A2;&amp;#x3059;&amp;#x308B;&amp;#x60C5;&amp;#x5831;&amp;#x306F;&amp;#x5168;&amp;#x3066;&amp;#x4E00;&amp;#x30AB;&amp;#x6240;&amp;#x306B;&amp;#x5B58;&amp;#x5728;&amp;#x3059;&amp;#x308B;&amp;#x3079;&amp;#x304D;&amp;#x3068;&amp;#x3059;&amp;#x308B;&amp;#x3082;&amp;#x306E;&amp;#x3067;&amp;#x3059;&amp;#x3002;&amp;#x30C7;&amp;#x30FC;&amp;#x30BF;&amp;#x30D9;&amp;#x30FC;&amp;#x30B9;&amp;#x306E;ER&amp;#x56F3;&amp;#x3084;&amp;#x3089;XML&amp;#x306E;&amp;#x8A2D;&amp;#x5B9A;&amp;#x30D5;&amp;#x30A1;&amp;#x30A4;&amp;#x30EB;&amp;#x3084;&amp;#x3089;&amp;#x3001;&amp;#x30BD;&amp;#x30FC;&amp;#x30B9;&amp;#x30B3;&amp;#x30FC;&amp;#x30C9;&amp;#x3084;&amp;#x3089;&amp;#x306B;&amp;#x8A2D;&amp;#x5B9A;&amp;#x304C;&amp;#x5206;&amp;#x6563;&amp;#x3059;&amp;#x3079;&amp;#x304D;&amp;#x3067;&amp;#x306A;&amp;#x3044;&amp;#x3068;&amp;#x3044;&amp;#x3046;&amp;#x3053;&amp;#x3068;&amp;#x3067;&amp;#x3059;&amp;#x3002; Rails&amp;#x306E;&amp;#x30C7;&amp;#x30FC;&amp;#x30BF;&amp;#x30D9;&amp;#x30FC;&amp;#x30B9;&amp;#x3092;&amp;#x57FA;&amp;#x672C;&amp;#x3068;&amp;#x3059;&amp;#x308B;&amp;#x30A2;&amp;#x30D7;&amp;#x30ED;&amp;#x30FC;&amp;#x30C1;&amp;#x3068;&amp;#x306F;&amp;#x53CD;&amp;#x5BFE;&amp;#x306B;&amp;#x3001;Django&amp;#x306F;model&amp;#x3092;&amp;#x57FA;&amp;#x672C;&amp;#x3068;&amp;#x3057;&amp;#x305F;&amp;#x30A2;&amp;#x30D7;&amp;#x30ED;&amp;#x30FC;&amp;#x30C1;&amp;#x3092;&amp;#x884C;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002; &amp;#x305F;&amp;#x3060;&amp;#x3057;Model&amp;#x30D9;&amp;#x30FC;&amp;#x30B9;&amp;#x306E;DRY&amp;#x306F;&amp;#x3042;&amp;#x304F;&amp;#x307E;&amp;#x3067;&amp;#x539F;&amp;#x5247;&amp;#x306A;&amp;#x306E;&amp;#x3067;&amp;#x3001;&amp;#x30EC;&amp;#x30AC;&amp;#x30B7;&amp;#x30FC;&amp;#x306A;&amp;#x30C7;&amp;#x30FC;&amp;#x30BF;&amp;#x30D9;&amp;#x30FC;&amp;#x30B9;&amp;#x3068;&amp;#x9023;&amp;#x643A;&amp;#x3059;&amp;#x308B;&amp;#x5834;&amp;#x5408;&amp;#x7528;&amp;#x306B;&amp;#x3001;&amp;#x30EA;&amp;#x30D0;&amp;#x30FC;&amp;#x30B9;(inspectdb)&amp;#x3082;&amp;#x2019;&amp;#x4E00;&amp;#x5FDC;&amp;#x2019;&amp;#x7528;&amp;#x610F;&amp;#x3055;&amp;#x308C;&amp;#x3066;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002; &amp;#x30E6;&amp;#x30CB;&amp;#x30FC;&amp;#x30AF;&amp;#x30AD;&amp;#x30FC;&amp;#x3084;Index&amp;#x306E;&amp;#x8A2D;&amp;#x5B9A;&amp;#x307E;&amp;#x3067;&amp;#x3082;Model&amp;#x306B;&amp;#x8A18;&amp;#x8FF0;&amp;#x3067;&amp;#x304D;&amp;#x307E;&amp;#x3059;&amp;#x3002; &amp;#x73FE;&amp;#x6642;&amp;#x70B9;&amp;#x3067;&amp;#x306F;&amp;#x9ED2;&amp;#x9B54;&amp;#x8853;&amp;#x7684;&amp;#x306A;&amp;#x90E8;&amp;#x5206;&amp;#x304C;&amp;#x3042;&amp;#x308A;&amp;#x307E;&amp;#x3059;&amp;#x304C;&amp;#x3001;&amp;#x30D0;&amp;#x30FC;&amp;#x30B8;&amp;#x30E7;&amp;#x30F3;0.92&amp;#x3067;&amp;#x306F;&amp;#x591A;&amp;#x304F;&amp;#x306E;&amp;#x9ED2;&amp;#x9B54;&amp;#x8853;&amp;#x304C;&amp;#x53D6;&amp;#x308A;&amp;#x9664;&amp;#x304B;&amp;#x308C;&amp;#x307E;&amp;#x3059;&amp;#x306E;&amp;#x3067;&amp;#x3001;&amp;#x30B3;&amp;#x30FC;&amp;#x30C9;&amp;#x304B;&amp;#x3089;&amp;#x8FFD;&amp;#x3048;&amp;#x306A;&amp;#x3044;&amp;#x3082;&amp;#x306E;&amp;#x304C;&amp;#x5ACC;&amp;#x3044;&amp;#x306A;&amp;#x4EBA;&amp;#x3082;&amp;#x5927;&amp;#x4E08;&amp;#x592B;&amp;#x3067;&amp;#x3059;&amp;#x3002;
  5. &amp;#x306A;&amp;#x304B;&amp;#x306A;&amp;#x304B;&amp;#x7F8E;&amp;#x3057;&amp;#x3044;&amp;#x3002; &amp;#x64CD;&amp;#x4F5C;&amp;#x30D5;&amp;#x30ED;&amp;#x30FC;&amp;#x306E;&amp;#x7F8E;&amp;#x3057;&amp;#x3055;&amp;#x306F;TurboGears&amp;#x306E;AJAX&amp;#x3092;&amp;#x4F7F;&amp;#x7528;&amp;#x3057;&amp;#x305F;&amp;#x30D1;&amp;#x30BF;&amp;#x30FC;&amp;#x30F3;&amp;#x306B;&amp;#x6575;&amp;#x3044;&amp;#x307E;&amp;#x305B;&amp;#x3093;&amp;#x304C;&amp;#x898B;&amp;#x305F;&amp;#x76EE;&amp;#x306F;&amp;#x304D;&amp;#x3063;&amp;#x3068;&amp;#x4E00;&amp;#x756A;&amp;#x7F8E;&amp;#x3057;&amp;#x3044;&amp;#x3067;&amp;#x3059;&amp;#x3002; model&amp;#x3067;&amp;#x8A18;&amp;#x8FF0;&amp;#x3057;&amp;#x305F;&amp;#x5236;&amp;#x9650;&amp;#x306F;&amp;#x81EA;&amp;#x52D5;&amp;#x3067;&amp;#x30D0;&amp;#x30EA;&amp;#x30C7;&amp;#x30FC;&amp;#x30BF;&amp;#x304C;&amp;#x9069;&amp;#x7528;&amp;#x3055;&amp;#x308C;&amp;#x307E;&amp;#x3059;&amp;#x306E;&amp;#x3067;&amp;#x3001;model&amp;#x3067;&amp;#x8868;&amp;#x73FE;&amp;#x3067;&amp;#x304D;&amp;#x308B;&amp;#x5236;&amp;#x9650;&amp;#x306E;&amp;#x307F;&amp;#x306E;&amp;#x30C7;&amp;#x30FC;&amp;#x30BF;&amp;#x7BA1;&amp;#x7406;&amp;#x753B;&amp;#x9762;&amp;#x306F;&amp;#x81EA;&amp;#x52D5;&amp;#x3067;&amp;#x51FA;&amp;#x6765;&amp;#x308B;&amp;#x7269;&amp;#x3067;&amp;#x5341;&amp;#x5206;&amp;#x3067;&amp;#x3057;&amp;#x3087;&amp;#x3046;&amp;#x3002;&amp;#x95A2;&amp;#x9023;&amp;#x3082;&amp;#x3001;&amp;#x3042;&amp;#x308B;&amp;#x7A0B;&amp;#x5EA6;&amp;#x306E;&amp;#x691C;&amp;#x7D22;&amp;#x3082;&amp;#x5BB9;&amp;#x6613;&amp;#x306B;&amp;#x8A2D;&amp;#x5B9A;&amp;#x3067;&amp;#x304D;&amp;#x307E;&amp;#x3059;&amp;#x3002; &amp;#x3042;&amp;#x3068;&amp;#x3067;&amp;#x6642;&amp;#x9593;&amp;#x304C;&amp;#x3042;&amp;#x308C;&amp;#x3070;&amp;#x753B;&amp;#x9762;&amp;#x3092;&amp;#x304A;&amp;#x898B;&amp;#x305B;&amp;#x3057;&amp;#x307E;&amp;#x3059;&amp;#x3002;
  6. Zope&amp;#x3068;&amp;#x304B;&amp;#x3092;&amp;#x5229;&amp;#x7528;&amp;#x3055;&amp;#x308C;&amp;#x3066;&amp;#x3044;&amp;#x308B;&amp;#x65B9;&amp;#x306E;&amp;#x5834;&amp;#x5408;&amp;#x306F;&amp;#x3001;&amp;#x898B;&amp;#x6163;&amp;#x308C;&amp;#x305F;URL&amp;#x3060;&amp;#x3068;&amp;#x601D;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002; &amp;#x6B63;&amp;#x898F;&amp;#x8868;&amp;#x73FE;&amp;#x3067;&amp;#x8A18;&amp;#x8FF0;&amp;#x3092;&amp;#x3057;&amp;#x3001;&amp;#x30DE;&amp;#x30C3;&amp;#x30C1;&amp;#x3057;&amp;#x305F;&amp;#x5F15;&amp;#x6570;&amp;#x3092;&amp;#x30B3;&amp;#x30F3;&amp;#x30C8;&amp;#x30ED;&amp;#x30FC;&amp;#x30E9;&amp;#x306B;&amp;#x3042;&amp;#x305F;&amp;#x308B;&amp;#x30D5;&amp;#x30A1;&amp;#x30F3;&amp;#x30AF;&amp;#x30B7;&amp;#x30E7;&amp;#x30F3;&amp;#x306B;&amp;#x6E21;&amp;#x3057;&amp;#x307E;&amp;#x3059;&amp;#x3002; urls.py&amp;#x306B;&amp;#x30DE;&amp;#x30C3;&amp;#x30C1;&amp;#x3057;&amp;#x306A;&amp;#x3044;&amp;#x5834;&amp;#x5408;&amp;#x306F;HTTP&amp;#x306E;404&amp;#x30A8;&amp;#x30E9;&amp;#x30FC;&amp;#x304C;&amp;#x767A;&amp;#x751F;&amp;#x3057;&amp;#x307E;&amp;#x3059;&amp;#x3002; &amp;#x5F8C;&amp;#x3067;&amp;#x8AAC;&amp;#x660E;&amp;#x3059;&amp;#x308B;&amp;#x30AD;&amp;#x30E3;&amp;#x30C3;&amp;#x30B7;&amp;#x30E5;&amp;#x3067;&amp;#x91CD;&amp;#x8981;&amp;#x306B;&amp;#x306A;&amp;#x3063;&amp;#x3066;&amp;#x304F;&amp;#x308B;&amp;#x306E;&amp;#x3067;&amp;#x3001;Elegant&amp;#x306B;&amp;#x3057;&amp;#x3066;&amp;#x304A;&amp;#x304D;&amp;#x307E;&amp;#x3057;&amp;#x3087;&amp;#x3046;&amp;#x3002;
  7. Plone&amp;#x306E;METAL&amp;#x3068;&amp;#x9055;&amp;#x3063;&amp;#x3066;&amp;#x3001;HTML&amp;#x304C;&amp;#x58CA;&amp;#x308C;&amp;#x308B;&amp;#x30BF;&amp;#x30A4;&amp;#x30D7;&amp;#x306E;&amp;#x30C6;&amp;#x30F3;&amp;#x30D7;&amp;#x30EC;&amp;#x30FC;&amp;#x30C8;&amp;#x3067;&amp;#x3059;&amp;#x3002; Django&amp;#x30D7;&amp;#x30ED;&amp;#x30B8;&amp;#x30A7;&amp;#x30AF;&amp;#x30C8;&amp;#x306E;&amp;#x4EBA;&amp;#x3068;&amp;#x3057;&amp;#x3066;&amp;#x306F;&amp;#x3001;&amp;#x300C;&amp;#x30C7;&amp;#x30B6;&amp;#x30A4;&amp;#x30CA;&amp;#x30FC;&amp;#x3082;&amp;#x99AC;&amp;#x9E7F;&amp;#x306B;&amp;#x305B;&amp;#x305A;&amp;#x306B;&amp;#x3061;&amp;#x3087;&amp;#x3063;&amp;#x3068;&amp;#x6559;&amp;#x3048;&amp;#x308C;&amp;#x3070;&amp;#x3001;&amp;#x30B3;&amp;#x30FC;&amp;#x30C9;&amp;#x307E;&amp;#x3067;&amp;#x66F8;&amp;#x304D;&amp;#x51FA;&amp;#x3059;&amp;#x306F;&amp;#x305A;&amp;#x300D;&amp;#x3068;&amp;#x3044;&amp;#x3046;&amp;#x601D;&amp;#x60F3;&amp;#x3067;&amp;#x3001;&amp;#x4E8B;&amp;#x5B9F;&amp;#x5F7C;&amp;#x3089;&amp;#x306E;&amp;#x5468;&amp;#x308A;&amp;#x306E;&amp;#x30C7;&amp;#x30B6;&amp;#x30A4;&amp;#x30CA;&amp;#x30FC;&amp;#x306F;&amp;#x30C6;&amp;#x30F3;&amp;#x30D7;&amp;#x30EC;&amp;#x30FC;&amp;#x30C8;&amp;#x3092;&amp;#x4F7F;&amp;#x3044;&amp;#x3053;&amp;#x306A;&amp;#x3057;&amp;#x3066;&amp;#x3044;&amp;#x308B;&amp;#x3088;&amp;#x3046;&amp;#x3067;&amp;#x3059;&amp;#x3002; &amp;#x500B;&amp;#x4EBA;&amp;#x7684;&amp;#x306B;&amp;#x306F;&amp;#x300C;&amp;#x30C6;&amp;#x30F3;&amp;#x30D7;&amp;#x30EC;&amp;#x30FC;&amp;#x30C8;&amp;#x306E;&amp;#x7D99;&amp;#x627F;&amp;#x300D;&amp;#x3068;&amp;#x3044;&amp;#x3046;&amp;#x306E;&amp;#x306F;&amp;#x597D;&amp;#x304D;&amp;#x3067;&amp;#x306F;&amp;#x306A;&amp;#x3044;&amp;#x3093;&amp;#x3067;&amp;#x3059;&amp;#x304C;&amp;#x3001;&amp;#x4F3C;&amp;#x3066;&amp;#x3044;&amp;#x3066;&amp;#x5C11;&amp;#x3057;&amp;#x9055;&amp;#x3046;&amp;#x3068;&amp;#x8A00;&amp;#x3063;&amp;#x305F;&amp;#x30C6;&amp;#x30F3;&amp;#x30D7;&amp;#x30EC;&amp;#x30FC;&amp;#x30C8;&amp;#x306F;&amp;#x7D99;&amp;#x627F;&amp;#x3057;&amp;#x305F;&amp;#x65B9;&amp;#x304C;&amp;#x3044;&amp;#x3044;&amp;#x5834;&amp;#x9762;&amp;#x3082;&amp;#x3042;&amp;#x308B;&amp;#x3067;&amp;#x3057;&amp;#x3087;&amp;#x3046;&amp;#x3002;
  8. &amp;#x30B5;&amp;#x30A4;&amp;#x30C8;&amp;#x5168;&amp;#x4F53;&amp;#x3092;&amp;#x30AD;&amp;#x30E3;&amp;#x30C3;&amp;#x30B7;&amp;#x30E5;&amp;#x3059;&amp;#x308B;&amp;#x8A2D;&amp;#x5B9A;&amp;#x306B;&amp;#x3059;&amp;#x308B;&amp;#x306E;&amp;#x306F;&amp;#x3001;settings.py&amp;#x306B;&amp;#xFF13;&amp;#x884C;&amp;#x8FFD;&amp;#x52A0;&amp;#x3059;&amp;#x308B;&amp;#x3060;&amp;#x3051;&amp;#x3067;&amp;#x3059;&amp;#x3002; &amp;#x30B3;&amp;#x30F3;&amp;#x30C8;&amp;#x30ED;&amp;#x30FC;&amp;#x30E9;&amp;#x306B;&amp;#x3059;&amp;#x3053;&amp;#x3057;&amp;#x30B3;&amp;#x30FC;&amp;#x30C9;&amp;#x3092;&amp;#x8FFD;&amp;#x52A0;&amp;#x3059;&amp;#x308C;&amp;#x3070;&amp;#x7D30;&amp;#x304B;&amp;#x304F;&amp;#x8A2D;&amp;#x5B9A;&amp;#x3059;&amp;#x308B;&amp;#x3053;&amp;#x3068;&amp;#x3082;&amp;#x51FA;&amp;#x6765;&amp;#x307E;&amp;#x3059;&amp;#x3002; URL&amp;#x306E;&amp;#x8A2D;&amp;#x8A08;&amp;#x304C;&amp;#x91CD;&amp;#x8981;&amp;#x306A;&amp;#x306E;&amp;#x306F;&amp;#x3001;GET/POST&amp;#x306E;&amp;#x30C7;&amp;#x30FC;&amp;#x30BF;&amp;#x304C;&amp;#x3042;&amp;#x308B;&amp;#x5834;&amp;#x5408;&amp;#x306B;&amp;#x306F;&amp;#x30AD;&amp;#x30E3;&amp;#x30C3;&amp;#x30B7;&amp;#x30E5;&amp;#x3092;&amp;#x5229;&amp;#x7528;&amp;#x3057;&amp;#x306A;&amp;#x3044;&amp;#x305F;&amp;#x3081;&amp;#x3002;ElegantURL&amp;#x306B;&amp;#x3057;&amp;#x306A;&amp;#x3044;&amp;#x3068;&amp;#x307B;&amp;#x3068;&amp;#x3093;&amp;#x3069;&amp;#x30AD;&amp;#x30E3;&amp;#x30C3;&amp;#x30B7;&amp;#x30E5;&amp;#x304C;&amp;#x52B9;&amp;#x304B;&amp;#x306A;&amp;#x3044;&amp;#x3067;&amp;#x3057;&amp;#x3087;&amp;#x3046;&amp;#x3002;&amp;#x4F1A;&amp;#x54E1;50&amp;#x4E07;&amp;#x4EBA;&amp;#x3001;&amp;#x5E38;&amp;#x6642;2&amp;#x4E07;&amp;#x30BB;&amp;#x30C3;&amp;#x30B7;&amp;#x30E7;&amp;#x30F3;&amp;#x3068;&amp;#x3044;&amp;#x3046;&amp;#x898F;&amp;#x6A21;&amp;#x306E;&amp;#x30DD;&amp;#x30FC;&amp;#x30E9;&amp;#x30F3;&amp;#x30C9;&amp;#xFF1F;&amp;#x306E;SNS&amp;#x3067;&amp;#x306F;tomcat&amp;#x30B5;&amp;#x30FC;&amp;#x30D0;&amp;#xFF14;&amp;#x53F0;&amp;#x304B;&amp;#x3089;Django&amp;#x30B5;&amp;#x30FC;&amp;#x30D0;&amp;#xFF11;&amp;#x53F0;&amp;#x306B;&amp;#x30EA;&amp;#x30D7;&amp;#x30EC;&amp;#x30FC;&amp;#x30B9;&amp;#x3057;&amp;#x305F;&amp;#x3068;&amp;#x3044;&amp;#x3046;&amp;#x3053;&amp;#x3068;&amp;#x3067;&amp;#x3059;&amp;#x3002;
  9. &amp;#x30AD;&amp;#x30E3;&amp;#x30C3;&amp;#x30B7;&amp;#x30E5;&amp;#x306F;locmem&amp;#x306E;&amp;#x4ED6;&amp;#x306B;&amp;#x3082;&amp;#x3001;memcach&amp;#x3084;db,file&amp;#x304C;&amp;#x3042;&amp;#x308A;&amp;#x307E;&amp;#x3059;&amp;#x3002; memcash&amp;#x306F;&amp;#x672C;&amp;#x5BB6;&amp;#x30B9;&amp;#x30E9;&amp;#x30C9;&amp;#x3082;&amp;#x4F7F;&amp;#x7528;&amp;#x3057;&amp;#x3066;&amp;#x3044;&amp;#x308B;&amp;#x6A21;&amp;#x69D8;&amp;#x3067;&amp;#x3059;&amp;#x3002;&amp;#x30B9;&amp;#x30BF;&amp;#x30C6;&amp;#x30A3;&amp;#x30C3;&amp;#x30AF;&amp;#x30D5;&amp;#x30A1;&amp;#x30A4;&amp;#x30EB;&amp;#x306E;&amp;#x66F8;&amp;#x304D;&amp;#x51FA;&amp;#x3057;&amp;#x3068;&amp;#x304B;memcash&amp;#x3092;&amp;#x4F7F;&amp;#x3046;&amp;#x3088;&amp;#x3046;&amp;#x306A;&amp;#x72EC;&amp;#x81EA;&amp;#x5B9F;&amp;#x88C5;&amp;#x3068;&amp;#x304B;&amp;#x304C;&amp;#x5FC5;&amp;#x8981;&amp;#x306A;&amp;#x304F;&amp;#x3001;&amp;#x30D3;&amp;#x30E5;&amp;#x30FC;&amp;#x6BCE;&amp;#x306B;&amp;#x30AD;&amp;#x30E3;&amp;#x30C3;&amp;#x30B7;&amp;#x30E5;&amp;#x3059;&amp;#x308B;&amp;#x304B;&amp;#x3069;&amp;#x3046;&amp;#x304B;&amp;#x306E;&amp;#x5236;&amp;#x5FA1;&amp;#x3092;&amp;#x3059;&amp;#x308B;&amp;#x5834;&amp;#x5408;&amp;#x3082;&amp;#x5404;&amp;#x30D3;&amp;#x30E5;&amp;#x30FC;&amp;#x306B;&amp;#xFF11;&amp;#x30FB;&amp;#xFF12;&amp;#x884C;&amp;#x8A18;&amp;#x8FF0;&amp;#x3059;&amp;#x308B;&amp;#x3060;&amp;#x3051;&amp;#x306A;&amp;#x306E;&amp;#x3067;&amp;#x3001;&amp;#x958B;&amp;#x767A;&amp;#x306F;&amp;#x975E;&amp;#x5E38;&amp;#x306B;&amp;#x697D;&amp;#x3060;&amp;#x3068;&amp;#x304A;&amp;#x3082;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002;&amp;#x5B9F;&amp;#x969B;&amp;#x306F;&amp;#x3044;&amp;#x308D;&amp;#x3044;&amp;#x308D;&amp;#x3068;URL&amp;#x7B49;&amp;#x306E;&amp;#x8A2D;&amp;#x8A08;&amp;#x304C;&amp;#x5FC5;&amp;#x8981;&amp;#x3067;&amp;#x3057;&amp;#x3087;&amp;#x3046;&amp;#x304C;&amp;#x3002;
  10. python&amp;#x306E;&amp;#x4EBA;&amp;#x306B;&amp;#x306F;&amp;#x898B;&amp;#x6163;&amp;#x308C;&amp;#x3066;&amp;#x3044;&amp;#x308B;&amp;#x3067;&amp;#x3042;&amp;#x308D;&amp;#x3046;&amp;#x3001;po&amp;#x3092;&amp;#x4F7F;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002; &amp;#x56FD;&amp;#x969B;&amp;#x5316;&amp;#x7528;&amp;#x306E;&amp;#x30B3;&amp;#x30FC;&amp;#x30C9;&amp;#x306E;&amp;#x8A18;&amp;#x8FF0;&amp;#x306F;&amp;#x7C21;&amp;#x5358;&amp;#x3067;&amp;#x3059;&amp;#x3002; po&amp;#x3001;mo&amp;#x306F;&amp;#x3053;&amp;#x3093;&amp;#x306A;&amp;#x611F;&amp;#x3058;&amp;#x306B;&amp;#x4F5C;&amp;#x308A;&amp;#x307E;&amp;#x3059;&amp;#x3002;getText&amp;#x3068;&amp;#x3044;&amp;#x3046;&amp;#x30E9;&amp;#x30A4;&amp;#x30D6;&amp;#x30E9;&amp;#x30EA;&amp;#x304C;&amp;#x5FC5;&amp;#x8981;&amp;#x306A;&amp;#x306E;&amp;#x3067;&amp;#x3001;&amp;#x30A6;&amp;#x30A3;&amp;#x30F3;&amp;#x30C9;&amp;#x30A6;&amp;#x30BA;&amp;#x3067;&amp;#x306F;&amp;#x9762;&amp;#x5012;&amp;#x304B;&amp;#x3082;&amp;#x3057;&amp;#x308C;&amp;#x306A;&amp;#x3044;&amp;#x3002;&amp;#x30B3;&amp;#x30FC;&amp;#x30C9;&amp;#x66F8;&amp;#x304D;&amp;#x3084;&amp;#x52D5;&amp;#x4F5C;&amp;#x306B;&amp;#x306F;&amp;#x5FC5;&amp;#x8981;&amp;#x306A;&amp;#x3044;&amp;#x306E;&amp;#x3067;&amp;#x3001;&amp;#x307E;&amp;#x3068;&amp;#x3081;&amp;#x3066;xUnix&amp;#x7CFB;&amp;#x306E;OS&amp;#x3067;&amp;#x3084;&amp;#x3063;&amp;#x305F;&amp;#x65B9;&amp;#x304C;&amp;#x697D;&amp;#x3002;OSX&amp;#x3055;&amp;#x3044;&amp;#x3053;&amp;#x30FC;&amp;#x3002; plone&amp;#x3068;&amp;#x304B;&amp;#x306E;&amp;#x3088;&amp;#x3046;&amp;#x306B;accept-language&amp;#x3067;&amp;#x8A00;&amp;#x8A9E;&amp;#x3092;&amp;#x5207;&amp;#x308A;&amp;#x66FF;&amp;#x3048;&amp;#x305F;&amp;#x308A;&amp;#x3001;session&amp;#x3084;cookie&amp;#x306E;&amp;#x7279;&amp;#x5B9A;&amp;#x306E;&amp;#x5024;&amp;#x3092;&amp;#x3082;&amp;#x306E;&amp;#x306B;&amp;#x8A00;&amp;#x8A9E;&amp;#x3092;&amp;#x5207;&amp;#x308A;&amp;#x66FF;&amp;#x3048;&amp;#x305F;&amp;#x308A;&amp;#x51FA;&amp;#x6765;&amp;#x307E;&amp;#x3059;&amp;#x3002;
  11. &amp;#x3053;&amp;#x3053;&amp;#x307E;&amp;#x3067;&amp;#x3067;&amp;#x3001;Django&amp;#x306B;&amp;#x8208;&amp;#x5473;&amp;#x304C;&amp;#x308F;&amp;#x3044;&amp;#x305F;&amp;#x306F;&amp;#x305A;&amp;#x306A;&amp;#x306E;&amp;#x3067;&amp;#x3001;&amp;#x5B9F;&amp;#x969B;&amp;#x7684;&amp;#x306A;&amp;#x8A71;&amp;#x306B;&amp;#x3046;&amp;#x3064;&amp;#x308A;&amp;#x307E;&amp;#x3059;&amp;#x3002; mod_python&amp;#x306E;3.x&amp;#x304C;&amp;#x5FC5;&amp;#x8981;&amp;#x306A;&amp;#x306E;&amp;#x3067;&amp;#x3001;apache&amp;#x306E;&amp;#x30D0;&amp;#x30FC;&amp;#x30B8;&amp;#x30E7;&amp;#x30F3;&amp;#x3082;2.x&amp;#x3067;&amp;#x3059;&amp;#x3002; lighttpd&amp;#x3068;fast-cgi&amp;#x3068;&amp;#x3044;&amp;#x3046;&amp;#x624B;&amp;#x3082;&amp;#x3042;&amp;#x308A;&amp;#x307E;&amp;#x3059;&amp;#x3002; &amp;#x5BFE;&amp;#x5FDC;&amp;#x30C7;&amp;#x30FC;&amp;#x30BF;&amp;#x30D9;&amp;#x30FC;&amp;#x30B9;&amp;#x306E;&amp;#x3001;SQLServer&amp;#x306F;&amp;#x73FE;&amp;#x6642;&amp;#x70B9;&amp;#x3067;&amp;#x306F;ADO_MS_SQLServer&amp;#x9650;&amp;#x5B9A;&amp;#x3067;&amp;#x3059;&amp;#x3002;&amp;#x3088;&amp;#x304F;&amp;#x610F;&amp;#x5473;&amp;#x306F;&amp;#x308F;&amp;#x304B;&amp;#x308A;&amp;#x307E;&amp;#x305B;&amp;#x3093;&amp;#x304C;&amp;#x3001;&amp;#x9650;&amp;#x5B9A;&amp;#x3067;&amp;#x3059;&amp;#x3002; Oracle&amp;#x306B;&amp;#x95A2;&amp;#x3057;&amp;#x3066;&amp;#x306F;&amp;#x4EE5;&amp;#x524D;&amp;#x30D1;&amp;#x30C3;&amp;#x30C1;&amp;#x3092;&amp;#x898B;&amp;#x304B;&amp;#x3051;&amp;#x307E;&amp;#x3057;&amp;#x305F;&amp;#x304C;&amp;#x3001;&amp;#x4F7F;&amp;#x3048;&amp;#x308B;&amp;#x304B;&amp;#x3069;&amp;#x3046;&amp;#x304B;&amp;#x306F;&amp;#x4E0D;&amp;#x660E;&amp;#x3067;&amp;#x3059;&amp;#x3002;
  12. &amp;#x5B9F;&amp;#x969B;&amp;#x306E;&amp;#x958B;&amp;#x767A;&amp;#x306F;&amp;#x3001;&amp;#x30D7;&amp;#x30ED;&amp;#x30B8;&amp;#x30A7;&amp;#x30AF;&amp;#x30C8;&amp;#x306E;&amp;#x958B;&amp;#x59CB;&amp;#x304B;&amp;#x3089;&amp;#x3057;&amp;#x306A;&amp;#x3051;&amp;#x308C;&amp;#x3070;&amp;#x3044;&amp;#x3051;&amp;#x306A;&amp;#x3044;&amp;#x3053;&amp;#x3068;&amp;#x304C;&amp;#x6C7A;&amp;#x307E;&amp;#x3063;&amp;#x3066;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002; &amp;#x30D5;&amp;#x30EC;&amp;#x30FC;&amp;#x30E0;&amp;#x30EF;&amp;#x30FC;&amp;#x30AF;&amp;#x3067;&amp;#x3059;&amp;#x304B;&amp;#x3089;&amp;#x3002;
  13. &amp;#x4E00;&amp;#x3064;&amp;#x306E;&amp;#x30C7;&amp;#x30FC;&amp;#x30BF;&amp;#x30D9;&amp;#x30FC;&amp;#x30B9;&amp;#x306B;&amp;#x5BFE;&amp;#x3057;&amp;#x3066;&amp;#x3001;&amp;#x4E00;&amp;#x3064;&amp;#x306E;Django-Core&amp;#x30C7;&amp;#x30FC;&amp;#x30BF;&amp;#x30D9;&amp;#x30FC;&amp;#x30B9;&amp;#x304C;&amp;#x5FC5;&amp;#x8981;&amp;#x3067;&amp;#x3059;&amp;#x3002;&amp;#x305D;&amp;#x308C;&amp;#x3092;&amp;#x7528;&amp;#x610F;&amp;#x3059;&amp;#x308B;&amp;#x305F;&amp;#x3081;&amp;#x306B;&amp;#x306F;&amp;#x3001;&amp;#x30D7;&amp;#x30ED;&amp;#x30B8;&amp;#x30A7;&amp;#x30AF;&amp;#x30C8;&amp;#x3092;&amp;#x958B;&amp;#x59CB;&amp;#x3057;&amp;#x3066;&amp;#x30C7;&amp;#x30FC;&amp;#x30BF;&amp;#x30D9;&amp;#x30FC;&amp;#x30B9;&amp;#x306E;&amp;#x8A2D;&amp;#x5B9A;&amp;#x3092;&amp;#x3059;&amp;#x308B;&amp;#x5FC5;&amp;#x8981;&amp;#x304C;&amp;#x3042;&amp;#x308A;&amp;#x307E;&amp;#x3059;&amp;#x3002;&amp;#x9806;&amp;#x756A;&amp;#x304C;&amp;#x3061;&amp;#x3087;&amp;#x3063;&amp;#x3068;&amp;#x6C17;&amp;#x6301;&amp;#x3061;&amp;#x60AA;&amp;#x3044;&amp;#x3067;&amp;#x3059;&amp;#x3002; &amp;#x4E00;&amp;#x5EA6;&amp;#x30D7;&amp;#x30ED;&amp;#x30B8;&amp;#x30A7;&amp;#x30AF;&amp;#x30C8;&amp;#x3092;&amp;#x958B;&amp;#x59CB;&amp;#x3057;&amp;#x3066;&amp;#x3057;&amp;#x307E;&amp;#x3048;&amp;#x3070;&amp;#x3001;&amp;#x540C;&amp;#x3058;&amp;#x30C7;&amp;#x30FC;&amp;#x30BF;&amp;#x30D9;&amp;#x30FC;&amp;#x30B9;&amp;#x60C5;&amp;#x5831;&amp;#x3092;&amp;#x5229;&amp;#x7528;&amp;#x3059;&amp;#x308B;&amp;#x30D7;&amp;#x30ED;&amp;#x30B8;&amp;#x30A7;&amp;#x30AF;&amp;#x30C8;&amp;#x3084;&amp;#x3001;&amp;#x305D;&amp;#x306E;&amp;#x30D7;&amp;#x30ED;&amp;#x30B8;&amp;#x30A7;&amp;#x30AF;&amp;#x30C8;&amp;#x306F;&amp;#x4EE5;&amp;#x4E0B;&amp;#x306E;&amp;#x30A2;&amp;#x30D7;&amp;#x30EA;&amp;#x30B1;&amp;#x30FC;&amp;#x30B7;&amp;#x30E7;&amp;#x30F3;&amp;#x306F;&amp;#x540C;&amp;#x4E00;Django-Core&amp;#x30C7;&amp;#x30FC;&amp;#x30BF;&amp;#x30D9;&amp;#x30FC;&amp;#x30B9;&amp;#x3092;&amp;#x5229;&amp;#x7528;&amp;#x3067;&amp;#x304D;&amp;#x308B;&amp;#x3002;
  14. &amp;#x3068;&amp;#x3070;&amp;#x3059;&amp;#x3002;&amp;#x5909;&amp;#x308F;&amp;#x3063;&amp;#x3066;&amp;#x3044;&amp;#x308B;&amp;#x306E;&amp;#x306F;&amp;#x3001;&amp;#x307E;&amp;#x305A;Project&amp;#x306E;&amp;#x30A4;&amp;#x30CB;&amp;#x30B7;&amp;#x30E3;&amp;#x30E9;&amp;#x30A4;&amp;#x30BA;&amp;#x3092;&amp;#x3059;&amp;#x308B;&amp;#x3068;&amp;#x3044;&amp;#x3046;&amp;#x6240;&amp;#x3002; &amp;#x30C7;&amp;#x30FC;&amp;#x30BF;&amp;#x30D9;&amp;#x30FC;&amp;#x30B9;&amp;#x306E;&amp;#x60C5;&amp;#x5831;&amp;#x304C;&amp;#x5FC5;&amp;#x8981;&amp;#x306A;&amp;#x306E;&amp;#x3067;&amp;#x3001;init&amp;#x3088;&amp;#x308A;&amp;#x3082;startproject&amp;#x304C;&amp;#x5148;&amp;#x306A;&amp;#x306E;&amp;#x304C;&amp;#x3061;&amp;#x3087;&amp;#x3063;&amp;#x3068;&amp;#x30A4;&amp;#x30E1;&amp;#x30FC;&amp;#x30B8;&amp;#x308F;&amp;#x304D;&amp;#x306B;&amp;#x304F;&amp;#x3044;&amp;#x3068;&amp;#x3053;&amp;#x308D;&amp;#x3067;&amp;#x3059;&amp;#x3002; &amp;#x4E00;&amp;#x3064;&amp;#x306E;&amp;#x30D7;&amp;#x30ED;&amp;#x30B8;&amp;#x30A7;&amp;#x30AF;&amp;#x30C8;&amp;#x3067;&amp;#x8907;&amp;#x6570;&amp;#x306E;&amp;#x30A2;&amp;#x30D7;&amp;#x30EA;&amp;#x30B1;&amp;#x30FC;&amp;#x30B7;&amp;#x30E7;&amp;#x30F3;&amp;#x3092;&amp;#x4F5C;&amp;#x308B;&amp;#x5834;&amp;#x5408;&amp;#x306F;&amp;#x3001;startapp&amp;#x304B;&amp;#x3089;&amp;#x3092;&amp;#x7E70;&amp;#x308A;&amp;#x8FD4;&amp;#x3059;&amp;#x3053;&amp;#x3068;&amp;#x306B;&amp;#x306A;&amp;#x308A;&amp;#x307E;&amp;#x3059;&amp;#x3002; manage.py&amp;#x3068;&amp;#x3044;&amp;#x3046;&amp;#x30B9;&amp;#x30AF;&amp;#x30EA;&amp;#x30D7;&amp;#x30C8;&amp;#x306F;&amp;#x3001;django-admin.py&amp;#x3068;settings&amp;#x30AA;&amp;#x30D7;&amp;#x30B7;&amp;#x30E7;&amp;#x30F3;&amp;#x306E;&amp;#x30E9;&amp;#x30C3;&amp;#x30D1;&amp;#x30FC;&amp;#x3067;&amp;#x3059;&amp;#x3002;startproject&amp;#x4EE5;&amp;#x5916;&amp;#x3067;&amp;#x3082;django-admin.py&amp;#x306F;&amp;#x5229;&amp;#x7528;&amp;#x53EF;&amp;#x80FD;&amp;#x3067;&amp;#x3059;&amp;#x3002;
  15. django-admin.py&amp;#x3068;&amp;#x3044;&amp;#x3046;&amp;#x306E;&amp;#x306F;&amp;#x3001;Django&amp;#x306E;&amp;#x64CD;&amp;#x4F5C;&amp;#x30B9;&amp;#x30AF;&amp;#x30EA;&amp;#x30D7;&amp;#x30C8;&amp;#x3067;&amp;#x3059;&amp;#x3002;Django&amp;#x306B;&amp;#x542B;&amp;#x307E;&amp;#x308C;&amp;#x307E;&amp;#x3059;&amp;#x3002; &amp;#x3053;&amp;#x306E;&amp;#x64CD;&amp;#x4F5C;&amp;#x3067;&amp;#x306F;&amp;#x30AB;&amp;#x30EC;&amp;#x30F3;&amp;#x30C8;&amp;#x30C7;&amp;#x30A3;&amp;#x30EC;&amp;#x30AF;&amp;#x30C8;&amp;#x30EA;&amp;#x306B;&amp;#x30D7;&amp;#x30ED;&amp;#x30B8;&amp;#x30A7;&amp;#x30AF;&amp;#x30C8;&amp;#x7528;&amp;#x306E;&amp;#x30C7;&amp;#x30A3;&amp;#x30EC;&amp;#x30AF;&amp;#x30C8;&amp;#x30EA;&amp;#x304C;&amp;#x4F5C;&amp;#x6210;&amp;#x3055;&amp;#x308C;&amp;#x307E;&amp;#x3059;&amp;#x3002; &amp;#x30D7;&amp;#x30ED;&amp;#x30B8;&amp;#x30A7;&amp;#x30AF;&amp;#x30C8;&amp;#x30C7;&amp;#x30A3;&amp;#x30EC;&amp;#x30AF;&amp;#x30C8;&amp;#x30EA;&amp;#x306E;&amp;#x76F4;&amp;#x4E0B;&amp;#x306B;settings.py&amp;#x3068;&amp;#x3044;&amp;#x3046;&amp;#x30D5;&amp;#x30A1;&amp;#x30A4;&amp;#x30EB;&amp;#x304C;&amp;#x751F;&amp;#x6210;&amp;#x3055;&amp;#x308C;&amp;#x3066;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x304C;&amp;#x3001;&amp;#x3053;&amp;#x308C;&amp;#x306F;&amp;#x30D7;&amp;#x30ED;&amp;#x30B8;&amp;#x30A7;&amp;#x30AF;&amp;#x30C8;&amp;#x306E;&amp;#x8A2D;&amp;#x5B9A;&amp;#x3092;&amp;#x8A18;&amp;#x8FF0;&amp;#x3059;&amp;#x308B;&amp;#x30D5;&amp;#x30A1;&amp;#x30A4;&amp;#x30EB;&amp;#x3067;&amp;#x3059;&amp;#x3002; manage.py&amp;#x3068;&amp;#x3044;&amp;#x3046;&amp;#x306E;&amp;#x306F;django-admin.py&amp;#x306E;&amp;#x30E9;&amp;#x30C3;&amp;#x30D1;&amp;#x30FC;&amp;#x3067;&amp;#x3059;&amp;#x3002;&amp;#x30D7;&amp;#x30ED;&amp;#x30B8;&amp;#x30A7;&amp;#x30AF;&amp;#x30C8;&amp;#x306E;&amp;#x4F5C;&amp;#x6210;&amp;#x4EE5;&amp;#x964D;&amp;#x306F;&amp;#x30E9;&amp;#x30C3;&amp;#x30D1;&amp;#x3092;&amp;#x4F7F;&amp;#x3063;&amp;#x305F;&amp;#x65B9;&amp;#x304C;&amp;#x4FBF;&amp;#x5229;&amp;#x3067;&amp;#x3059;&amp;#x3002;
  16. &amp;#x307E;&amp;#x305A;settings.py&amp;#x3092;&amp;#x7DE8;&amp;#x96C6;&amp;#x3057;&amp;#x307E;&amp;#x3059;&amp;#x3002; &amp;#x73FE;&amp;#x30D0;&amp;#x30FC;&amp;#x30B8;&amp;#x30E7;&amp;#x30F3;&amp;#x3067;&amp;#x306F;&amp;#x30D7;&amp;#x30ED;&amp;#x30B8;&amp;#x30A7;&amp;#x30AF;&amp;#x30C8;&amp;#x6BCE;&amp;#x306B;&amp;#x4E00;&amp;#x3064;&amp;#x306E;&amp;#x30C7;&amp;#x30FC;&amp;#x30BF;&amp;#x30D9;&amp;#x30FC;&amp;#x30B9;&amp;#x3057;&amp;#x304B;&amp;#x4F7F;&amp;#x7528;&amp;#x3067;&amp;#x304D;&amp;#x307E;&amp;#x305B;&amp;#x3093;&amp;#x3002; settings.py&amp;#x306B;&amp;#x306F;&amp;#x4ED6;&amp;#x306B;&amp;#x3082;&amp;#x3044;&amp;#x308D;&amp;#x3044;&amp;#x308D;&amp;#x306A;&amp;#x8A2D;&amp;#x5B9A;&amp;#x304C;&amp;#x3042;&amp;#x308A;&amp;#x307E;&amp;#x3059;&amp;#x304C;&amp;#x3001;&amp;#x306F;&amp;#x3057;&amp;#x3087;&amp;#x308A;&amp;#x307E;&amp;#x3059;&amp;#x3002; &amp;#x30B3;&amp;#x30E1;&amp;#x30F3;&amp;#x30C8;&amp;#x3092;&amp;#x8AAD;&amp;#x3081;&amp;#x3070;&amp;#x5927;&amp;#x62B5;&amp;#x308F;&amp;#x304B;&amp;#x308A;&amp;#x307E;&amp;#x3059;&amp;#x3002;
  17. &amp;#x81EA;&amp;#x52D5;&amp;#x7BA1;&amp;#x7406;&amp;#x30A4;&amp;#x30F3;&amp;#x30BF;&amp;#x30FC;&amp;#x30D5;&amp;#x30A7;&amp;#x30FC;&amp;#x30B9;&amp;#x3067;&amp;#x4F7F;&amp;#x7528;&amp;#x3059;&amp;#x308B;&amp;#x30C6;&amp;#x30FC;&amp;#x30D6;&amp;#x30EB;&amp;#x3084;&amp;#x3001;&amp;#x30A2;&amp;#x30D7;&amp;#x30EA;&amp;#x30B1;&amp;#x30FC;&amp;#x30B7;&amp;#x30E7;&amp;#x30F3;&amp;#x3067;&amp;#x4F7F;&amp;#x7528;&amp;#x3059;&amp;#x308B;&amp;#x60C5;&amp;#x5831;&amp;#x3082;&amp;#x683C;&amp;#x7D0D;&amp;#x3055;&amp;#x308C;&amp;#x307E;&amp;#x3059;&amp;#x3002; &amp;#x30C7;&amp;#x30FC;&amp;#x30BF;&amp;#x30D9;&amp;#x30FC;&amp;#x30B9;&amp;#x81EA;&amp;#x4F53;&amp;#x3084;&amp;#x63A5;&amp;#x7D9A;&amp;#x30E6;&amp;#x30FC;&amp;#x30B6;&amp;#x306F;&amp;#x4F5C;&amp;#x6210;&amp;#x3055;&amp;#x308C;&amp;#x307E;&amp;#x305B;&amp;#x3093;&amp;#x306E;&amp;#x3067;&amp;#x3001;&amp;#x4F7F;&amp;#x7528;&amp;#x3059;&amp;#x308B;&amp;#x30C7;&amp;#x30FC;&amp;#x30BF;&amp;#x30D9;&amp;#x30FC;&amp;#x30B9;&amp;#x3068;&amp;#x63A5;&amp;#x7D9A;&amp;#x30E6;&amp;#x30FC;&amp;#x30B6;&amp;#x306F;&amp;#x4E8B;&amp;#x524D;&amp;#x306B;&amp;#x4F5C;&amp;#x6210;&amp;#x3057;&amp;#x3066;&amp;#x304A;&amp;#x304F;&amp;#x5FC5;&amp;#x8981;&amp;#x304C;&amp;#x3042;&amp;#x308A;&amp;#x307E;&amp;#x3059;&amp;#x3002;
  18. &amp;#x30A2;&amp;#x30D7;&amp;#x30EA;&amp;#x30B1;&amp;#x30FC;&amp;#x30B7;&amp;#x30E7;&amp;#x30F3;&amp;#x3092;&amp;#x958B;&amp;#x59CB;&amp;#x3059;&amp;#x308B;&amp;#x306B;&amp;#x306F;&amp;#x3001;manage.py&amp;#x3092;&amp;#x4F7F;&amp;#x7528;&amp;#x3057;&amp;#x3066;startproject&amp;#x3057;&amp;#x307E;&amp;#x3059;&amp;#x3002; &amp;#x30D7;&amp;#x30ED;&amp;#x30B8;&amp;#x30A7;&amp;#x30AF;&amp;#x30C8;&amp;#x306B;&amp;#x30A2;&amp;#x30D7;&amp;#x30EA;&amp;#x30B1;&amp;#x30FC;&amp;#x30B7;&amp;#x30E7;&amp;#x30F3;&amp;#x304C;&amp;#x4E00;&amp;#x3064;&amp;#x306E;&amp;#x5834;&amp;#x5408;&amp;#x306F;&amp;#x3001;&amp;#x306A;&amp;#x3093;&amp;#x3060;&amp;#x304B;&amp;#x9593;&amp;#x629C;&amp;#x3051;&amp;#x306B;&amp;#x306A;&amp;#x3063;&amp;#x3066;&amp;#x3057;&amp;#x307E;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002; WorkStyle&amp;#x304C;&amp;#x30D7;&amp;#x30ED;&amp;#x30B8;&amp;#x30A7;&amp;#x30AF;&amp;#x30C8;&amp;#x306E;&amp;#x4E00;&amp;#x90E8;&amp;#x3067;&amp;#x6216;&amp;#x308B;&amp;#x5834;&amp;#x5408;&amp;#x306A;&amp;#x3093;&amp;#x304B;&amp;#x306F;&amp;#x3057;&amp;#x3063;&amp;#x304F;&amp;#x308A;&amp;#x304F;&amp;#x308B;&amp;#x3068;&amp;#x601D;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x304C;&amp;#x3002;
  19. DRY&amp;#x306E;&amp;#x539F;&amp;#x5247;&amp;#x304C;&amp;#x3042;&amp;#x308B;&amp;#x306E;&amp;#x3067;&amp;#x3001;&amp;#x7D50;&amp;#x69CB;&amp;#x7D30;&amp;#x304B;&amp;#x3044;Model&amp;#x306B;&amp;#x306A;&amp;#x308A;&amp;#x307E;&amp;#x3059;&amp;#x3002; class META&amp;#x3068;&amp;#x3044;&amp;#x3046;&amp;#x90E8;&amp;#x5206;&amp;#x306B;&amp;#x306F;&amp;#x3044;&amp;#x308D;&amp;#x3044;&amp;#x308D;&amp;#x8A18;&amp;#x8FF0;&amp;#x3059;&amp;#x308B;&amp;#x3053;&amp;#x3068;&amp;#x304C;&amp;#x51FA;&amp;#x6765;&amp;#x307E;&amp;#x3059;&amp;#xFF08;db&amp;#x306E;&amp;#x8A2D;&amp;#x5B9A;&amp;#x3068;&amp;#x95A2;&amp;#x4FC2;&amp;#x306E;&amp;#x306A;&amp;#x3044;&amp;#x30D0;&amp;#x30EA;&amp;#x30C7;&amp;#x30FC;&amp;#x30BF;&amp;#x3068;&amp;#x304B;&amp;#xFF09;&amp;#x3002; TurboGears&amp;#x3068;&amp;#x304B;&amp;#x898B;&amp;#x305F;&amp;#x3053;&amp;#x3068;&amp;#x3042;&amp;#x308B;&amp;#x4EBA;&amp;#x306F;&amp;#x4F3C;&amp;#x3066;&amp;#x308B;&amp;#x3068;&amp;#x611F;&amp;#x3058;&amp;#x308B;&amp;#x3067;&amp;#x3057;&amp;#x3087;&amp;#x3046;&amp;#x3002; PK&amp;#x306F;&amp;#x81EA;&amp;#x52D5;&amp;#x7684;&amp;#x306B;id&amp;#x3068;&amp;#x3044;&amp;#x3046;&amp;#x5909;&amp;#x6570;&amp;#x540D;&amp;#x3067;&amp;#x751F;&amp;#x6210;&amp;#x3055;&amp;#x308C;&amp;#x307E;&amp;#x3059;&amp;#x3002; DRY&amp;#x306F;&amp;#x539F;&amp;#x5247;&amp;#x306A;&amp;#x306E;&amp;#x3067;&amp;#x3001;&amp;#x30C6;&amp;#x30FC;&amp;#x30D6;&amp;#x30EB;&amp;#x3084;&amp;#x30AB;&amp;#x30E9;&amp;#x30E0;&amp;#x306E;&amp;#x540D;&amp;#x524D;&amp;#x3068;&amp;#x306E;&amp;#x5BFE;&amp;#x5FDC;&amp;#x306F;&amp;#x5909;&amp;#x66F4;&amp;#x3059;&amp;#x308B;&amp;#x3053;&amp;#x3068;&amp;#x3082;&amp;#x51FA;&amp;#x6765;&amp;#x307E;&amp;#x3059;&amp;#x3002;
  20. &amp;#x30A4;&amp;#x30F3;&amp;#x30B9;&amp;#x30C8;&amp;#x30FC;&amp;#x30EB;&amp;#x3092;&amp;#x884C;&amp;#x3046;&amp;#x3068;&amp;#x3001;&amp;#x30C7;&amp;#x30FC;&amp;#x30BF;&amp;#x30D9;&amp;#x30FC;&amp;#x30B9;&amp;#x306B;Model&amp;#x3067;&amp;#x5B9A;&amp;#x7FA9;&amp;#x3057;&amp;#x305F;&amp;#x30C6;&amp;#x30FC;&amp;#x30D6;&amp;#x30EB;&amp;#x304C;&amp;#x4F5C;&amp;#x6210;&amp;#x3055;&amp;#x308C;&amp;#x307E;&amp;#x3059;&amp;#x3002; &amp;#x540C;&amp;#x6642;&amp;#x306B;&amp;#x3001;&amp;#x30A2;&amp;#x30D7;&amp;#x30EA;&amp;#x30B1;&amp;#x30FC;&amp;#x30B7;&amp;#x30E7;&amp;#x30F3;&amp;#x60C5;&amp;#x5831;&amp;#x304C;Django&amp;#x30B3;&amp;#x30A2;&amp;#x30C6;&amp;#x30FC;&amp;#x30D6;&amp;#x30EB;&amp;#x306B;&amp;#x767B;&amp;#x9332;&amp;#x3055;&amp;#x308C;&amp;#x307E;&amp;#x3059;&amp;#x3002; Index&amp;#x306F;&amp;#x81EA;&amp;#x52D5;&amp;#x3067;&amp;#x306F;&amp;#x767B;&amp;#x9332;&amp;#x3055;&amp;#x308C;&amp;#x306A;&amp;#x3044;&amp;#x306E;&amp;#x3067;&amp;#x3001;sqlindexes&amp;#x3092;&amp;#x5F15;&amp;#x6570;&amp;#x306B;&amp;#x4E0E;&amp;#x3048;&amp;#x3066;sql&amp;#x3092;&amp;#x51FA;&amp;#x529B;&amp;#x3055;&amp;#x305B;&amp;#x3066;&amp;#x3001;&amp;#x624B;&amp;#x52D5;&amp;#x3067;&amp;#x5B9F;&amp;#x884C;&amp;#x3002; &amp;#x30C6;&amp;#x30FC;&amp;#x30D6;&amp;#x30EB;&amp;#x540D;&amp;#x306F;&amp;#x30A2;&amp;#x30D7;&amp;#x30EA;&amp;#x30B1;&amp;#x30FC;&amp;#x30B7;&amp;#x30E7;&amp;#x30F3;&amp;#x540D;&amp;#x3068;Model&amp;#x540D;&amp;#xFF08;&amp;#x8907;&amp;#x6570;&amp;#x5F62;&amp;#xFF09;&amp;#x3067;&amp;#x4F5C;&amp;#x6210;&amp;#x3055;&amp;#x308C;&amp;#x308B;&amp;#x3002;
  21. &amp;#x3053;&amp;#x3053;&amp;#x307E;&amp;#x3067;&amp;#x3067;&amp;#x3001;O/R&amp;#x304C;&amp;#x4F7F;&amp;#x7528;&amp;#x53EF;&amp;#x80FD;&amp;#x306B;&amp;#x306A;&amp;#x3063;&amp;#x3066;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x306E;&amp;#x3067;&amp;#x3001;Python&amp;#x30B9;&amp;#x30AF;&amp;#x30EA;&amp;#x30D7;&amp;#x30C8;&amp;#x304B;&amp;#x3089;&amp;#x4F7F;&amp;#x3063;&amp;#x3066;&amp;#x307F;&amp;#x307E;&amp;#x3059;&amp;#x3002; DJANGO_SETTINGS_MODULE&amp;#x3068;&amp;#x3044;&amp;#x3046;&amp;#x74B0;&amp;#x5883;&amp;#x5909;&amp;#x6570;&amp;#x3092;&amp;#x30BB;&amp;#x30C3;&amp;#x30C8;&amp;#x3057;&amp;#x3066;&amp;#x304A;&amp;#x304F;&amp;#x5FC5;&amp;#x8981;&amp;#x304C;&amp;#x3042;&amp;#x308A;&amp;#x307E;&amp;#x3059;&amp;#x3002;
  22. urls.py&amp;#x306F;&amp;#x30A2;&amp;#x30D7;&amp;#x30EA;&amp;#x30B1;&amp;#x30FC;&amp;#x30B7;&amp;#x30E7;&amp;#x30F3;&amp;#x6BCE;&amp;#x306B;&amp;#x5206;&amp;#x3051;&amp;#x305F;&amp;#x3044;&amp;#x306E;&amp;#x3067;&amp;#x3001;&amp;#x30D7;&amp;#x30ED;&amp;#x30B8;&amp;#x30A7;&amp;#x30AF;&amp;#x30C8;&amp;#x76F4;&amp;#x4E0B;&amp;#x306E;urls.py&amp;#x306F;&amp;#x30A4;&amp;#x30F3;&amp;#x30AF;&amp;#x30EB;&amp;#x30FC;&amp;#x30C9;&amp;#x3092;&amp;#x884C;&amp;#x3063;&amp;#x3066;&amp;#x3044;&amp;#x308B;&amp;#x3060;&amp;#x3051;&amp;#x3067;&amp;#x3059;&amp;#x3002; &amp;#x53D6;&amp;#x5F97;&amp;#x3068;&amp;#x66F4;&amp;#x65B0;&amp;#x3092;&amp;#x540C;&amp;#x4E00;URL&amp;#x306B;&amp;#x3059;&amp;#x308B;&amp;#x3068;&amp;#x3001;&amp;#x66F4;&amp;#x65B0;&amp;#x6642;&amp;#x306B;&amp;#x30A8;&amp;#x30E9;&amp;#x30FC;&amp;#x304C;&amp;#x51FA;&amp;#x305F;&amp;#x969B;&amp;#x306E;&amp;#x51E6;&amp;#x7406;&amp;#x3067;&amp;#x53D6;&amp;#x5F97;&amp;#x3068;&amp;#x540C;&amp;#x3058;&amp;#x7269;&amp;#x3092;&amp;#x4F7F;&amp;#x3044;&amp;#x56DE;&amp;#x305B;&amp;#x308B;&amp;#x306E;&amp;#x3067;&amp;#x3001;&amp;#x540C;&amp;#x4E00;&amp;#x306B;&amp;#x3057;&amp;#x307E;&amp;#x3059;&amp;#x3002; &amp;#x53D6;&amp;#x5F97;&amp;#x3068;&amp;#x66F4;&amp;#x65B0;&amp;#x306E;&amp;#x3069;&amp;#x3061;&amp;#x3089;&amp;#x3067;&amp;#x547C;&amp;#x3070;&amp;#x308C;&amp;#x305F;&amp;#x306E;&amp;#x304B;&amp;#x3092;&amp;#x5224;&amp;#x5225;&amp;#x3059;&amp;#x308B;&amp;#x306E;&amp;#x306F;GET&amp;#x304B;POST&amp;#x304B;&amp;#x3092;&amp;#x5229;&amp;#x7528;&amp;#x3057;&amp;#x307E;&amp;#x3059;&amp;#x3002;
  23. &amp;#x540D;&amp;#x524D;&amp;#x306F;&amp;#x30D3;&amp;#x30E5;&amp;#x30FC;&amp;#x3067;&amp;#x3059;&amp;#x304C;&amp;#x3001;&amp;#x5B9F;&amp;#x969B;&amp;#x306F;&amp;#x30B3;&amp;#x30F3;&amp;#x30C8;&amp;#x30ED;&amp;#x30FC;&amp;#x30E9;&amp;#x3067;&amp;#x3059;&amp;#x3002; URL&amp;#x306E;&amp;#x3068;&amp;#x3053;&amp;#x308D;&amp;#x3067;task_id&amp;#x3068;&amp;#x306A;&amp;#x3063;&amp;#x3066;&amp;#x3044;&amp;#x305F;&amp;#x7269;&amp;#x304C;&amp;#x3001;edit_task&amp;#x306E;task_id&amp;#x306B;&amp;#x6E21;&amp;#x3055;&amp;#x308C;&amp;#x307E;&amp;#x3059;&amp;#x3002;&amp;#x7B2C;&amp;#x4E00;&amp;#x5F15;&amp;#x6570;&amp;#x306E;request&amp;#x3068;&amp;#x3044;&amp;#x3046;&amp;#x30AA;&amp;#x30D6;&amp;#x30B8;&amp;#x30A7;&amp;#x30AF;&amp;#x30C8;&amp;#x306F;&amp;#x540D;&amp;#x524D;&amp;#x304B;&amp;#x3089;&amp;#x60F3;&amp;#x50CF;&amp;#x3067;&amp;#x304D;&amp;#x308B;&amp;#x3068;&amp;#x304A;&amp;#x308A;&amp;#x306E;&amp;#x7269;&amp;#x3067;&amp;#x3059;&amp;#x3002;render_to_response&amp;#x3068;&amp;#x3044;&amp;#x3046;&amp;#x30D5;&amp;#x30A1;&amp;#x30F3;&amp;#x30AF;&amp;#x30B7;&amp;#x30E7;&amp;#x30F3;&amp;#x306E;&amp;#x7D50;&amp;#x679C;&amp;#x3092;&amp;#x8FD4;&amp;#x3057;&amp;#x3066;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x304C;&amp;#x3001;&amp;#x3053;&amp;#x308C;&amp;#x306F;django&amp;#x306E;&amp;#x30C7;&amp;#x30D5;&amp;#x30A9;&amp;#x30EB;&amp;#x30C8;&amp;#x30C6;&amp;#x30F3;&amp;#x30D7;&amp;#x30EC;&amp;#x30FC;&amp;#x30C8;&amp;#x30B7;&amp;#x30B9;&amp;#x30C6;&amp;#x30E0;&amp;#x3092;&amp;#x4F7F;&amp;#x7528;&amp;#x3057;&amp;#x3066;&amp;#x30EC;&amp;#x30B9;&amp;#x30DD;&amp;#x30F3;&amp;#x30B9;&amp;#x3092;&amp;#x8FD4;&amp;#x3059;&amp;#x30B7;&amp;#x30E7;&amp;#x30FC;&amp;#x30C8;&amp;#x30AB;&amp;#x30C3;&amp;#x30C8;&amp;#x30D5;&amp;#x30A1;&amp;#x30F3;&amp;#x30AF;&amp;#x30B7;&amp;#x30E7;&amp;#x30F3;&amp;#x3067;&amp;#x3059;&amp;#x3002;&amp;#x3068;&amp;#x306B;&amp;#x304B;&amp;#x304F;&amp;#x30EC;&amp;#x30B9;&amp;#x30DD;&amp;#x30F3;&amp;#x30B9;&amp;#x3092;&amp;#x8FD4;&amp;#x305B;&amp;#x3070;&amp;#x3088;&amp;#x3044;&amp;#x306E;&amp;#x3067;&amp;#x3001;&amp;#x5225;&amp;#x306E;&amp;#x30C6;&amp;#x30F3;&amp;#x30D7;&amp;#x30EC;&amp;#x30FC;&amp;#x30C8;&amp;#x30B7;&amp;#x30B9;&amp;#x30C6;&amp;#x30E0;&amp;#x3092;&amp;#x4F7F;&amp;#x7528;&amp;#x3059;&amp;#x308B;&amp;#x306E;&amp;#x3082;&amp;#x3001;XML&amp;#x3084;PDF&amp;#x3092;&amp;#x8FD4;&amp;#x3059;&amp;#x306E;&amp;#x3082;&amp;#x81EA;&amp;#x7531;&amp;#x3067;&amp;#x3059;&amp;#x3002; &amp;#x30D3;&amp;#x30E5;&amp;#x30FC;&amp;#x306F;&amp;#x3001;&amp;#x30EA;&amp;#x30AF;&amp;#x30A8;&amp;#x30B9;&amp;#x30C8;&amp;#x3092;&amp;#x53D7;&amp;#x3051;&amp;#x53D6;&amp;#x3063;&amp;#x3066;&amp;#x51E6;&amp;#x7406;&amp;#x3092;&amp;#x3057;&amp;#x3066;&amp;#x30EC;&amp;#x30B9;&amp;#x30DD;&amp;#x30F3;&amp;#x30B9;&amp;#x3092;&amp;#x8FD4;&amp;#x3059;&amp;#x3002;&amp;#x305D;&amp;#x308C;&amp;#x3060;&amp;#x3051;&amp;#x306E;&amp;#x3082;&amp;#x306E;&amp;#x3067;&amp;#x3059;&amp;#x3002;
  24. DRY&amp;#x306E;&amp;#x539F;&amp;#x5247;&amp;#x304C;&amp;#x3042;&amp;#x308B;&amp;#x306E;&amp;#x3067;&amp;#x3001;&amp;#x5165;&amp;#x529B;&amp;#x5024;validate&amp;#x3082;Model&amp;#x306E;&amp;#x60C5;&amp;#x5831;&amp;#x304B;&amp;#x3089;&amp;#x884C;&amp;#x308F;&amp;#x308C;&amp;#x307E;&amp;#x3059;&amp;#x3002; &amp;#x81EA;&amp;#x52D5;&amp;#x30DE;&amp;#x30CB;&amp;#x30D4;&amp;#x30E5;&amp;#x30EC;&amp;#x30FC;&amp;#x30BF;&amp;#x306F;&amp;#x8FFD;&amp;#x52A0;&amp;#x7528;&amp;#x3068;&amp;#x5909;&amp;#x66F4;&amp;#x7528;&amp;#x306E;&amp;#xFF12;&amp;#x7A2E;&amp;#x985E;&amp;#x304C;&amp;#x3042;&amp;#x308A;&amp;#x307E;&amp;#x3059;&amp;#x3002; Model&amp;#x306B;&amp;#x8A18;&amp;#x8FF0;&amp;#x3057;&amp;#x305F;&amp;#x5B9A;&amp;#x7FA9;&amp;#x3068;Model&amp;#x306E;META&amp;#x306B;&amp;#x8A18;&amp;#x8FF0;&amp;#x3057;&amp;#x305F;&amp;#x30AB;&amp;#x30B9;&amp;#x30BF;&amp;#x30E0;&amp;#x30D0;&amp;#x30EA;&amp;#x30C7;&amp;#x30FC;&amp;#x30BF;&amp;#x304C;&amp;#x547C;&amp;#x3073;&amp;#x51FA;&amp;#x3055;&amp;#x308C;&amp;#x307E;&amp;#x3059;&amp;#x3002; &amp;#x9762;&amp;#x767D;&amp;#x3044;&amp;#x306E;&amp;#x306F;&amp;#x5024;&amp;#x3092;&amp;#x8A70;&amp;#x3081;&amp;#x76F4;&amp;#x3055;&amp;#x306A;&amp;#x304F;&amp;#x3066;&amp;#x3082;&amp;#x305D;&amp;#x306E;&amp;#x307E;&amp;#x307E;&amp;#x4FDD;&amp;#x5B58;&amp;#x3067;&amp;#x304D;&amp;#x308B;&amp;#x3053;&amp;#x3068;&amp;#x3067;&amp;#x3059;&amp;#x3002;&amp;#x5FB9;&amp;#x5E95;&amp;#x3057;&amp;#x3066;&amp;#x7121;&amp;#x99C4;&amp;#x3092;&amp;#x7701;&amp;#x3044;&amp;#x3066;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002;
  25. &amp;#x73FE;&amp;#x5B9F;&amp;#x7684;&amp;#x306B;&amp;#x306F;Model&amp;#x3068;&amp;#xFF11;&amp;#x5BFE;&amp;#xFF11;&amp;#x306E;&amp;#x30C7;&amp;#x30FC;&amp;#x30BF;&amp;#x304C;&amp;#x30B5;&amp;#x30D6;&amp;#x30DF;&amp;#x30C3;&amp;#x30C8;&amp;#x3055;&amp;#x308C;&amp;#x308B;&amp;#x3053;&amp;#x3068;&amp;#x306F;&amp;#x5C11;&amp;#x306A;&amp;#x3044;&amp;#x306E;&amp;#x3067;&amp;#x3001;&amp;#x30AB;&amp;#x30B9;&amp;#x30BF;&amp;#x30E0;Manipulator&amp;#x3092;&amp;#x4F5C;&amp;#x6210;&amp;#x3057;&amp;#x307E;&amp;#x3059;&amp;#x3002; &amp;#x81EA;&amp;#x52D5;&amp;#x3092;&amp;#x3044;&amp;#x304F;&amp;#x3064;&amp;#x304B;&amp;#x901A;&amp;#x3059;&amp;#x3068;&amp;#x3044;&amp;#x3046;&amp;#x624B;&amp;#x3082;&amp;#x3042;&amp;#x308B;&amp;#x3068;&amp;#x601D;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x304C;&amp;#x3001;&amp;#x3044;&amp;#x307E;&amp;#x306E;&amp;#x3068;&amp;#x3053;&amp;#x308D;&amp;#x3069;&amp;#x3046;&amp;#x3059;&amp;#x308B;&amp;#x306E;&amp;#x304C;&amp;#x3088;&amp;#x3044;&amp;#x306E;&amp;#x304B;&amp;#x308F;&amp;#x304B;&amp;#x308A;&amp;#x307E;&amp;#x305B;&amp;#x3093;&amp;#x3002; &amp;#x3042;&amp;#x3068;&amp;#x3001;&amp;#x3053;&amp;#x306E;&amp;#x4F8B;&amp;#x3067;&amp;#x4F7F;&amp;#x7528;&amp;#x3057;&amp;#x3066;&amp;#x3044;&amp;#x308B;isValidTagName&amp;#x306F;&amp;#x3053;&amp;#x3053;&amp;#x3067;&amp;#x306F;&amp;#x306A;&amp;#x304F;&amp;#x3066;Model&amp;#x306E;META&amp;#x306B;&amp;#x8A18;&amp;#x8FF0;&amp;#x3057;&amp;#x3066;&amp;#x5B9F;&amp;#x969B;&amp;#x306F;&amp;#x554F;&amp;#x984C;&amp;#x3042;&amp;#x308A;&amp;#x307E;&amp;#x305B;&amp;#x3093;&amp;#x3002; &amp;#x4F7F;&amp;#x7528;&amp;#x65B9;&amp;#x6CD5;&amp;#x306F;&amp;#x7C21;&amp;#x5358;&amp;#x3067;&amp;#x3059;&amp;#x3002;&amp;#x81EA;&amp;#x52D5;&amp;#x306E;&amp;#x7269;&amp;#x3068;&amp;#x306E;&amp;#x9055;&amp;#x3044;&amp;#x306F;&amp;#x3001;&amp;#x30AB;&amp;#x30B9;&amp;#x30BF;&amp;#x30E0;Manipulator&amp;#x3092;&amp;#x4F7F;&amp;#x3063;&amp;#x3066;&amp;#x306E;&amp;#x4FDD;&amp;#x5B58;&amp;#x304C;&amp;#x51FA;&amp;#x6765;&amp;#x306A;&amp;#x3044;&amp;#x3053;&amp;#x3068;&amp;#x304F;&amp;#x3089;&amp;#x3044;&amp;#x3067;&amp;#x3057;&amp;#x3087;&amp;#x3046;&amp;#x3002;
  26. &amp;#x8A2D;&amp;#x7F6E;&amp;#x30C7;&amp;#x30A3;&amp;#x30EC;&amp;#x30AF;&amp;#x30C8;&amp;#x30EA;&amp;#x306F;&amp;#x8907;&amp;#x6570;&amp;#x8A2D;&amp;#x5B9A;&amp;#x53EF;&amp;#x80FD;&amp;#x3067;&amp;#x3059;&amp;#x3002; &amp;#x4ECA;&amp;#x56DE;&amp;#x306F;&amp;#x7D99;&amp;#x627F;&amp;#x3092;&amp;#x4F7F;&amp;#x3063;&amp;#x305F;&amp;#x4F8B;&amp;#x3067;&amp;#x3044;&amp;#x304D;&amp;#x307E;&amp;#x3059;&amp;#x3002; &amp;#x307E;&amp;#x305A;&amp;#x4F5C;&amp;#x6210;&amp;#x3057;&amp;#x305F;&amp;#x306E;&amp;#x306F;&amp;#x3001;&amp;#x30C6;&amp;#x30F3;&amp;#x30D7;&amp;#x30EC;&amp;#x30FC;&amp;#x30C8;&amp;#x30C7;&amp;#x30A3;&amp;#x30EC;&amp;#x30AF;&amp;#x30C8;&amp;#x30EA;&amp;#x306E;&amp;#x4E0B;&amp;#x306E;workstyle/TaskForm.html&amp;#x3067;&amp;#x3059;&amp;#x3002;&amp;#x30A2;&amp;#x30D7;&amp;#x30EA;&amp;#x30B1;&amp;#x30FC;&amp;#x30B7;&amp;#x30E7;&amp;#x30F3;&amp;#x540D;&amp;#x3092;&amp;#x5165;&amp;#x308C;&amp;#x3066;&amp;#x3044;&amp;#x308B;&amp;#x306E;&amp;#x304C;&amp;#x30DD;&amp;#x30A4;&amp;#x30F3;&amp;#x30C8;&amp;#x3067;&amp;#x3059;&amp;#xFF08;&amp;#x30D3;&amp;#x30E5;&amp;#x30FC;&amp;#x304B;&amp;#x3089;&amp;#x306F;workstyle/TaskForm&amp;#x3068;&amp;#x6D0B;&amp;#x821E;&amp;#x306E;&amp;#x3067;&amp;#x3059;&amp;#x304C;&amp;#x3001;&amp;#x3053;&amp;#x3046;&amp;#x3059;&amp;#x308C;&amp;#x3070;&amp;#x91CD;&amp;#x8907;&amp;#x3057;&amp;#x306B;&amp;#x304F;&amp;#x304F;&amp;#x306A;&amp;#x308A;&amp;#x307E;&amp;#x3059;&amp;#xFF09;&amp;#x3002; &amp;#x30C6;&amp;#x30F3;&amp;#x30D7;&amp;#x30EC;&amp;#x30FC;&amp;#x30C8;&amp;#x306E;&amp;#x30C7;&amp;#x30D5;&amp;#x30A9;&amp;#x30EB;&amp;#x30C8;&amp;#x306E;&amp;#x62E1;&amp;#x5F35;&amp;#x5B50;&amp;#x306F;.html&amp;#x3067;&amp;#x3059;&amp;#xFF08;&amp;#x5909;&amp;#x66F4;&amp;#x53EF;&amp;#x80FD;&amp;#xFF09;&amp;#x3002; {%&amp;#x304C;if&amp;#x6587;&amp;#x306A;&amp;#x3069;&amp;#x306E;&amp;#x6587;&amp;#x3092;&amp;#x8868;&amp;#x3057;&amp;#x3001;{{&amp;#x304C;&amp;#x5909;&amp;#x6570;&amp;#x306E;&amp;#x51FA;&amp;#x529B;&amp;#x3067;&amp;#x3059;&amp;#x3002; for&amp;#x30EB;&amp;#x30FC;&amp;#x30D7;&amp;#x3084;&amp;#x30EB;&amp;#x30FC;&amp;#x30D7;&amp;#x30AB;&amp;#x30A6;&amp;#x30F3;&amp;#x30BF;&amp;#x30FC;&amp;#x7B49;&amp;#x3001;&amp;#x5927;&amp;#x62B5;&amp;#x306E;&amp;#x5FC5;&amp;#x8981;&amp;#x306A;&amp;#x7269;&amp;#x306F;&amp;#x305D;&amp;#x308D;&amp;#x3063;&amp;#x3066;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002;&amp;#x30D5;&amp;#x30A3;&amp;#x30EB;&amp;#x30BF;&amp;#x30FC;&amp;#x3082;&amp;#x7D50;&amp;#x69CB;&amp;#x306A;&amp;#x6570;&amp;#x3042;&amp;#x308A;&amp;#x307E;&amp;#x3059;&amp;#x3002; &amp;#x7D99;&amp;#x627F;&amp;#x306F;&amp;#x3001;&amp;#x30D9;&amp;#x30FC;&amp;#x30B9;&amp;#x306B;&amp;#x3042;&amp;#x308B;&amp;#x30D6;&amp;#x30ED;&amp;#x30C3;&amp;#x30AF;&amp;#x3092;&amp;#x7D99;&amp;#x627F;&amp;#x5148;&amp;#x306E;&amp;#x8A18;&amp;#x8FF0;&amp;#x306B;&amp;#x7F6E;&amp;#x304D;&amp;#x63DB;&amp;#x3048;&amp;#x307E;&amp;#x3059;&amp;#xFF08;&amp;#x7D99;&amp;#x627F;&amp;#x5148;&amp;#x3067;&amp;#x306F;&amp;#x30D6;&amp;#x30ED;&amp;#x30C3;&amp;#x30AF;&amp;#x4EE5;&amp;#x5916;&amp;#x306F;&amp;#x4E0D;&amp;#x8981;&amp;#xFF09;&amp;#x3002; &amp;#xFF08;&amp;#x4F59;&amp;#x88D5;&amp;#x304C;&amp;#x3042;&amp;#x3063;&amp;#x305F;&amp;#x3089;&amp;#x30B3;&amp;#x30FC;&amp;#x30C9;&amp;#xFF09;
  27. &amp;#x30E2;&amp;#x30B8;&amp;#x30E5;&amp;#x30FC;&amp;#x30EB;&amp;#x3067;Library&amp;#x306B;&amp;#x30EC;&amp;#x30B8;&amp;#x30B9;&amp;#x30C8;&amp;#x3057;&amp;#x3066;&amp;#x3001;&amp;#x30D3;&amp;#x30E5;&amp;#x30FC;&amp;#x3067;&amp;#x3082;&amp;#x30A4;&amp;#x30F3;&amp;#x30DD;&amp;#x30FC;&amp;#x30C8;&amp;#x3092;&amp;#x3057;&amp;#x3001;&amp;#x30C6;&amp;#x30F3;&amp;#x30D7;&amp;#x30EC;&amp;#x30FC;&amp;#x30C8;&amp;#x3067;&amp;#x3082;&amp;#x30ED;&amp;#x30FC;&amp;#x30C9;&amp;#x3092;&amp;#x3057;&amp;#x307E;&amp;#x3059;&amp;#x3002; &amp;#x3061;&amp;#x3087;&amp;#x3063;&amp;#x3068;&amp;#x9762;&amp;#x5012;&amp;#x3067;&amp;#x3059;&amp;#x304C;&amp;#x3001;&amp;#x4FBF;&amp;#x5229;&amp;#x306A;&amp;#x6A5F;&amp;#x80FD;&amp;#x3067;&amp;#x3059;&amp;#x3002;
  28. &amp;#x672C;&amp;#x6765;&amp;#x306F;&amp;#x5148;&amp;#x3067;&amp;#x3059;&amp;#x304C;&amp;#x30FB;&amp;#x30FB;&amp;#x30FB;&amp;#x3002; greenpeace&amp;#x306E;melt&amp;#x3068;&amp;#x3044;&amp;#x3046;&amp;#x30D7;&amp;#x30ED;&amp;#x30B8;&amp;#x30A7;&amp;#x30AF;&amp;#x30C8;&amp;#x3067;&amp;#x306F;twil&amp;#x3068;&amp;#x3044;&amp;#x3046;&amp;#x30E9;&amp;#x30A4;&amp;#x30D6;&amp;#x30E9;&amp;#x30EA;&amp;#x3092;&amp;#x5229;&amp;#x7528;&amp;#x3057;&amp;#x3066;&amp;#x30C6;&amp;#x30B9;&amp;#x30C8;&amp;#x3092;&amp;#x3057;&amp;#x3066;&amp;#x3044;&amp;#x308B;&amp;#x6A21;&amp;#x69D8;&amp;#x3067;&amp;#x3059;&amp;#x3002; &amp;#x3061;&amp;#x3087;&amp;#x3063;&amp;#x3068;&amp;#x307E;&amp;#x3060;&amp;#x3044;&amp;#x308D;&amp;#x3044;&amp;#x308D;&amp;#x8ABF;&amp;#x67FB;&amp;#x4E0D;&amp;#x8DB3;&amp;#x3067;&amp;#x3059;&amp;#x3002;
  29. &amp;#x653E;&amp;#x7F6E;&amp;#x3057;&amp;#x3066;&amp;#x3042;&amp;#x308B;&amp;#x30C1;&amp;#x30E5;&amp;#x30FC;&amp;#x30C8;&amp;#x30EA;&amp;#x30A2;&amp;#x30EB;&amp;#x7B49;&amp;#x306E;&amp;#x8A33;&amp;#x306F;&amp;#x3001;&amp;#x30D0;&amp;#x30FC;&amp;#x30B8;&amp;#x30E7;&amp;#x30F3;1.0&amp;#x524D;&amp;#x5F8C;&amp;#x3067;&amp;#x624B;&amp;#x3092;&amp;#x5165;&amp;#x308C;&amp;#x3088;&amp;#x3046;&amp;#x3068;&amp;#x8003;&amp;#x3048;&amp;#x3066;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002;
  30. &amp;#x4EE5;&amp;#x4E0A;&amp;#x3001;&amp;#x99C6;&amp;#x3051;&amp;#x8DB3;&amp;#x3067;&amp;#x3059;&amp;#x304C;&amp;#x3001;&amp;#x7D39;&amp;#x4ECB;&amp;#x81EA;&amp;#x4F53;&amp;#x306F;&amp;#x7D42;&amp;#x308F;&amp;#x308A;&amp;#x307E;&amp;#x3059;&amp;#x3002;