python应用体系_python-大型django应用程序体系结构

如何适当地构建一个较大的Django网站,以保持可测试性和可维护性?

本着最好的django精神(我希望),我们开始时不太关心网站不同部分之间的去耦.我们确实将其分为不同的应用程序,但是通过共同使用模型类和直接方法调用,它们直接相互依赖.

这变得越来越纠结.例如,我们的一项操作/服务如下所示:

def do_apply_for_flat(user, flat, bid_amount):

assert can_apply(user, flat)

application = Application.objects.create(

user=user, flat=flat, amount=bid_amount,

status=Application.STATUS_ACTIVE)

events.logger.application_added(application)

mails.send_applicant_application_added(application)

mails.send_lessor_application_received(application)

return application

该功能不仅执行实际的业务流程,不执行功能,它还处理事件记录并向相关用户发送邮件.我认为这种方法没有内在的错误.但是,正确地推理代码甚至测试应用程序变得越来越困难,因为从知识和程序上分离各个部分变得越来越困难.

因此,我的问题是,大男孩如何构建应用程序,使得:

>可以隔离测试应用程序的不同部分

>通过仅启用特定测试确实需要的零件,测试可以保持快速

>减少代码耦合

我对这个问题的看法是引入一个集中的信号中心(单个python文件中只是一堆django信号),单个django应用可以发布或订阅.上面的示例函数将发布一个application_added事件,邮件和事件应用程序将监听该事件.然后,为了进行有效的测试,我将断开不需要的部分.这也大大增加了解耦,因为服务根本不需要知道发送邮件.

但是,我不确定,因此对这些问题的公认做法非常感兴趣.

解决方法:

将应用程序的某些部分转移到不同的微服务.这将使您的应用程序的某些部分专注于正确执行一两项操作(例如,事件记录,电子邮件).代码耦合也减少了,站点的不同部分也可以单独进行测试.

The microservice architecture style involves developing a single application as a collection of smaller services that communicates usually via an API.

您可能需要使用类似Flask的较小框架.

资源:

有关微服务的更多信息,请单击此处:

标签:python,django

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

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

相关文章

Postman入门到精通01

1、什么是接口? 电脑:USB,投影仪 作用:数据传输 软件:API(application Program Interface),微信提现和充值接口,支付宝支付,银联支付接口(鉴权…

python oracle orm_Python ORM

本章内容ORM介绍如果写程序用pymysql和程序交互,那是不是要写原生sql语句。如果进行复杂的查询,那sql语句就要进行一点一点拼接,而且不太有重用性,扩展不方便。而且写的sql语句可能不高效,导致程序运行也变慢。为了避免…

前端校验和后端校验区别

前台验证数据格式 后台验证的是数据的正确性 当下流行的系统架构方案中,前端和后端都是分离开的。 目的:① 为了方便前端开发人员和后端开发人员可以同时开发;② 前后端分离也使得前后端的代码可以分开进行管理,方便了各自的版…

unittest-ddt报错AttributeError: type object ‘forTestDDT‘ has no attribute ‘test_2‘

unittest 添加多个ddt数据驱动后,报错: FAILED (errors1)Error Traceback (most recent call last):File "D:\Anaconda3\lib\unittest\case.py", line 60, in testPartExecutoryieldFile "D:\Anaconda3\lib\unittest\case.py", lin…

socket timeout是什么引起的_MySQL C API 参数 MYSQL_OPT_READ_TIMEOUT 的一些行为分析

作者:戴岳兵MYSQL_OPT_READ_TIMEOUT 是 MySQL c api 客户端中用来设置读取超时时间的参数。在 MySQL 的官方文档中,该参数的描述是这样的:MYSQL_OPT_READ_TIMEOUT (argument type: unsigned int *)The timeout in seconds for each attempt t…

python动态爬取知乎_python爬虫从小白到高手 Day2 动态页面的爬取

今天我们说说动态页面的抓取,动态页面的概念不是说网页上的内容是活动的,而是刷新的内容由Ajax加载,页面的URL没有变化,具体概念问度娘。就以男人都喜欢的美女街拍为例,对象为今日头条。chrome打开今日头条 ->搜索开…

Python操作文件,报FileNotFoundError: [Error 2] No such file or directory错误

python操作文件时,报No such file or directory错误。 多次检查目录、文件名、语法都是对的。 折腾一番后,打开文件所在文件夹,并显示所有文件后缀名,才发现此文件并没有txt后缀名 解决方法: 添加文件的.txt后缀名&a…

python多标签分类_如何通过sklearn实现多标签分类?

sklearn支持多类别(Multiclass)分类和多标签(Multilabel)分类:多类别分类:超过两个类别的分类任务。多类别分类假设每个样本属于且仅属于一个标签,类如一个水果可以是苹果或者是桔子但是不能同时属于两者。多标签分类:给每个样本分…

练习ddt-file_data时,报错UnboundLocalError local variable ‘value‘ referenced before assignment

错误原因就是,在xx.yml中的内容无效 更改之前: 更改之后: 注意冒号后面要有空格 改完之后运行就能正确读取到了

python筛选数据求均值_Python Pandas实现数据分组求平均值并填充nan的示例

Python实现按某一列关键字分组,并计算各列的平均值,并用该值填充该分类该列的nan值。DataFrame数据格式fillna方式实现groupby方式实现DataFrame数据格式以下是数据存储形式:fillna方式实现1、按照industryName1列,筛选出业绩2、筛…

HTMLTestRunner.py内容

HTMLTesstRunner.py 修改后内容如下: """ A TestRunner for use with the Python unit testing framework. It generates a HTML report to show the result at a glance.The simplest way to use this is to invoke its main method. E.g.import u…

卷积神经网络原理_人脸识别背后,卷积神经网络的数学原理原来是这样的

在自动驾驶、医疗以及零售这些领域,计算机视觉让我们完成了一些直到最近都被认为是不可能的事情。卷积神经网络可能是这一巨大成功背后的关键组成模块。这次,我们将要使用卷积神经网络的思想来拓宽我们对神经网络工作原理的理解。简介过去我们接触到了密…

unittest读取ddt之-元组,嵌套元组,字典

注: (1)ddt数据驱动中,测试用例的执行次数是由data()传参的个数决定。传几个参数,就是执行几次测试用例。 (2)如果传的是多个元组(列表),那么可…

负载均衡策略_常见的负载均衡策略

轮询(Round Robin): 这种方法就会将收到的请求循环分配到服务器集群中的每台机器,即有效服务器。如果使用这种方式,所有的标记进入虚拟服务的服务器应该有相近的资源容量以及敷在相同的应用程序。如果所有的服务有相同或者相近的性能那么选择…

unittest-读取yaml文件

注: (1)yaml文件详解 yaml是一种数据格式,类似txt,excel,json 它只有两种数据类型: map对象(键值对,冒号后需要有空格) list列表对象,以-开头 读取之后是一个不定长…

白盒测试-修正条件判定覆盖

当程序中的判定语句包含多个条件时,运用多条件覆盖方法进行测试,其条件取值组合数目是非常大的。 修正条件判定覆盖要求在一个程序中每一种输入输出至少得出现一次,在程序中的每一个条件必须产生所有可能的输出结果至少一次,并且…

springboot整合shiro_Springboot整合Shiro:简洁的身份认证

简单的web应用进行身份认证的流程:1.对未认证的用户请求进行拦截,跳转到认证页面。2.用户通过用户名密码及其他凭证进行身份认证,认证成功跳转成功页面,认证失败提示相关失败信息。根据流程,采用shiro进行快速开发。1.…

python回车键绑定按钮_python tkinter 绑定回车键

# _*_ coding:utf-8_*_from Tkinter import *def submit(ev None):p.set(u.get())root Tk()root.title("测试")frame Frame(root)frame.pack(padx8, pady8, ipadx4)lab1 Label(frame, text"获取:")lab1.grid(row0, column0, padx5, pady5, stickyW)#绑…

2024年【安全生产监管人员】考试及安全生产监管人员模拟考试题库

题库来源:安全生产模拟考试一点通公众号小程序 2024年【安全生产监管人员】考试及安全生产监管人员模拟考试题库,包含安全生产监管人员考试答案和解析及安全生产监管人员模拟考试题库练习。安全生产模拟考试一点通结合国家安全生产监管人员考试最新大纲…

PICT工具安装使用

1、安装PICT 通过下载安装包pict33.msi, 链接:https://pan.baidu.com/s/1YWIA5XLNI0MMFkiQ-EqZ9w 提取码:ho7g 解压安装,安装成功后验证:打开cmd命令终端,输入pict显示如下即证明安装成功。 2、新建Mod…