Django学习笔记:入门开发(三)

38 sec read

编写自动化测试

创建测试代码

Question在最近一天发布,Question.was_published_recently() 方法返回True(这是对的),但是如果Question的pub_date 字段是在未来,它还返回True(这肯定是不对的)。创建第一个自动化测试的代码,打开polls/tests.py文件:

运行测试代码

执行后返回如下信息:

代码执行后中间经过了如下几个过程:

  • 程序自动寻找了test.TestCase的子类
  • 程序自动运行了以test的方法
  • 运行前创建了临时的数据库,运行后将临时库进行了销毁

修复错误后重新执行

重新运行,后获得如下结果:

在测试类中添加各种场景

为保证测试的完整性,需要测试不同场景下程序是否能够正确处理。

测试视图

Django测试客户端

Django提供了一个测试客户端来模拟用户和代码的交互。我们可以在tests.py 甚至在shell 中使用它。我们以shell为例,首先进入shell环境:

先设置测试环境:

setup_test_environment()会安装一个模板渲染器,可以使我们来检查响应的一些额外属性比如,比如相应上下文response.context。注意,这种方法不会建立一个测试数据库,所以以下命令将运行在现有的数据库上。

下一步我们需要导入测试客户端类(在之后的tests.py 中,我们将使用django.test.TestCase类,它具有自己的客户端,将不需要导入这个类):

这些都做完之后,我们可以让这个客户端来为我们做一些事:

改进我们的视图

默认情况下投票的列表显示了还没有发布的投票(即pub_date的时间在未来的投票)。需要进行修复。

修改polls/views.py中的IndexView下的get_queryset方法并让它将日期与timezone.now()进行比较。

测试新的视图

打开polls/tests.py导入reverse:

创建一个创建问题的函数,同时新建一个测试类

测试 DetailView

即使未来发布的Question不会出现在index中,如果用户知道或者猜出正确的URL依然可以访问它们。所以我们需要给DetailView添加一个这样的约束:

当然,我们将增加一些测试来检验pub_date 在过去的Question 可以显示出来,而pub_date在未来的不可以:

自定义应用的外观

首先在你的polls中创建一个static目录。Django将在那里查找静态文件,这与Django在polls/templates/中寻找对应的模板文件的方式是一致的。~~~~

Django 的STATICFILES_FINDERS设置包含一个查找器列表,它们知道如何从各种源找到静态文件。 其中默认的一个是AppDirectoriesFinder,像在刚刚polls中创建的那个项目查找方式一样,它会在每个INSTALLED_APPS下查找“static”子目录,。管理站点也为它的静态文件使用相同的目录结构。

在你刚刚创建的static目录中,创建另外一个目录polls并在它下面创建一个文件style.css。换句话讲,你的样式表应该位于polls/static/polls/style.css。因为AppDirectoriesFinder 静态文件查找器的工作方式,你可以通过polls/style.css在Django中访问这个静态文件,与你如何访问模板的路径类似。

静态文件的命名空间

与模板类似,我们可以将静态文件直接放在polls/static(而不是创建另外一个polls 子目录),但实际上这是一个坏主意。Django将使用它所找到的第一个符合要求的静态文件的文件名,如果在你的不同应用中存在两个同名的静态文件,Django将无法区分它们。我们需要告诉Django该使用其中的哪一个,最简单的方法就是为它们添加命名空间。 也就是说,将这些静态文件放进以它们所在的应用的名字命名的另外一个目录下。

将下面的代码放入样式表中 (polls/static/polls/style.css):

下一步,在polls/templates/polls/index.html的顶端添加如下内容 :

{% load staticfiles %} 从staticfiles模板库加载{% static %} 模板标签。{% static %}模板标签会生成静态文件的绝对URL。

这就是你在开发过程中所需要对静态文件做的所有处理。 重新加载 http://localhost:8000/polls/,你应该会看到Question的超链接变成了绿色,这意味着你的样式表被成功导入。

打赏作者
微信支付标点符 wechat qrcode
支付宝标点符 alipay qrcode

《怕蛇的人怎么学Python》:Python简介

在学习任何一门编程语言前,最好先学习下这门语言产生的发展历史,通过发展历史去了解为什么会产生此语言?它主要为了
2 min read

《怕蛇的人怎么学Python》:开篇

先前在自己的博客上,零散的写了一些Python的学习笔记,涉及到的内容比较凌乱,完全没有逻辑。反思自己对所学的
3 sec read

Hive SQL中的datediff、current_dat…

Hive SQL中的datediff函数返回的是2个日期的天数。在使用过程中发现了一个比较有趣的坑: SELE
2 min read

发表评论

电子邮件地址不会被公开。 必填项已用*标注