伝説のギタリストじゃない方のDjango
Upcoming SlideShare
Loading in...5
×
 

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

on

  • 1,860 views

2006年1月にPythonWorkshop03でDjangoを紹介した時のスライドです。

2006年1月にPythonWorkshop03でDjangoを紹介した時のスライドです。

Statistics

Views

Total Views
1,860
Views on SlideShare
1,860
Embed Views
0

Actions

Likes
1
Downloads
8
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Apple Keynote

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

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

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

  • 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