zoukankan      html  css  js  c++  java
  • 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, 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'...
  • 相关阅读:
    makeBackronym
    Regular Ball Super Ball
    Svn忽略配置
    How does it work in C#?
    Counting sheep...
    Convert boolean values to strings 'Yes' or 'No'.
    codeforces 236A . Boy or Girl(串水问题)
    cocos2d-x3.0 解释具体的新的物理引擎setCategoryBitmask()、setContactTestBitmask()、setCollisionBitmask()
    ACM字符串处理算法经典:字符串搜索
    MessageFormat类别:快速格式化字符串
  • 原文地址:https://www.cnblogs.com/ranxf/p/11691611.html
Copyright © 2011-2022 走看看