SlideShare a Scribd company logo
1 of 77
Download to read offline
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

How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesThousandEyes
 
Irene Moetsana-Moeng: Stakeholders in Cybersecurity: Collaborative Defence fo...
Irene Moetsana-Moeng: Stakeholders in Cybersecurity: Collaborative Defence fo...Irene Moetsana-Moeng: Stakeholders in Cybersecurity: Collaborative Defence fo...
Irene Moetsana-Moeng: Stakeholders in Cybersecurity: Collaborative Defence fo...itnewsafrica
 
Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...itnewsafrica
 
QCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesQCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesBernd Ruecker
 
Infrared simulation and processing on Nvidia platforms
Infrared simulation and processing on Nvidia platformsInfrared simulation and processing on Nvidia platforms
Infrared simulation and processing on Nvidia platformsYoss Cohen
 
Digital Tools & AI in Career Development
Digital Tools & AI in Career DevelopmentDigital Tools & AI in Career Development
Digital Tools & AI in Career DevelopmentMahmoud Rabie
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityIES VE
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsNathaniel Shimoni
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...Wes McKinney
 
React JS; all concepts. Contains React Features, JSX, functional & Class comp...
React JS; all concepts. Contains React Features, JSX, functional & Class comp...React JS; all concepts. Contains React Features, JSX, functional & Class comp...
React JS; all concepts. Contains React Features, JSX, functional & Class comp...Karmanjay Verma
 
Microservices, Docker deploy and Microservices source code in C#
Microservices, Docker deploy and Microservices source code in C#Microservices, Docker deploy and Microservices source code in C#
Microservices, Docker deploy and Microservices source code in C#Karmanjay Verma
 
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS:  6 Ways to Automate Your Data IntegrationBridging Between CAD & GIS:  6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integrationmarketing932765
 
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesAssure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesThousandEyes
 
Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...
Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...
Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...Jeffrey Haguewood
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentPim van der Noll
 
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotesMuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotesManik S Magar
 
Landscape Catalogue 2024 Australia-1.pdf
Landscape Catalogue 2024 Australia-1.pdfLandscape Catalogue 2024 Australia-1.pdf
Landscape Catalogue 2024 Australia-1.pdfAarwolf Industries LLC
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Hiroshi SHIBATA
 
Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)Kaya Weers
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersNicole Novielli
 

Recently uploaded (20)

How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
 
Irene Moetsana-Moeng: Stakeholders in Cybersecurity: Collaborative Defence fo...
Irene Moetsana-Moeng: Stakeholders in Cybersecurity: Collaborative Defence fo...Irene Moetsana-Moeng: Stakeholders in Cybersecurity: Collaborative Defence fo...
Irene Moetsana-Moeng: Stakeholders in Cybersecurity: Collaborative Defence fo...
 
Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...
 
QCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesQCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architectures
 
Infrared simulation and processing on Nvidia platforms
Infrared simulation and processing on Nvidia platformsInfrared simulation and processing on Nvidia platforms
Infrared simulation and processing on Nvidia platforms
 
Digital Tools & AI in Career Development
Digital Tools & AI in Career DevelopmentDigital Tools & AI in Career Development
Digital Tools & AI in Career Development
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a reality
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directions
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
 
React JS; all concepts. Contains React Features, JSX, functional & Class comp...
React JS; all concepts. Contains React Features, JSX, functional & Class comp...React JS; all concepts. Contains React Features, JSX, functional & Class comp...
React JS; all concepts. Contains React Features, JSX, functional & Class comp...
 
Microservices, Docker deploy and Microservices source code in C#
Microservices, Docker deploy and Microservices source code in C#Microservices, Docker deploy and Microservices source code in C#
Microservices, Docker deploy and Microservices source code in C#
 
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS:  6 Ways to Automate Your Data IntegrationBridging Between CAD & GIS:  6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integration
 
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesAssure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
 
Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...
Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...
Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
 
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotesMuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
 
Landscape Catalogue 2024 Australia-1.pdf
Landscape Catalogue 2024 Australia-1.pdfLandscape Catalogue 2024 Australia-1.pdf
Landscape Catalogue 2024 Australia-1.pdf
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024
 
Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software Developers
 

伝説のギタリストじゃない方の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;