首页 > 其他 > 详细

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

时间:2019-10-17 14:08:59      阅读:312      评论:0      收藏:0      [点我收藏+]

处理完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, redirect
from lists.models import Item
from 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.012s

OK
Destroying 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.014s

OK
Destroying test database for alias default...

 

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

原文:https://www.cnblogs.com/ranxf/p/11691611.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!