ステップ04:フレームワークを表示する
「hello world」で十分です。次に、Projectorでの作業に取り掛かりましょう。 UX担当者は通常、プロトタイプを作成してURL構造で表示する必要がある多くのビューを持っています。
このプロセスを迅速かつ生産的にしたいと考えています。
この手順では、次のようにサイトマップの構造をコピーします。
/
/about.html
/acme
/people
/
/about.html
/acme
/people
...そして、これを行う一連のURLを作成します。 その過程で、より多くのビューとテンプレートを作成します。
目標
- 任意のデータを使用するなど、UXワークフローの概要
期待されること
- 「標準」ビューと「名前付き」ビュー
- その他のZPTデザイン
手順
$ cd ../../creatingux; mkdir step04; cd step04
(変更なし)コピー
step04/application.py
:
wsgiref.simple_server import make_server からさらに、
pyramid.config import Configurator から
def main ():
config = Configurator()
config スキャン( "ビュー" )
app = config make_wsgi_app()
アプリを返す
__name__ == '__main__'の場合 :
app = main()
server = make_server( '0.0.0.0' 、 8080 、app)
サーバー serve_forever()
step04/views.py
もあります。
pyramid.view から view_configを インポートしますそして、これが
@view_config (レンダラー= "index.pt" )
def index_view (リクエスト):
{}を返す
@view_config (レンダラー= "about.pt" 、名前= "about.html" )
def about_view (リクエスト):
{}を返す
@view_config (レンダラー= "company.pt" 、名前= "acme" )
def company_view (リクエスト):
return { "company" :COMPANY、 "projects" :PROJECTS}
@view_config (レンダラー= "people.pt" 、名前= "people" )
def people_view (リクエスト):
return { "company" :COMPANY、 "people" :PEOPLE}
#ダミーデータ
COMPANY = "ACME、Inc."
PEOPLE = [
{ 「名前」 : 「スタントン」 、 「タイトル」 : 「スーザンスタントン」 }、
{ 'name' : 'bbarker' 、 'title' : 'Bob Barker' }、
]
プロジェクト= [
{ 「名前」 : 「sillyslogans」 、 「タイトル」 : 「Silly Slogans」 }、
{ 「名前」 : 「意味のない ミッション」 、 「タイトル」 : 「意味のないミッション」 }、
]
step04/index.pt
です:
<html>さらにここに
<head>
<title>プロジェクター-ホーム</ title>
</ head>
<本体>
<ul>
<li> <a href= "/">ホーム</a> </ li>
<li> <a href= "/about.html">プロジェクタについて</a> </ li>
<li> <a href= "/acme"> ACME、Inc. </a> </ li>
<li> <a href= "/people">人々 </a> </ li>
</ ul>
<h1>プロジェクター-ホーム</ h1>
</ body>
</ html>
step04/about.pt
ます。
<html>これが
<head>
<title>プロジェクタ-概要</ title>
</ head>
<本体>
<ul>
<li> <a href= "/">ホーム</a> </ li>
<li> <a href= "/about.html">プロジェクタについて</a> </ li>
<li> <a href= "/acme"> ACME、Inc. </a> </ li>
<li> <a href= "/people">人々 </a> </ li>
</ ul>
<h1>プロジェクター-概要</ h1>
<p>プロジェクターは、ホスティングが可能なシンプルなプロジェクト管理ツールです
複数の独立企業のための複数のプロジェクト、
独立企業間で開発者プールを共有します。 </ p>
</ body>
</ html>
step04/company.pt
です。
<html>そして最後に、ここに
<head>
<title>プロジェクター-人</ title>
</ head>
<本体>
<ul>
<li> <a href= "/">ホーム</a> </ li>
<li> <a href= "/about.html">プロジェクタについて</a> </ li>
<li> <a href= "/acme"> ACME Inc. </a> </ li>
<li> <a href= "/people">人々 </a> </ li>
</ ul>
<h1>人</ h1>
<ul>
< リテラル:repeat = "person people" >
<a href= "${person.name}"> $ {person.title} </a>
</ li>
</ ul>
</ body>
</ html>
step04/tests.py
ます:
インポート unittestそれから私達は書く
クラス ProjectorViewsUnitTests (unittest。TestCase):
def test_hello_view ( self ):
ビュー から インポート index_view
結果= index_view({})
自己 。 assertEqual( len (result。keys())、 0 )
def test_about_view ( self ):
ビュー から インポート about_view
結果= about_view({})
自己 。 assertEqual( len (result。keys())、 0 )
def test_company_view ( self ):
ビュー から import company_view
結果= company_view({})
自己 。 assertEqual(結果[ "会社" ]、 "ACME、Inc." )
自己 。 assertEqual( len (result [ "projects" ])、 2 )
def test_people_view ( self ):
ビュー から インポート people_view
結果= people_view({})
自己 。 assertEqual(結果[ "会社" ]、 "ACME、Inc." )
自己 。 assertEqual( len (result [ "people" ])、 2 )
クラス ProjectorFunctionalTests (unittest。TestCase):
def setUp ( self ):
アプリケーションの インポート からメイン
app = main()
webtest インポート TestApp から
自己 。 testapp = TestApp(アプリ)
def test_home ( self ):
res = self testapp 。 get( '/' 、ステータス= 200 )
自己 。 failUnless(res。bodyの'Home' )
def test_it ( self ):
res = self testapp 。 get( '/' 、ステータス= 200 )
自己 。 failUnless(res。bodyの'Home' )
res = self testapp 。 get( '/about.html' 、ステータス= 200 )
自己 。 failUnless(res。bodyの「自律」 )
res = self testapp 。 get( '/ people' 、ステータス= 200 )
自己 。 failUnless(res。bodyの「スーザン」 )
res = self testapp 。 get( '/ acme' 、ステータス= 200 )
自己 。 failUnless( res。bodyの「Silly Slogans」 )
$ nosetests
これにより、6つのテストに関するレポートが提供されます。
アプリケーションを起動します。
$ python application.py
そして、ブラウザの結果に満足しています
127.0.0.1:8080
追加の質問
@ name属性のないビュー登録が2つある場合、つまり両方がデフォルトとして登録されている場合はどうなりますか?
Chameleon(現在、2番目のバージョンについて話している場合)は、いずれにしてもエラーメッセージを提供する方が良いというのは本当ですか? Pythonの式にいくつかのバグを入れて、これを試してください。
WebTestはこれらのエラーに正しく応答しますか?
URLに.htmlを追加すると、何か影響がありますか?
分析
アプリケーションのオブジェクトと階層にマップするURLのスペースを構築するプロセスを開始しました。 現時点では、表現を使用してこれをモデル化しました。
テストの数は増えましたが、それぞれがまだ非常に小さいです。 そのような単純なテストでさえ、初期の開発プロセス中にポップアップするほとんどの愚かなエラーをキャッチします。 クリックするだけでなく、ノーズテストの生産性が高まることを願っています。
アブストラクト
登録は内部でどのように行われますか?
カメレオン、キャッシング、既製バージョンのディスクへの格納