行业网站设计公司wordpress添加

web/2025/9/28 4:29:49/文章来源:
行业网站设计公司,wordpress添加,wordpress twenty six,wordpress登录页面图标文章目录1. 前言2. 数据基类3.测试 Comment Model4. 测试视图函数5. 测试模板标签1. 前言 comments应用的测试和blog应用测试的套路是一样的。 先来建立测试文件的目录结构。首先在 comments 应用的目录下建立一个名为 tests 的 Python 包#xff0c;然后删除 comments 应用… 文章目录1. 前言2. 数据基类3.测试 Comment Model4. 测试视图函数5. 测试模板标签1. 前言 comments应用的测试和blog应用测试的套路是一样的。 先来建立测试文件的目录结构。首先在 comments 应用的目录下建立一个名为 tests 的 Python 包然后删除 comments 应用下 django 自动生成的 tests.py 文件防止和 tests 包冲突再根据需要测试的内容创建相应的 Python 模块。最终 tests 目录结构如下其中 base.py 用于存放各个测试用例的公共的数据初始化基类。 2. 数据基类 由于评论必须和文章关联因此我们首先来写一个数据基类用于初始化生成文章数据其它测试类继承这个数据基类从而不用在每个测试类里都写一遍创建文章数据的代码了。数据基类写在 base.py 模块里 文件位置comments/tests/base.py from django.apps import apps from django.contrib.auth.models import User from django.test import TestCasefrom blog.models import Category, Postclass CommentDataTestCase(TestCase):def setUp(self):apps.get_app_config(haystack).signal_processor.teardown()self.user User.objects.create_superuser(usernameadmin,emailadminhellogithub.com,passwordadmin)self.cate Category.objects.create(name测试)self.post Post.objects.create(title测试标题,body测试内容,categoryself.cate,authorself.user,)要注意创建文章数据时使用 apps.get_app_config(‘haystack’).signal_processor.teardown() 断开创建索引的信号 3.测试 Comment Model 先回顾一下comments应用的models.py from django.db import models from django.utils import timezoneclass Comment(models.Model):name models.CharField(名字, max_length50)email models.EmailField(邮箱)url models.URLField(网址, blankTrue)text models.TextField(内容)created_time models.DateTimeField(创建时间, defaulttimezone.now)post models.ForeignKey(blog.Post, verbose_name文章, on_deletemodels.CASCADE)class Meta:verbose_name 评论verbose_name_plural verbose_nameordering [-created_time]def __str__(self):return {}: {}.format(self.name, self.text[:20])Comment Model 的代码逻辑比较简单测试起来也很简单 文件位置comments/tests/test_models.py from .base import CommentDataTestCase from ..models import Commentclass CommentModelTestCase(CommentDataTestCase):def setUp(self):super().setUp()self.comment Comment.objects.create(name评论者,emailaa.com,text评论内容,postself.post,)def test_str_representation(self):self.assertEqual(self.comment.__str__(), 评论者: 评论内容) 4. 测试视图函数 我们只有一个发表评论的视图函数首先回顾一下 from blog.models import Post from django.shortcuts import get_object_or_404, redirect, render from django.views.decorators.http import require_POSTfrom .forms import CommentForm from django.contrib import messagesrequire_POST def comment(request, post_pk):# 先获取被评论的文章因为后面需要把评论和被评论的文章关联起来。# 这里我们使用了 Django 提供的一个快捷函数 get_object_or_404# 这个函数的作用是当获取的文章Post存在时则获取否则返回 404 页面给用户。post get_object_or_404(Post, pkpost_pk)# django 将用户提交的数据封装在 request.POST 中这是一个类字典对象。# 我们利用这些数据构造了 CommentForm 的实例这样就生成了一个绑定了用户提交数据的表单。form CommentForm(request.POST)# 当调用 form.is_valid() 方法时Django 自动帮我们检查表单的数据是否符合格式要求。if form.is_valid():# 检查到数据是合法的调用表单的 save 方法保存数据到数据库# commitFalse 的作用是仅仅利用表单的数据生成 Comment 模型类的实例但还不保存评论数据到数据库。comment form.save(commitFalse)# 将评论和被评论的文章关联起来。comment.post post# 最终将评论数据保存进数据库调用模型实例的 save 方法comment.save()messages.add_message(request, messages.SUCCESS, 评论发表成功, extra_tagssuccess)# 重定向到 post 的详情页实际上当 redirect 函数接收一个模型的实例时它会调用这个模型实例的 get_absolute_url 方法# 然后重定向到 get_absolute_url 方法返回的 URL。return redirect(post)# 检查到数据不合法我们渲染一个预览页面用于展示表单的错误。# 注意这里被评论的文章 post 也传给了模板因为我们需要根据 post 来生成表单的提交地址。context {post: post,form: form,}messages.add_message(request, messages.ERROR, 评论发表失败请修改表单中的错误后重新提交。, extra_tagsdanger)return render(request, comments/preview.html, contextcontext) 根据视图函数的逻辑需要测试以下几点 只处理 POST 请求其它请求将返回 405 Method Not Allowed 错误码。如果评论的文章不存在返回 404 错误码。如果提交的评论内容有错误例如 email 格式不正确将渲染 preview.html 预览页面并且预览页面显示评论出错的消息提醒和评论表单中包含的错误。提交的内容合法则创建评论用户被重定向回被评论文章的详情页页面中包含评论成功的消息提醒。 具体代码如下 文件位置comments/tests/test_views.py from django.apps import apps from django.contrib.auth.models import User from django.urls import reversefrom blog.models import Category, Postfrom ..models import Comment from .base import CommentDataTestCaseclass CommentViewTestCase(CommentDataTestCase):def setUp(self) - None:super().setUp()self.url reverse(comments:comment, kwargs{post_pk: self.post.pk})def test_comment_a_nonexistent_post(self):url reverse(comments:comment, kwargs{post_pk: 100})response self.client.post(url, {})self.assertEqual(response.status_code, 404)def test_invalid_comment_data(self):invalid_data {email: invalid_email,}response self.client.post(self.url, invalid_data)self.assertTemplateUsed(response, comments/preview.html)self.assertIn(post, response.context)self.assertIn(form, response.context)form response.context[form]for field_name, errors in form.errors.items():for err in errors:self.assertContains(response, err)self.assertContains(response, 评论发表失败请修改表单中的错误后重新提交。)def test_valid_comment_data(self):valid_data {name: 评论者,email: aa.com,text: 评论内容,}response self.client.post(self.url, valid_data, followTrue)self.assertRedirects(response, self.post.get_absolute_url())self.assertContains(response, 评论发表成功)self.assertEqual(Comment.objects.count(), 1)comment Comment.objects.first()self.assertEqual(comment.name, valid_data[name])self.assertEqual(comment.text, valid_data[text]) 在 test_invalid_comment_data 测试用例。这个测试用例中我们构造了一个缺失评论内容、评论人名字且邮箱格式不正确的数据然后将其提交了评论。接着就是对预期结果的断言。这里关键的一点是渲染的预览页面应该包含提示用户的表单错误。所以我们从响应的上下文变量中取得表单 form 这个模板变量。接着使用如下代码获取表单的错误并断言响应中是否包含了这些错误 for field_name, errors in form.errors.items():for err in errors:self.assertContains(response, err)一旦表单绑定了数据并且 is_valid 方法被调用就会有一个 errors 属性参考评论视图函数中表单的处理逻辑。errors 属性是一个类字典对象如果表单数据不包含错误则为空如果包含错误数据则其键为包含错误数据的字段名称值为该字段错误提示构成的列表一个字段可能包含多个错误所以是一个列表。例如这里的 form.errors如果将其打印出来使用 print(repr(form.errors))str 方法返回的内容是经渲染的 ul 列表可以看到它的内容如下 {name: [这个字段是必填项。], email: [输入一个有效的 Email 地址。], text: [这个字段是必填项。]}test_valid_comment_data 中我们构造合法的评论内容并提交预期结果是评论提交成功后重定向到被评论文章的详情页所以使用了 assertRedirects 进行断言。 注意 self.client.post(self.url, valid_data, followTrue) 传入的 followTrue 参数。由于评论成功后需要重定向因此传入 followTrue表示跟踪重定向因此返回的响应是最终重定向之后返回的响应即被评论文章的详情页如果传入 False则不会追踪重定向返回的响应就是一个响应码为 302 的重定向前响应。 对于重定向响应使用 assertRedirects 进行断言这个断言方法会对重定向的整个响应的过程进行检测默认检测的是响应码从 302 变为 200。 5. 测试模板标签 上一篇中介绍过模板标签的测试方法。基本套路就是代替 django 视图函数自动渲染模板内容的过程手工构造一个包含待测试模板标签的模板然后手工渲染其内容断言渲染后的内容是否包含预期的内容。具体代码请看源代码这里不再一一讲解只将涉及的几个新的表单操作进行一个简单介绍。 class CommentExtraTestCase(CommentDataTestCase):# ...省略其它测试用例的代码def test_show_comment_form_with_invalid_bound_form(self):template Template({% load comments_extras %}{% show_comment_form post form %})invalid_data {email: invalid_email,}form CommentForm(datainvalid_data)self.assertFalse(form.is_valid())context Context(show_comment_form(self.ctx, self.post, formform))expected_html template.render(context)for field in form:label label for{}{}/label.format(field.id_for_label, field.label)self.assertInHTML(label, expected_html)self.assertInHTML(str(field), expected_html)self.assertInHTML(str(field.errors), expected_html)看到循环表单 form 的语句 for field in form:label label for{}{}/label.format(field.id_for_label, field.label) 我们这里使用了 field 的两个属性id_for_label 和 id_for_label分别是 django 表单自动生成的表单字段 label 的 id 和 label 名。别的就没什么好说的了就是不停地断言页面包含预期的 HTML 内容。 至此我们完成了对 blog 应用和 comment 应用这两个核心 app 的测试。现在我们想知道的是到底我们的测试效果怎么样呢测试充分吗测试全面吗还有没有没有测到的地方呢 单凭肉眼观察难以回答上面的问题接下来我们就借助一个工具从代码覆盖率的角度来检测一下我们的测试效果究竟如何。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/83131.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站不续费能下载的网站

使用vrrp协议做双机冷备 VRRP组网下同网段内配置基于全局地址池的DHCP服务器示例 DHCP服务器备份(冗余)实验 centos7 keepalived 主备通信 防火墙vrrp 协议 缺点:主备的地址池范围不能重复,否则主备切换的时候可能从不同DHCP服务…

除了网页外 网站还需要无忧seo

1. 简介 堆栈又名栈(stack),他是计算机科学中最基础的数据结构之一。可以算是一种受限制的线性结构,,具有后进先出(LIFO, Last In First Out)的特性。由于此特性,堆栈常用…

南宁营销型网站建设网站建设注册什么公司好

目录 系列目录 写在前面​ 完整代码 下载代码 代码分析 写在后面 系列目录 序号直达链接表白系列1Python制作一个无法拒绝的表白界面2Python满屏飘字表白代码3

用来网站备案注册什么公司好网站建设技术线路选择

一、Gym Gym是OpenAI开发的一个强化学习算法测试环境集合包。Gym提供了多种标准的环境,包括经典的游戏(如Atari游戏)、机器人模拟任务以及其他各种类型的问题,供开发者测试和训练强化学习智能体。在Gym环境中,开发者可…

衣服网站设计wordpress文章采集助手

1.栈 模型: 栈模型和一个杯子差不多,一端开口,一端封闭,开口的那端叫栈顶,封闭的那端叫栈底,如图所示 介绍: 元素进入栈中叫进栈/压栈,元素出来叫出栈,元素进栈后会先来…

国外获奖网站数字媒体应用 网站开发

背景: 随着国家针对人工智能出台的政策越来越多了,很多国企也纷纷进入了该行业进行了布局,就连2024这次的高考的语文作文都是人工智能。 高考作文:新课标I卷 阅读下面的材料,根据要求写作。(60分&#xf…

快速优化网站排名搜索外地公司做的网站能备案吗

随着电子设备的普及,我们的视频文件可能来自各种不同的源头,如何高效地管理和查找这些文件成为了一个问题。今天,我们将为您提供一个完美的解决方案——自动归类并统一重命名视频文件。 首先,第一步,我们要进入文件批…

模板网站 优帮云wordpress主题d8

一、ChatGPT的应用: 随着更多人接触并使用GPT,大众普遍赞同了一点:ChatGPT实在是用户体验超棒! 现在大家认为最出色的版本无疑是3.5和4.0。通过使用他们,会清楚的发现: GPT-4.0在综合技能上的表现无疑更…

海淀网站设计做网站公司 陕西渭南

核心指令:proxy_pass 反向代理设置指令 学习Nginx服务器的反向代理服务,要涉及与后端代理服务器相关 的配置指令比较重要,是为客户端提供正常Web服务的基础,大家 应该熟练掌握尤其是proxy_pass指令,在实际应用过程中需…

深圳市建设网站黑河做网站哪家好

本文涉及到定时器和串口的知识,详细内容可见博主STM32速成笔记专栏。 文章目录 一、TB6612简介二、TB6612使用方法2.1 TB6612引脚连接2.2 控制逻辑2.3 电机调速 三、实战项目3.1 项目简介3.2 初始化GPIO3.3 PWM初始化3.3 电机控制程序3.4 串口接收处理函数 一、TB66…

网页.网站.主页.网址.域名有什么联系泰安建设网站

C的一个指针占内存几个字节? 结论: 取决于是64位编译模式还是32位编译模式(注意,和机器位数没有直接关系) 在64位编译模式下,指针的占用内存大小是8字节在32位编译模式下,指针占用内存大小是4字…

电商网站运营流程wordpress主题支持菜单

三目运算符是JavaScript中常用的一种条件语句,也称为条件运算符。它由问号(?)和冒号(:)组成,用于根据条件的真假返回不同的值。在本篇文章中,我将详细介绍三目运算符的语法、用法和实例&#x…

如何建设网站知乎wordpress 相册模式

总览 我们将讨论的主题包括使用Spring Batch进行批处理的基本概念,以及如何将数据从CSV导入数据库。 0 – Spring Batch CSV处理示例应用程序 我们正在构建一个应用程序,该应用程序演示Spring Batch处理CSV文件的基础。 我们的演示应用程序将允许我们处…

网站怎么优化排名的方法搜狗识图

大数据治理:数字时代的关键密码 在信息技术飞速发展的今天,数字化浪潮席卷全球,深刻地改变着我们的生活和工作方式。数据,作为数字化时代的核心资产,正以前所未有的速度增长和积累。据国际数据公司(IDC&am…

西安找公司建网站wordpress网站文章排版插件

问题与解决方案 在使用Appium进行iOS自动化测试时,可能会遇到各种问题。 以下是一些常见的问题及其解决方案: 无法启动inspector问题 最新版本的Appium已经将内置的inspector独立了出去,需要单独安装inspector进行调试。确保inspector对应…

门户网站建设模式包括网站群和商城手机网站建设多少钱

实现效果如下 类似 推箱子小游戏 的变种 C/C版本 BFS最短路径 黑色代表墙壁 不能越过 蓝色代表HOME点 灰色代表要找的小箱子 绿色代表路径 最终目标是将灰色的小箱子移动到蓝色的HOME点 需要两次搜索 第一次是 出发点到灰色小箱子 第二次是灰色小箱子到蓝色HOME点 BF…

建设代练网站简述网站的推广策略

Time Limit: 10 second Memory Limit: 2 MB 问题描述 同一平面内有n(n≤500)条直线,已知其中p(p≥2)条直线相交与同一点,则这n条直线最多能将平面分割成多少个不同的区域? Input 两个整数n&am…

高端型网站建设邯郸wap网站建设报价

假期第二篇,对于基础的知识点,我感觉自己还是很薄弱的。 趁着假期,再去复习一遍 之前已经记录了一篇【vue3基础知识点-computed和watch】 今天在学习的过程中发现,之前记录的这一篇果然是很基础的,很多东西都讲的不够…

可以随意建国际商城的网站吗苏州天狮建设监理有限公司网站

🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…