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

                   Rails



discography
www.ljworld.com

www.lawrence.com

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

Automatic Admin Interface

Elegant URL Design

Template

Cache

i18n
O/R Mapper
O/R Mapper
DRY

Model
O/R Mapper
DRY

Model

        Model   Database
O/R Mapper
DRY

Model

         Model                Database

 SQLObject

 SELECT           keyword args

 ForeignKey           model

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




rails    scafford

TurboGears      catwalk
Automatic Admin I/F
model




rails    scafford

TurboGears      catwalk
Automatic Admin I/F
model




rails    scafford

TurboGears      catwalk
Elegant URL Desgin
Elegant URL Desgin
      URL




emacs PROJECT/apps/project/urls.py

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


emacs PROJECT/apps/project/views.py

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



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

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


emacs PROJECT/apps/project/views.py

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



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

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


emacs PROJECT/apps/project/views.py

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




emacs PROJECT/apps/project/urls.py

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


emacs PROJECT/apps/project/views.py

def edit(request, task_id) :
    do_somthing
Template
Template


                  {{ XXX:escape }}


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


                  {{ XXX:escape }}


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


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

HTTP
Cache
cache                       locmem(

                     WorkStyle

           sqlite3                    SQL 5   O/R

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

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

          1000request 10concurrency
Cache
 cache                       locmem(

                      WorkStyle

            sqlite3                    SQL 5    O/R

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

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

           1000request 10concurrency




               normal apache locmem

totaltime      114.98        20.95       5.05

rec/sec          8.7         47.72       197.82
Cache
 cache                       locmem(

                      WorkStyle

            sqlite3                    SQL 5    O/R

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

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

           1000request 10concurrency                        total time       Request/sec
                                                      200

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

                      settings.py

Automatic Admin I/F
i18n
    po

                                    settings.py

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


            {% trans “message” %}

template
i18n
    po

                                         settings.py

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


            DJANGO_HOME/bin/compile-messages.py

compile
i18n
po

                                     settings.py

Automatic Admin I/F

         > emacs settings.py

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




Apache2.x+mod_python3.x

fast-cgi(WSGI)

                 PostgreSQL/MySQL/SQLite3/SQLServer
Project

Django




Model




URL

view

Template
Django
   Django                  python manage.py init



                   python manage.py startapp APP
  Project

APP   APP          python manage.py install APP




  Project
            django-admin.py startproject PROJECT

   APP
NO
                    django-admin.py startproject PROJECT

YES

      Django
                    python manage.py init




                    python manage.py startapp APP




                    emacs app/APP/models/APP.py




                    python manage.py install APP
Project

django-admin.py startproject WorkStyle

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

django-admin.py startproject WorkStyle

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

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

python manage.py init

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

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

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

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

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

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

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

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

from django.core import meta

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

from django.core import meta

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

python manage.py install workstyle

   ## APPLICATION TABLE
   workstyle_tasks       workstyle_tags
   workstyle_taglists    workstyle_comments
   workstyle_attachments
Model

python manage.py install workstyle

   ## APPLICATION TABLE
   workstyle_tasks       workstyle_tags
   workstyle_taglists    workstyle_comments
   workstyle_attachments
Model

python manage.py install workstyle

   ## APPLICATION TABLE
   workstyle_tasks       workstyle_tags
   workstyle_taglists    workstyle_comments
   workstyle_attachments




                        Class
O/R
       Python

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

> export DJANGO_SETTINGS_MODULE=WorkStyle.settings
> python

import django.models.workstyle import tasks, comments

#tasks       Task               workstyle_tasks
#(Black Magic)

tasks.get_list(**keyargs)   #

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

> export DJANGO_SETTINGS_MODULE=WorkStyle.settings
> python


import django.models.workstyle import tasks, comments

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

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

> export DJANGO_SETTINGS_MODULE=WorkStyle.settings
> python


import django.models.workstyle import tasks, comments

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

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

> export DJANGO_SETTINGS_MODULE=WorkStyle.settings
> python


import django.models.workstyle import tasks, comments

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

> export DJANGO_SETTINGS_MODULE=WorkStyle.settings
> python


import django.models.workstyle import tasks, comments

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

 > emacs Project/urls.py

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

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

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

 > emacs Project/urls.py

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

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

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

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

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

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

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

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

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

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

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

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

> emacs Project/settings.py

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

> emacs Project/settings.py

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


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

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

> emacs Project/settings.py

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


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

{% extends "workstyle/TaskForm" %}

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

                                New extends Base
Template
        settings.py Template

> emacs Project/settings.py

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


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

{% extends "workstyle/TaskForm" %}

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

 from django.core import template

 register = template.Library()

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

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




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

{% load wsfilters %}

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

simon.bofh.ms
Django Milestone
0.92
Magic

1.00
www.everes.net

More Related Content

What's hot

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

What's hot (20)

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

Viewers also liked

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

Viewers also liked (7)

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

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

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

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

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

More from makoto tsuyuki

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

More from makoto tsuyuki (9)

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

Recently uploaded

08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfhans926745
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024The Digital Insurer
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 

Recently uploaded (20)

08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdf
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 

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