我正在开发一个 django 项目,该项目除了有一个用于其模型和关系的数据库外,还写入一个名为activity_logs
项目目录之外的日志目录,以跟踪格式化的用户活动,每个用户一个文件。这是另一种基于文件结构的解决方案,而不是让数据库表携带这些信息,因为这会从数据库中卸载一些存储,并且相对容易格式化和表达此类活动。也许你们中的一些人可能会建议将这种数据存储在数据库中,这很好,但我仍然相信所有这些都存在我需要帮助回答的问题。
这个 django 项目有多个应用程序,它们具有广泛的测试套件,每个应用程序一个。此外,还有一个logging.py
文件封装了日志记录功能(向/从日志文件写入/读取活动),因此测试套件中的测试用例以及视图功能(以及各种其他实用程序功能)都使用这些日志记录功能,以便存储这些用户活动并根据模型关系检索它们以模拟用户通知系统。由于 logging 模块负责此日志记录,它需要知道写入到哪里,因此我们有一个名为的目录结构activity_logs
它向其中写入用户日志文件,为新用户创建一个,为从数据库中删除的用户删除一个。我们希望在这个项目中进行的最新更改之一是创建一个单独的日志目录来测试此日志记录功能,例如test_activity_logs
,以便在写入测试用户的测试目录或常规活动日志时不会混淆真实用户的目录。
我的问题是:在运行时,我如何告诉系统,无论是在哪个执行起点(无论是通过 django 测试Client
对象的视图函数调用、测试用例、通过 URL 发出的实际 HTTPrequest 等) ,什么时候看里面的activity_logs
还是test_activity_logs
目录?这完全取决于我是为真实用户还是测试用户生成新信息,但是用户是我们系统中的用户,我在试图告诉这些调用一些日志记录函数的函数写入到测试日志目录与常规目录。例如,我正在尝试的一种方法是将关键字参数 (kwarg) 传递给日志记录函数,以便它们可以知道要读/写哪个目录,如下所示:
self.assertTrue(activity_has_been_logged(ACTIVITY_ACCOUNT_CREATED, user.get_profile(), use_test_activity_log_directory=True) == True)
调用的 kwarguse_test_activity_log_directory=True
将告诉调用的日志记录函数activity_has_been_logged
读取测试活动日志目录。不幸的是,除了有点不灵活(但可以容忍)之外,这并不能解决 django 测试client
对象通过 URL 将 GET 或 POST 请求发送到将活动写入日志文件的视图函数的情况:
response = client.post(propose_match_url, post) #Can't write to test_log_directory if by default it writes to regular directory!
如何让客户端将此 kwarg 传递给那些视图函数?我认为完全可以做到这一点,但我不确定摆弄这些 kwargs 是否是最好的方法,或者可能在项目设置文件中创建一个全局变量,但这可能会导致一些竞争条件问题具有共享的可变变量。
你的帮助会很棒。提前致谢!