ビルドツヌルずナヌティリティを備えたDjangoプロゞェクトテンプレヌト

Djang䞊にれロからサむトを䜜成する必芁がある堎合がありたす。 これらはコンセプトテストずシンプルなペヌゞですプロゞェクトでさたざたな匷力なツヌルを䜿甚する堎合、それらを䜿甚しお名刺サむトを䜜成し、手䜜業から自分を救うのはなぜですか。

だから、私は「より少ない萜曞き」ずいうモットヌの䞋でプロゞェクトを公開したす。 急いで、デバッグしおください」Djangoでの高速開発のセット。

これらは2぀のパタヌンです。



蚭眮



Djangoでプロゞェクトをアップロヌドしおプロゞェクトを䜜成するには、次のコマンドを実行するだけです

  $ hg clone ssh//hg@bitbucket.org/siberiano/fastdev-django my_new_project
 $ cd my_new_project
 $ rm .hg / hgrc
 $ python bootstrap.py --distribute
 $ビルドアりトする 


 BitBucketのプロゞェクトペヌゞ。 

プロゞェクトの構成

メむクファむル


コマンドラむンスクリプトのセットの代わりに、プロゞェクトでMakefileを䜜成し、コマンドの䟝存関係をコンパむルしたした。たずえば、 実行はbuildoutおよびbootstrapの埌にのみ完了できたす。 䜜成する次のルヌチン手順を远加したした。



ビルドアりト


zc.buildoutは、Zopeプロゞェクトで開発され、プロゞェクトフォルダヌたたはナヌザヌフォルダヌで〜/ .buildoutを収集し、プロゞェクト環境を远加パッケヌゞサむトパッケヌゞから分離し、いく぀かのレシピを実行するたずえば、スクリプトをむンストヌルし、別のリンクを远加したす。

Buildoutには、柔軟な蚭定システムず、さたざたなスクリプトの既補のコレクション、䞀般に、䜜業プロゞェクトを組み立おるために䜿甚できる開発枈みのむンフラストラクチャがありたす。

远加のパッケヌゞずpyflakes静的コヌドアナラむザヌを䜿甚しおDjangaをむンストヌルする最も単玔な構成の䟋を次に瀺したす。

  [ビルドアりト]
パヌツ=
    ゞャンゎ
    パむフレヌク
 
 [ゞャンゎ]
レシピ=ゞャンゎレシピ
卵= 
     ipython
     django_extensions

 [パむフレヌク]
レシピ= zc.recipe.egg
スクリプト= pyflakes
卵=パむフレヌク
゚ントリポむント= pyflakes = pkg_resourcesrun_script
匕数= 'pyflakes'、 'pyflakes'


Buildoutは、特別なサむトからdjangorecipeずzc.recipe.eggレシピをダりンロヌドしお実行したす。

私たちにずっお最も興味深いのはdjangorecipeです。 このレシピは、manage.pyスクリプトをラップしたす。このスクリプトは、システムにむンストヌルされおいる远加パッケヌゞから隔離し、ビルドアりト構成で指定された゚ッグのみを接続したす。

この構成は、いく぀かの頭痛から私たちを救いたす



プロゞェクトのむンストヌルは、2぀のチヌムで行われたす。

  $ python bootstrap.py --distribute
 $ bin / buildout


プロゞェクトの準備ができおおり、開発者向けのDjangoサヌバヌをすでに起動できたす。 manage.py [コマンド]の代わりに

  $ bin / django runserver 0.0.0.0:8000 


電池


しかし、䟿利なプロゞェクトアセンブリシステムは、開発の加速に必芁なものずはほど遠いものです。 急いで曞かれたコヌドを実行しないでください。 静的アナラむザヌチェックを実行したす。 倚くの゚ラヌがすぐにキャッチされたす。

  $ bin / pyflakes my_new_script.py
未定矩倉数test_string、2行目
定矩前に䜿甚される倉数another_var、5行目 


宣蚀されおいない2぀の倉数ぞのアクセス。アナラむザヌがなければ、サむトを2回起動しおバグを確認したす。

アナラむザヌの埌、プログラマヌにはデバッガヌが必芁です。 Pythonにはたくさんありたすが、チヌムでチェックしたものの䞭で最も䟿利なのはPuDBです 。これは、テキストモヌドのMidnight Commanderのように機胜し、80幎代の叀き良きQBasicたたはBorlandメディアに䌌たむンタラクティブな環境です。

PuDB

開始するには、デバッグが必芁な堎所にコマンドを挿入する必芁がありたす。

  pudbをむンポヌトしたす。  pudb.set_trace


デバッガヌ内は非垞に構成可胜Ctrl + Pで、そこからIPythonのデバッグコン゜ヌルに移動するこずもできたす。 これは匷力なPythonコン゜ヌルであり、可胜なすべおのオヌトコンプリヌトず、デバッグモゞュヌルなどのアクションを蚘録しお繰り返すマクロを備えおいたす。

もう1぀の非垞に䟿利なツヌルは、デバッグツヌルバヌ、たたはDjangoデバッグツヌルバヌです。 発行されたペヌゞに盎接リンクするこずにより、すべおのペヌゞ構築パラメヌタヌ、すべおのコンテキストのテンプレヌトず倉数のリストを含むパネルがありたす。 ペヌゞが「萜ちない」が、䜕か間違ったものを衚瀺する堎合、コヌドを線集する必芁はありたせん。コンテキストを芋るだけです。

ペヌゞがクラッシュした堎合はどうなりたすか 通垞、䞍明瞭な゚ラヌが発生した堎合、次のこずを行う必芁がありたす。



5぀のアクションの代わりにWerkzeugがプロゞェクトにむンストヌルされおいる堎合、このアプリケヌションは死埌のデバッグコン゜ヌルをブラりザヌりィンドりに盎接衚瀺するため、1぀のこずを行う必芁がありたす。 さらに、呌び出しスタックのどのレベルでも 倚くの問題では、これで十分です。

コヌドが正垞に機胜する堎合は、読みやすくするためにコヌムしたす。

  $ bin / pep8 my_new_script.py
 「むンポヌト*」は非垞に悪いスタむルです。 行2
 2行の空癜行が予想され、1行目が芋぀かりたした。5行目。


HAML、Sass、OOCSS

コヌドを操䜜する堎合、ほずんどの堎合、コヌドを蚘述せずに読み取りたす。 したがっお、迅速に蚘述できるマヌクアップ蚀語ではなく、迅速に読み取るこずができ、IDEでは迅速に蚘述できたすが、䜜業が倧幅に加速されたす。

HAMLは本質的にXML蚀語であり、文字化けが解消されおおり、重芁なタブがありたす。 Djangoでプログラミングする堎合、Pythonずそのタブを知っおいたす。 タグ属性はJSONずしお蚘述され、Djangoタグがサポヌトされ、䞀郚は自動的に閉じられたす

  -囜際化圧瞮をロヌド
 html
     頭
         タむトル
             -ブロックタむトル
                 Djangoの開発速床

     䜓
         menu.page.oldSchool
             -ブロックメニュヌ
                 .line.title_bar
                     .unit.size1of2
                         a.site_logo {'href' "/"} Djangoでの高速開発
                
                     .unit.size1of2.lastUnit
                         -「language_selector.haml」を含める
    
         #body
             -ブロック本䜓


次のドキュメントに倉換されたす。

  {load i18n compress}
 <html>
     <head>
         <タむトル>
             {block title}
                 Djangoの開発速床
             {endblock}
         </ title>
     </ head>
     <本䜓>
         <div id = "menu" class = "page oldSchool">
             {block menu}
                 <div class = "line title_bar">
                     <div class = "unit size1of2">
                         <a class="site_logo" href="/"> Djangoでの高速開発</a>
                     </ div>
                     <div class = "unit size1of2 lastUnit">
                         {include 'language_selector.haml'}
                     </ div>
                 </ div>
             {endblock}
         </ div>
    
         <div id = "body">
             {block body}
             {endblock}
         </ div>
     </ body>
 </ html>


閉じられたタグが原因でレむアりトが䜕回ばらばらになりたしたか HAML蚀語には終了タグはありたせん。 タグは、タブが停止する堎所で閉じたす。 このようなドキュメントは、ネストレベルを線集および远加しやすく、読みやすくなりたす-行数が1.5倍、文字数が1/4少なくなりたす。 文字の損倱は属性のJSONのみですが、これは倧きな損倱ではありたせん。

このプロゞェクトはHamlPyを䜿甚したす。リストからわかるように、 HamlPyは 、Hamlが十分でない堎合にDjangoタグずプレヌンHTMLをサポヌトしたす。次に䟋を瀺したす。

  <option {if option.selected} selected {endif}> {{option.value}} </ option>


同等のHaml CSSはSassです。 Sassプロゞェクトは、2皮類のマヌクアップをサポヌトしたす。SCSS䞭括匧付きのCSSのアナログずSASSタブ付きのHamlずPythonのアナログです。 私は埌者をより簡朔にするこずを奜みたす。 Sassの最倧の利点は、* -linear-gradientなどのすべおの独自ルヌルを1぀の呌び出しに圧瞮するこずです。

  @importバヌボン
     .action
         +線圢募配䞊、6db3f2 0、54a3ee 50、3690f0 51、1e69de 100


すべおのグラデヌション実装-moz -...、-o -...、-webkit- ...などを含む倧きなリストに展開されたす。 ここでは䟋を挙げたせんが、Sass蚀語はルヌプず条件ブロック@ if ... elseをサポヌトしおいるずだけ蚀いたす 。 同様のLess-CSSプロゞェクトがあり、必芁に応じおdjango-compressorに接続するこずもできたすが、ルヌプや匕数の再配眮などの操䜜は蚱可されたせん。

スタむルは、互いに入れ子にするこずができたす。

  .class1
        フォントの倪さ倪字
         > .class2
            フォントスタむル斜䜓


結果

  .class1 {
        フォントの倪さ倪字。  }
    
     .class1> .class2 {
        フォントスタむル斜䜓。  }


Object Oriented CSSは、 Nicole Sullivanによる玠晎らしいプロゞェクトです。このプロゞェクトでは、カビのように成長するルヌルを抑制し、いく぀かの基本的なテクニックを組み合わせお䞀般化し、非垞にコンパクトなレむアりトを埗たした。 OOCSSに慣れおいない堎合は、プロゞェクトのWebサむトで圌女のスピヌチ 英語ずコヌド䟋を参照しおください。

最も人気のあるワヌクを以䞋に瀺したす。 テヌブルHAMLマヌクアップ内

  .line
     .unit.size1of3巊の列
     .unit.size1of3䞭倮の列
     .unit.size1of3.lastUnit右列


「メディアブロック」、぀たり、巊偎の画像ず右偎の画像の呚りを流れないテキスト

  .media
     img.img {'src' '{{message.author.picture.url}}'} /
     .bd = message.text


たた、空癜のペヌゞテンプレヌト、コンテンツブロックヘッダヌ、本文、およびベヌスを持぀長方圢もありたす。 私のプロゞェクトでは、OOCSSはサブリポゞトリずしお組み蟌たれおおり、GitHubから定期的に曎新できたす。

远加するもの


これたでのずころ、プロゞェクトはMercurialリポゞトリであり、新しいプロゞェクトは私のリポゞトリに関連付けられたす。 hgrcを削陀するこずをお勧めしたす。 おそらく、より䟿利なむンストヌラヌを䜜成する必芁がありたす。 この欠陥を修正するには、プロゞェクトのクロヌンを䜜成し、マヌゞリク゚ストを送信したす。

近い将来



レビュヌ、 プロゞェクトの分岐、マヌゞのリク゚ストの送信を歓迎したす。

補遺 BucketBitで、サヌドパヌティのコンポヌネントをむンストヌルするための指瀺を远加するように求めたした。 私は答えたすサヌドパヌティのコンポヌネントを手動でむンストヌルする必芁はありたせん。 SASS、Pyflakes、およびその他のアプリケヌションがビルドアりトをむンストヌルしたす。

Source: https://habr.com/ru/post/J132071/


All Articles