Django配置实用程序,用于管理项目中的多个“网站”。

site_config的Python项目详细描述


##关于

[![构建状态](https://travis-ci.org/imaginaryscapture/django_site_config.svg?branch=master)"(https://travis ci.org/imaginaryscapture/django_site_config)
[![下载](https://pypip.in/download/site_-config/badge.svg)(https://pypi.python.org/pypi/site_-config/)

此模块为您提供了一个api,允许您对django
应用程序进行编码,以便这些应用程序可以将自己的
分割成多个部分,并且每个
部分都有不同的设置。

例如,假设我想在两个不同的
url路径下使用同一个应用程序,并且对这两个路径都有不同的行为(不同的设置)。

/mysite1/myapp/
/mysite2/myapp/


另外,假设我想通过管理界面在这些不同的
url上启用或禁用单个应用程序。

另外,假设我想有一个一致的方法来定义这些应用程序的设置。



此模块帮助您完成这些任务。






install from pip



>pip install site_-config





>install from github


>git-clone https://github.com/imaginaryarylandscap/django_site_-config.git
























后端。
siteconfig后端负责从/到持久位置获取和设置设置。

当前,此模块中存在两个后端:

-model_backend
-settings_backend

model_backend在一组数据库中存储配置设置。它允许在管理界面的
中自定义给定应用程序的设置,并允许在应用程序中为不同的
"网站"设置不同的设置。选择此后端将启用django
管理模块来设置这些设置。

设置后端是一个使用settings.py的简单后端。这个
不是动态的;当应用程序需要设置时,这个后端只是从settings.py中查找它。




ackends.settings_backend',

如果使用模型后端,则在models.py中定义的网站、应用程序和
website application模型应显示在
django管理中。如果使用设置后端,则不应显示这些设置。

"base.html"模板的ts
可以扩展变量。与
在项目的"base.html"模板中包含所有模板逻辑不同,
您可以将此逻辑移到另一个模板(
实例的"base-site.html")并具有"base.html"be:

{%extends base-template;默认值:"base-site.html"%}

文档),您可以在
站点的模板文件夹中创建一个"base_site.html"模板,如果存在,将使用该模板。


如果未定义此设置,则默认为模型后端。


使用"decise\u base\u template"上下文时,默认的
基本模板应该是什么样的
处理器。如果这个上下文处理器不是used,此设置没有
效果。



有效值
为:"禁用"、"限制"或"启用"默认值为"启用"

-siteconfig_cheather_message(可选)=当siteconfig_siteapp_status设置为
"限制"时,设置帘幕



/>
如果使用model_后端,则需要运行以下命令:

./manage.py syncdb
./manage.py migrate





1.创建配置类

create在django应用程序的初始化py、
models.py或django第一次执行时调用的其他位置添加以下类。定义"application_short_name"和
"application_verbose_name"属性。

实现"get_default_configs()"方法。这必须返回
配置字典,其中键是应用程序的配置
变量,值是嵌套元数据
字典。


每个嵌套字典必须包含3个键:
-default=键will take
-field=用于验证值的django字段实例
-help(可选)=描述键的帮助文本项
-choices(可选)=约束输入的元组列表。
仅适用于与choicefield类似的字段作为构造函数一部分的选项
即(('a_short_name','a text'),('b_short_name','b text'))


您还需要使用"register()"
方法注册配置类。


请参见下面的示例:

/path/to/myproject/myapp/\u init__.py

导入站点配置


类foo site config(站点配置.siteconfigbase):


application_short_name="foo"
application_verbose_name="foo application"

您需要自定义用于给定配置的后端

def get_backend(self):
backend=getattr(settings,'site config_backend_default',
'site_config.backends.model_backend.databasebackend')
return后端

def get_default_configs(self):
返回{'test_a':{'default':"test a default",
'field':'django.forms.charfield',
'help':'test a help text.},
"测试B":{默认值:1,
"字段":"django.forms.integerfield",
"帮助":"测试B帮助文本"。}

site_config.registy.config_registry.register(myappsiteconfig)

2。通过enable_disable_website()decorator启用和禁用URL

要使用django_site_config启用和禁用特定视图的功能,您需要按如下方式包装您的URL。
要使用此网站切换功能,您需要
作为url字符串的一部分传入"website"kwarg。


/path/to/myproject/myapp/urls.py

from django.conf.urls导入模式,include,url
from site_config.decorators import enable_disable_website,decorated_includes
from example.app_foo im端口fooconfig
从.views导入indexview

=[
url('^(?)p<;website>;[\w-]+)/foo/$',
启用禁用网站(index view.as_view(
template_name='index.html'),fooconfig),
{},
name="app_foo_index"
]


一个完整的include

url patterns+=修饰的include(lambda func:启用/禁用网站(func,barconfig),
模式('',url(r'^(?)p<;website>;[\w-]+)/bar/',include('example.app_bar.url'))



注意:根据django文档,您还可以使用此enable_disable_website()函数装饰django cbv或fbv。

注意:您的视图必须接受"website"关键字参数。

3.允许模板覆盖

此模块还提供了一种覆盖
特定站点模板的方法。


对于基于函数的视图

通常,如果FBV在URL中定义了模板名称参数,则视图将查找t模板文件通过
普通模板加载链。


包装单个url

urlpatterns=[
url('^(?)p<;website>;[\w-]+)/foo/$',
网站模板覆盖(index view.as_view(
模板名称='index.html'),
{},
名称='app_foo_index"
]


轮胎包括

url patterns+=装饰包括(网站模板覆盖,
图案('',url(r'^(?)p<;website>;[\w-]+)/bar/',
include('example.app_bar.urls'))


启用禁用网站(func,barconfig),
网站模板覆盖,

模式('',url(r'^(?)p<;website>;[\w-]+)/bar/',
include('example.app_bar.url'))


网站变量可用于
视图逻辑。

/path/to/myproject/myapp/views.py

/>返回render_to_response(模板名,
{config':config,},
context_instance=requestcontext(请求))

乘坐行为。

/path/to/myproject/myapp/views.py


from site_config.utils import websiteoveritetemplateviewmixin
from site_config.decorators import website_template_override
from example.app_bar import barconfig

class indexview(websiteoverridetemplateviewmixin,templateview):

def dispatch(self,request,*args,**kwargs):
self.website=kwargs.get('website',none)
self.config=barconfig(website=self.website)
return super(indexview,self)。dispatch(request,*args,**kwargs))

def获取上下文数据(self,**kwargs):
kwargs['config']=self.config
kwargs['website']=self.website
返回Kwargs

4。通过调用设置
,您可以访问视图或模板中的设置,就像调用config类中的属性一样。

下面是一个用法示例:

ass必须在视图中实例化,每次请求视图时都将适当的
网站传递给构造器(或无)。



S标记为
"谢幕"。注意,默认模板扩展了"base.html"
,因此这需要出现在应用程序中。

站点配置/限制.html



欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java重写父类中的特定行   java Apache Commons CLI订购帮助选项?   java如何将数据添加到网格视图   java如何在Apache Camel批处理后移动文件?   java如何为日期范围的between子句编写hql查询?   雅加达ee开始Java编程,我应该从哪里开始?   排序Java8+流:检查我的objectinstances的两个字段的列表顺序是否正确   java如何将json转换为Map<String,Object>确保整数为整数   java不能在Spring数据JPA批处理过程中创建TransactionException   java损坏的PDF文件从FTP下载到使用Apache Common Net的设备   java无法使用Spring批处理和Wso2为XML架构命名空间找到Spring NamespaceHandler   java Android ImageView未显示在SherlockFragment中   Maven在构建时出错=无法识别Java路径   java如何使用批处理文件调用关闭处理程序?   java admob广告横幅重叠我的游戏屏幕安卓