1. 程式人生 > >使用Django 測試客戶端一起測試視圖,模板和URL

使用Django 測試客戶端一起測試視圖,模板和URL

新建 sse unit 實例 list 對象 ack 問題: 打開

Django 測試客戶端

self.client.get(url) 測試客戶端是Django中TestCase類的一個屬性名.

至此已經在網站中可以創建一個清單了。

那麽,現在是可以在unit test中測試新建的清單了

為新建清單添加了一個視圖函數,並映射給了url ‘^/Lists/new$‘. 在哪裏使用它呢? 在首頁的新建清單 form的Action中指定這個url。

目前的實現是:

1. get 首頁,打開首頁。能看到 輸入待辦事項的清單。

2. post 首頁,可以創建一個list.並在list中顯示該待辦事項。打開的是新建list的 url

3. post list 頁面。能看到新建的待辦事項

目前的問題是:

1. 目前只能有一個list

2. 一個list中顯示所有的待辦事項,不能隔離。

解決問題:

處理隔離問題,必須修改模型,新建一個 List 類。並讓類和item 關聯起來. 需要用到 model的知識。

List是單獨的自己: 在url中使用正則式,加入一個捕獲組 (.+) ,捕獲到的文本會作為參輸傳入視圖

Item 每個Item應該存在某個List中。

捕獲組 (.+)不僅可以捕獲 /(.+)/ 也可以捕獲 /((.+)/new_item ..... 所以 寫url時,要避免使用的正則式,匹配太廣.

response = self.client.get(‘/Lists/%id/‘ % (correct_list.id,))


self.assertEqual(response.context[‘list‘],correct_list) # response.context 表示要傳入render函數的上下文。 Django客戶端把上下文附在response對象上,方便測試.

template 中:

{% for new_item_text in list.item_set.all %} # .item_set 叫做反向查詢。是Django提供的非常有用的ORM功能。可以在其他表中查詢某個對象的相關紀錄。

所以在template的from中。可以傳入一個modle實例。然後根據這個實例找相關的其他對象實例:

<form method="POST" action=‘/Lists/{{list.id}}/new‘>
<input name="item_text" id="id_new_item" placeholder="Enter a to-do item" />
{% csrf_token %}
</form>
<table id="id_list_table">
{% for new_item_text in list.item_set.all %}
<tr><td>{{ forloop.counter}}: {{new_item_text.text}}</td></tr>
{% endfor %}
</table>

使用Django 測試客戶端一起測試視圖,模板和URL