前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Django -- 快速测试&页面美化

Django -- 快速测试&页面美化

作者头像
周辰晨
发布2020-01-17 10:45:17
1.4K0
发布2020-01-17 10:45:17
举报
文章被收录于专栏:软件测试架构师俱乐部

前言

经过前几篇的介绍,我们以及能够建立简单的网站页面,那如果嫌弃网站页面简陋,那我们就必须要为他加上样式来渲染网络页面,在Django中,我们把这些文件统称为"静态文件"。在规模比较大的项目--特别是由好几个应用组成的大项目中,处理不同应用所需要的静态文件的工作就显得有些麻烦了。而django.contrib.staticfiles将各个应用的静态文件统一收集起来,这样一来,在生产环境中,这些文件就会集中在一个便于分发的地方。


引入静态文件 -- 自定义应用的界面和风格

首先,在应用demo_app目录下创建一个名为static的目录,Django 将在该目录先查找静态文件,这种方式和 Django在demo_app/templaes 目录下查找 template 的方式类似。

在你刚新建的 static文件夹中创建一个名为demo_app的文件夹,再在demo_app中创建一个名为style.css的文件,这样,你的样式路径就应该为demo_app/static/demo_app/style.css

类似于管理模板文件,我们同样可以把样式文件直接放入到demo_app/static文件夹中--而不是创建另一个demo_app的子文件夹,这样做的弊端就是因为Django只会使用第一个找到的静态文件,如果你在其他应用中有一个相同名字的静态文件,Django 将无法区分它们。所以我们需要指引Django选择正确的静态文件,最简单的方式就是把它们放入各自的命名空间,也就是把这些静态文件放入另一个与应用名相同的目录中。

将以下样式代码放入到样式表中demo_app/static/demo_app/style.css

代码语言:javascript
复制
input {
            width: 320px;
            height: 24px;
            border: 1px solid #999;
            border-radius: 4px;
        }

下一步,在demo_app/templates/demo_app/add.html 头文件中添加以下内容

代码语言:javascript
复制
{% load static %}
<link rel="stylesheet" type="text/css" href="{% static 'demo_app/style.css' %}">

{% static %} 模板标签会生成静态文件的绝对路径。经过上面简单的操作,我们就能看到页面效果了。启动服务(如果正在运行中,重启一次),会看到如下效果(样式比较丑)。

add_css.png

这边只是对页面做了简单的样式改变,旨在说明Django是如何添加样式的,实际项目中样式会复杂的多!


测试

测试普通方法

按照Django的要求,Django应用的测试应该写在应用的test.py文件中,测试系统会自动的在所有以 tests 开头的文件里寻找并执行测试代码。

在'/demo_app/tests.py'文件中编写如下代码

代码语言:javascript
复制
class CatModelTest(TestCase):

    def test_get(self):
        cats = Cat.objects.all()
        print("111---"+ str(len(cats)))
        cat = Cat()
        cat.name ='test'
        cat.age =12
        cat.save()
        cats = Cat.objects.all()
        print("222---"+ str(len(cats)))
        self.assert_(cat.name == 'test1', "名字不匹配")

运行 python manage.py test demo_app 我们会看到如下运行日志

代码语言:javascript
复制
Creating test database for alias 'default'...
System check identified no issues (0 silenced).
111---0
222---1

Destroying test database for alias 'default'...

Failure
Traceback (most recent call last):
  File "/Users/zhangcheng/demo_porj/demo_app/tests.py", line 16, in test_get
    self.assert_(cat.name == 'test1', "名字不匹配")
AssertionError: False is not true : 名字不匹配


Process finished with exit code 1

我们在测试代码中新增了一个cat对象,Django 会为测试代码自动创建一个临时数据库,当测试代码运行结束后,会自动删除,所以,我们测试代码不会对真实数据库有任何影响。

测试视图

当我们完成一个视图的功能开发后,为了验证该功能是否完善,我们得启动服务,打开相对应的网页才能看到功能是否符合我们的预期,这样就显得有点繁琐。Django 为了方便我们测试,提供了django.test.Client 类,它可以充当一个虚拟的网络浏览器发挥以下作用(参考django 文档):

•模拟URL上的GET和POST请求并观察响应-从低级HTTP(结果标头和状态代码)到页面内容,应有尽有。•查看重定向链(如果有),并在每个步骤检查URL和状态代码。•测试给定的请求是否由给定的Django模板以及包含某些值的模板上下文呈现。我们可以进入 Django shell 中进行简单的测试,也可以在没用应用中自带的tests.py文件中进行测试。在shell 中测试必须要进行一些额外的环境配置,所以不推荐,我们还是以在 tests.py中进行测试为例。

tests.py文件中编写如下代码:

代码语言:javascript
复制
from django.test import Client
 def test_get(self):
        client = Client()
        response = client.get('/demo_app/')
        print(response.content)
        print(response.status_code)

运行 python manage.py test demo_app 我们会看到如下运行日志

代码语言:javascript
复制
Creating test database for alias 'default'...
System check identified no issues (0 silenced).
b'<!DOCTYPE html>\n<html lang="en">\n<head>\n    <meta charset="UTF-8">\n    <title>Cat List</title>\n</head>\n<body>\n    <table border="1">\n        <tr>\n            <td>Id</td>\n            <td>Name</td>\n            <td>age</td>\n        </tr>\n        \n        <p>No cat</p>\n    \n    </table>\n\n</body>\n</html>'
200
Destroying test database for alias 'default'...

Process finished with exit code 0

我们通过 client.get('/demo_app/') 发送了一个get请求,通过返回结果的response.contentresponse.status_code分别返回了响应内容 和 响应结果代码。那么 ,post 请求该如何发起呢,有兴趣的同学可以尝试下。


前文回顾

如何优雅的提交表单视图是啥?模板为何物?走进model一文完全解读django结构

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-01-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 架构师影响力 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 引入静态文件 -- 自定义应用的界面和风格
  • 测试
    • 测试普通方法
      • 测试视图
        • 前文回顾
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档