如何在django views.py中运行管理命令

Raf*_*bir 3 python django django-database

我将在我当前的应用程序中使用django-dbbackup.我的任务是在从UI按下"备份数据库"按钮时使用custom_name.db备份我最新的sqlite3数据库,并在按下"恢复此备份"时从现有备份列表中恢复备份.

在django-dbbackup中有两个管理命令,dbbackup和dbrestore用作

dbbackup [-s <servername>] [-d <database>] [--clean] [--compress] [--encrypt]
Run Code Online (Sandbox Code Playgroud)

dbrestore [-d <database>] [-s <servername>] [-f <localfile>]
Run Code Online (Sandbox Code Playgroud)

现在我的问题是,如果我有原始数据库名称original_db.db并且我想将此db重命名备份为db_current_data_time.db,那么views.py方法应该是什么?

Roh*_*han 9

你可以调用命令的运行manage.py使用call_command

from django.core import management
management.call_command('your_command', your_options)
Run Code Online (Sandbox Code Playgroud)

因此,在各自的备份和还原视图中,您可以调用命令.


sha*_*ker 5

虽然你可以使用call_command呼叫管理命令,实在是不理想的。管理命令应该由人从 shell 交互运行,而不是从视图中调用。

如果你想提供两个管理命令网络操作,请将您的管理命令的胆量到一个单独的功能(我推荐myapp/operations/foo)。然后重构您的管理命令以利用此独立功能。一旦成功,重构您的视图以调用相同的操作(函数),传入相同的参数。

这将允许该管理命令和视图之间最佳的代码共享,会为您的核心逻辑更理智编写测试。