Django可重用应用程序,用于从数据库文本字段创建物理文件。
项目描述
Django Filesify有助于从数据库中存储的文本内容生成物理文件,并可通过Django管理界面访问。文件内容可以是纯文本或加密字段。
要求
Python 3.6+
Django 3.1+
可选:django-mirage-field
可选:Pip 22+
使用方法
在您的Django模型中扩展Filesify类并定义您的自定义字段
对于纯文本内容
from filesify.models import Filesify class MyConfigModel(Filesify): class Meta: verbose_name = "Some config file" verbose_name_plural = "Some config files"
对于加密内容
如果您的文件内容是敏感信息,您可以决定对其进行加密。这将对您来说是透明的,因为由django-filesify提供的file_content字段将在模型保存时加密,并在管理员显示之前解密。
对于加密内容,需要django-mirage-field。
您可以通过以下方式安装django-mirage-field:
pip install django-mirage-fields
扩展CryptoFilesify
from filesify.models import CryptoFilesify class MyConfigModel(CryptoFilesify): class Meta: verbose_name = "Some config file" verbose_name_plural = "Some config files"
关于抽象模型
模型字段
模型类提供了以下字段
file_path:要生成的文件的路径。
file_content:文本文件内容 - 无论是纯文本还是加密的,这取决于所使用的混合。
comment:用于关于文件的可选注释的TextField。
文件生成
混合类使用在file_content字段中提供的文件内容生成文件。文件生成将在save()方法上触发,这意味着在创建或更新模型实例时会自动执行。
# This create 'example.txt' containing 'Hello, World!' obj = MyConfigModel() obj.file_path = "/tmp/example.txt" obj.file_content = "Hello, World!" obj.save() # Equivalent to: obj = MyConfigModel(file_path="/tmp/example.txt", file_content="Hello, World!") # The file generation can be triggered manually like this: obj.create_file()
文件删除
当删除Filesify对象时,磁盘上的文件也将被删除。这是通过覆盖模型 delete() 方法来实现的。
Filesify管理员
Django Filesify提供了一个可以如此使用的admin类
from django.contrib import admin from my_app.models import MyConfigModel from filesify.admin import FilesifyAdmin @admin.register(MyConfigModel) class MyConfigModelAdmin(FilesifyAdmin): pass # Or using the alternate way: class MyConfigModel(FilesifyAdmin): pass admin.site.register(MyConfigModel, MyConfigModel)
该admin类包含一个自定义操作,用于删除选定的对象及其关联的磁盘文件。
单个文件实例
有时,您的项目只需要一个单独的文件实例。在这种情况下,Django Filesify可以与Django Solo(一个处理单例数据库模型的第三方应用程序)一起使用。
要实现这一点,请安装Django Solo并将其与Filesify一起用于您的模型和admin类。
单例模型
from django.db import models from django_solo.models import SingletonModel from filesify.models import Filesify class MyConfigModel(SingletonModel, Filesify): class Meta: verbose_name = "Some Config File" verbose_name_plural = "Some Config File"
单例管理员
from django.contrib import admin from django_solo.admin import SingletonModelAdmin from filesify.admin import FilesifyAdmin from my_app.models import MyConfigModel @admin.register(MyConfigModel) class MyConfigModelAdmin(SingletonModelAdmin, FilesifyAdmin): pass
在迁移后使用Filesify
Django Filesify提供了一个混入类,可以在运行数据库迁移后自动创建文件。
使用方法
from django.apps import AppConfig from filesify.mixins import FilesifyPostMigrateMixin class MyAppConfig(FilesifyPostMigrateMixin, AppConfig): default_auto_field = "django.db.models.BigAutoField" name = "my_app"
这将发现所有扩展自Filesify抽象模型的模型,并将创建相应的文件。
限制到模型
如果您想限制要查看的模型列表,可以使用带有 filesify_limit_to_models 属性的点分路径模型列表。如果 filesify_limit_to_models 为None,则调用不带参数的管理命令,考虑所有模型。
class MyAppConfig(FilesifyPostMigrateMixin, AppConfig): default_auto_field = "django.db.models.BigAutoField" name = "my_app" filesify_limit_to_models = ["my_app.MyConfigModel"]
Filesify基础混入
如果您正在寻找一种通用的方式来从扩展自Filesify类的模型生成文件,您可以使用 filesify.mixins.FilesifyBaseMixin 类。
from my_app.filesify import SomeGenericClass something = SomeGenericClass() something.filesify_limit_to_models = ['my_app.MyConfigModel1', 'my_app.MyConfigModel2'] something.create_files()
注意您如何可以可选地限制文件创建应该查看的模型。
为Django Filesify做出贡献
如果您已经有了运行中的django环境,您可以在接收项目中将django-filesify以“可编辑”模式安装。
在项目文件夹外部某个地方获取包源代码,在这个例子中,我们将使用父文件夹。
cd you/working/django/project/ git clone https://github.com/lazybird/django-filesify.git ../django-filesify/ or git clone git@github.com:lazybird/django-filesify.git ../django-filesify/
现在,../django-filesify/ 中的代码是您将进行更改的地方。
您可以在工作项目中以“可编辑”模式安装该包。这里我们假设您位于项目的虚拟环境中。
pip uninstall django-filesify # just in case you have it already... pip install --editable ../django-filesify/
运行测试
python ../django-filesify/filesify/tests/runtests.py pytest ../django-filesify/filesify/tests/tests.py --ds=filesify.tests.settings
项目详情
下载文件
为您的平台下载文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。