打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Django学习系列16:处理完POST请求后重定向

处理完POST请求后重定向

代码中new_item_text = ''的写法不怎么样。解决第二个问题时候,顺带把这个问题也解决了。

人们都说处理完post请求后一定要重定向,接下来就实现这个功能吧。修改针对保存POST请求数据的单元测试,不让它渲染包含待办事项的响应,而是重定向到首页。

lists/tests.py    def test_can_save_a_post_request(self):        response = self.client.post('/', data={'item_text': 'A new list item'})        self.assertEqual(Item.objects.count(), 1)        new_item = Item.objects.first()        self.assertEqual(new_item.text, 'A new list item')        self.assertEqual(response.status_code, 302)        self.assertEqual(response['location'], '/')

不需要再拿响应中的.content 属性值和渲染模板得到的结果比较,因此把相应的断言删掉了。现在,响应是HTTP重定向,状态码是302,让浏览器指向一个新地址。修改之后运行结果200!=302,现在可以大幅度清理视图函数了

from django.shortcuts import render, redirectfrom lists.models import Itemfrom django.http import HttpResponse# Create your views here.在这儿编写视图def home_page(request):    if request.method == 'POST':        Item.objects.create(text=request.POST['item_text'])        return redirect('/')    return render(request,'home.html')

现在测试可以通过了python manage.py test

----------------------------------------------------------------------Ran 5 tests in 0.012sOKDestroying test database for alias 'default'...

更好的单元测试实践方法,一个测试只测试一件事

单元测试实践方法要求,一个测试只能测试一件事,因为这样便于查找问题。如果一个测试中有多个断言,一旦前面的断言导致失败,就无法得知后面的断言情况如何(如,如果不小心破坏了视图函数,我们想知道到底是保存对象时出错了,还是响应的类型出错了)

刚开始可能无法写出只有一个断言的完美单元测试,不过现在可以把正在开发的功能分开测试(上面一个功能分为两个)。

#lists/tests.py

def test_can_save_a_post_request(self): response = self.client.post('/', data={'item_text': 'A new list item'}) self.assertEqual(Item.objects.count(), 1) new_item = Item.objects.first() self.assertEqual(new_item.text, 'A new list item') def test_redirects_after_POST(self): response = self.client.post('/', data={'item_text': 'A new list item'}) self.assertEqual(response.status_code, 302) self.assertEqual(response['location'], '/')

现在运行应该看见有六个测试通过,而不是五个。

----------------------------------------------------------------------Ran 6 tests in 0.014sOKDestroying test database for alias 'default'...
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
接口的单元测试
Django 教程 10: 测试 Django 网页应用
Django 单元测试
test.py 代码测试
nginx重定向post请求
unittest单元测试框架总结
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服