zoukankan      html  css  js  c++  java
  • 使用Django 测试客户端一起测试视图,模板和URL

    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>

  • 相关阅读:
    JavaScript 中的构造函数
    sql链路服务器提示该事务管理器已经禁止了它对远程/网络事务的支持
    Operating System:操作系统启动总结
    Operating System:信号量
    Operating System:管程相关概念
    ACwing(基础)--- 线性DP、区间DP
    ACwing(基础)--- C++STL库
    ACwing(基础)--- 并查集、堆
    ACwing(基础)--- 数组模拟链表、栈、队列
    Vue 学习笔记2 data数据对象
  • 原文地址:https://www.cnblogs.com/ahMay/p/8721068.html
Copyright © 2011-2022 走看看