第一个版本
views.py
from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
from lists.models import Item
'''def home_page(request):
return HttpResponse('<html><title>To-Do lists</title></html>')'''
from django.shortcuts import render
'''def home_page(request):
if request.method=='POST':
return HttpResponse(request.POST['item_text'])
return render(request,'home.html')'''
'''def home_page(request):
return render(request,'home.html',{'new_item_text':request.POST.get('item_text',''),})
'''
def home_page(request):
item=Item()
item.text=request.POST.get('item_text','')
item.save()
return render(request,'home.html',{'new_item_text':item.text})
tests.py
'''from django.test import TestCase
# Create your tests here.
class Smokeclass(TestCase):
def test_bad_maths(self):
self.assertEquals(1+1,3)'''''
from django.urls import resolve
from django.test import TestCase
from lists.views import home_page
from django.http import HttpRequest
from lists.models import Item
class HomePageTest(TestCase):
def test_root_url_resolve_to_home_page_view(self):
found=resolve('/')
# resolve函数是django内部使用的函数,用于解析url,
# 并且将其映射到相应的视图函数上,检查网站根路径时"/",
# 是否能找到home_page函数
self.assertEquals(found.func,home_page)
def test_home_page_returns_correct_html(self):
request=HttpRequest()
# 创建httprequest对象,用户在浏览器中请求网页时
# django看到的就是httprequest对象
response=home_page(request)
# 把对象传给home_page视图
html=response.content.decode('utf8')
# 提取content,得到结果是原始的字节,即发个用户
# 浏览器的0和1,随后调用.decode(),把原始字节
# 转换成发给用户的html字符串
self.assertTrue(html.startswith('<html>'))
self.assertIn('<title>To-Do lists</title>',html)
self.assertTrue(html.endswith('</html>'))
def test_home_page_returns_correct_html_chonggou(self):
response=self.client.get('/')
html = response.content.decode('utf8')
# 提取content,得到结果是原始的字节,即发个用户
# 浏览器的0和1,随后调用.decode(),把原始字节
# 转换成发给用户的html字符串
self.assertTrue(html.startswith('<html>'))
self.assertIn('<title>To-Do lists</title>', html)
self.assertTrue(html.endswith('</html>'))
self.assertTemplateUsed(response,'home.html')
def test_user_home_template(self):
response=self.client.get('/')
self.assertTemplateUsed(response,'home.html')
def test_can_save_a_POST_request(self):
response=self.client.post('/',data={'item_text':'a new list item'})
self.assertEquals(Item.objects.count(), 1)
new_item=Item.objects.first()
self.assertEquals(new_item.text,'a new list item')
self.assertIn('a new list item',response.content.decode())
self.assertTemplateUsed(response, 'home.html')
class ItemModelTest(TestCase):
def test_saving_and_retrieving_items(self):
first_item=Item()
first_item.text="the first list item"
first_item.save()
second_item = Item()
second_item.text = "the second list item"
second_item.save()
saved_items=Item.objects.all()
self.assertEquals(saved_items.count(),2)
first_saved_item=saved_items[0]
second_saved_item=saved_items[1]
self.assertEquals(first_saved_item.text,'the first list item')
self.assertEquals(second_saved_item.text, 'the second list item')
优化代码
views,py
from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
from lists.models import Item
'''def home_page(request):
return HttpResponse('<html><title>To-Do lists</title></html>')'''
from django.shortcuts import render
'''def home_page(request):
if request.method=='POST':
return HttpResponse(request.POST['item_text'])
return render(request,'home.html')'''
'''def home_page(request):
return render(request,'home.html',{'new_item_text':request.POST.get('item_text',''),})
'''
'''def home_page(request):
item=Item()
item.text=request.POST.get('item_text','')
item.save()
return render(request,'home.html',{'new_item_text':item.text})'''
def home_page(request):
if request.method=='POST':
new_item_text=request.POST['item_text']
Item.objects.create(text=new_item_text)
else:
new_item_text=''
return render(request, 'home.html', {'new_item_text': new_item_text,})
test.py
'''from django.test import TestCase
# Create your tests here.
class Smokeclass(TestCase):
def test_bad_maths(self):
self.assertEquals(1+1,3)'''''
from django.urls import resolve
from django.test import TestCase
from lists.views import home_page
from django.http import HttpRequest
from lists.models import Item
class HomePageTest(TestCase):
def test_root_url_resolve_to_home_page_view(self):
found=resolve('/')
# resolve函数是django内部使用的函数,用于解析url,
# 并且将其映射到相应的视图函数上,检查网站根路径时"/",
# 是否能找到home_page函数
self.assertEquals(found.func,home_page)
def test_home_page_returns_correct_html(self):
request=HttpRequest()
# 创建httprequest对象,用户在浏览器中请求网页时
# django看到的就是httprequest对象
response=home_page(request)
# 把对象传给home_page视图
html=response.content.decode('utf8')
# 提取content,得到结果是原始的字节,即发个用户
# 浏览器的0和1,随后调用.decode(),把原始字节
# 转换成发给用户的html字符串
self.assertTrue(html.startswith('<html>'))
self.assertIn('<title>To-Do lists</title>',html)
self.assertTrue(html.endswith('</html>'))
def test_home_page_returns_correct_html_chonggou(self):
response=self.client.get('/')
html = response.content.decode('utf8')
# 提取content,得到结果是原始的字节,即发个用户
# 浏览器的0和1,随后调用.decode(),把原始字节
# 转换成发给用户的html字符串
self.assertTrue(html.startswith('<html>'))
self.assertIn('<title>To-Do lists</title>', html)
self.assertTrue(html.endswith('</html>'))
self.assertTemplateUsed(response,'home.html')
def test_user_home_template(self):
response=self.client.get('/')
self.assertTemplateUsed(response,'home.html')
def test_can_save_a_POST_request(self):
response=self.client.post('/',data={'item_text':'a new list item'})
self.assertEquals(Item.objects.count(), 1)
new_item=Item.objects.first()
self.assertEquals(new_item.text,'a new list item')
self.assertIn('a new list item',response.content.decode())
self.assertTemplateUsed(response, 'home.html')
class ItemModelTest(TestCase):
def test_saving_and_retrieving_items(self):
first_item=Item()
first_item.text="the first list item"
first_item.save()
second_item = Item()
second_item.text = "the second list item"
second_item.save()
saved_items=Item.objects.all()
self.assertEquals(saved_items.count(),2)
first_saved_item=saved_items[0]
second_saved_item=saved_items[1]
self.assertEquals(first_saved_item.text,'the first list item')
self.assertEquals(second_saved_item.text, 'the second list item')
class Home_Page_Test(TestCase):
def test_only_saves_items_when_necessary(self):
self.client.get('/')
self.assertEquals(Item.objects.count(),0)