通常一个物联网站站包含许多固定的信息,比如网站名称,第三方工具的访问密钥等。虽然可以把站点的全局参数写在settings.py中,但是这不利于可视化的维护的修改。如果采用数据库的方式,就要确保只有一条记录有效,并且不允许添加更多的记录。这里介绍一种在Django中实现数据库中保存站点参数的方法。
1.安装和启用
只需要增加一个包:
pip install django-solo
然后在settings.py中的INSTALLED_APPS添加solo或solo.apps.SoloAppConfig
2. 定义站点数据库
# models.py from django.db import models from solo.models import SingletonModel class SiteConfiguration(SingletonModel): site_name = models.CharField(max_length=255, default='Site Name') maintenance_mode = models.BooleanField(default=False) def __str__(self): return "Site Configuration" class Meta: verbose_name = "Site Configuration"
3. 注册到后台
# admin.py from django.contrib import admin from solo.admin import SingletonModelAdmin from config.models import SiteConfiguration admin.site.register(SiteConfiguration, SingletonModelAdmin)
这样就可以用了
4. 补充
如果要在其它地方引用,可以参考如下:
# There is only one item in the table, you can get it this way: from .models import SiteConfiguration config = SiteConfiguration.objects.get() # get_solo will create the item if it does not already exist config = SiteConfiguration.get_solo()