在本地yaml(或json)文件中定义django设置

django-yamlconf的Python项目详细描述


#django-yamlconf

`django-yamlconf'是vmware支持开源开发和社区的一部分。


处理基于yaml的django设置:根据django项目名从yaml文件加载django设置。加载的yaml文件从包含django设置文件的目录中的yaml
文件开始,然后从初始文件向目录树加载
任何其他yamlconf文件。值
从目录树上方的文件到目录树下方的文件。yaml文件的
内容简单地定义了标准django设置文件的over ride(或add to)
属性的值,例如,对于项目
"buildaudit",settings.py文件可以包含:

``python
``debug=true
````

发展的价值。这可以通过使用以下定义的"buildaudit.yaml"
文件重新定义:

```python
debug:false
````


文件名不需要与项目名匹配,它可以位于文件系统中的任何位置。


请参阅许可证文件。


\usage


yamlconf定义通过在设置文件中调用"load"函数添加到django设置文件中。这通常会
在设置文件的末尾。最简单且
可能是正常的用法是不带参数地调用。yamlconf将从调用堆栈推断
项目信息。对于标准的django
应用程序结构,设置文件:

````
myproject/myproject/settings.py
````


设置文件将以调用"load"函数结束。
可以在"load"函数之后定义其他定义以更新条件定义,例如,如果启用了"debug"。

``python
import django_yamlconf

databases={
"default":{
'名称':'示例',
'用户':'示例',
'密码':'示例',
'主机':'本地主机',

}
}




```

"myproject.yaml"将放在
位置,其中包含生产数据库的主机名和示例用户的密码
(假设生产使用相同的数据库名
和用户名)。在这个例子中,使用随机"pwgen"密码:

``yaml
数据库。默认值。密码:'zibiemohud6foh0'
数据库。默认值。主机:'myproject db.eng.vmware.com'
````

有关其他可选
参数的详细信息,请参阅"加载"函数。

命令

yamlconf包括三个管理命令(需要将"django_yamlconf"添加到"installed_apps"以添加这些命令):

*`ycexplain`:解释定义属性值的位置

*`yclist`:列出通过yamlconf定义的属性值

*` ycsysfiles`:基于属性控制的模板文件创建系统控制文件


可以使用返回值字典的
方法扩展管理命令可用的属性。方法名可以在"settings"文件中定义
,也可以通过yamlconf文件通过属性
"yamlconf-attribute-functions"定义,例如

``yaml
yamlconf-attribute-functions:
-"health-checks.ycattrs.attributes"
```

这些附加的attibutes
主要与"ycsysfiles"命令一起使用。


` ycexplain`提供了有关为应用程序加载的yaml
文件集定义的值的信息,以及有关目录树结构中较低的已被覆盖的属性值的任何文档和信息。对于
示例,对于"debug"属性:

```
$python manage.py ycexplain debug
----
debug="false"(通过/u/mrohan/clients/xmpl/buildaudit.yaml")


文档:
启用或禁用调试功能。在生产服务器上,这个属性应该设置为false

列出通过yaml文件定义的属性,
例如:

`` shell
$python manage.py yclist
列出yamlconf管理的属性

>允许的主机['localhost']
备份配置目录{base目录}/backup
base目录/home/mrohan/clients/osstp yc/webapps
control_file{webapps_dir}/osstpmgt.yaml
databases.default.conn_max_age 600
databases.default.host{dbhost}
databases.default.name{dbname}
databases.default.password{dbpassword}
数据库。默认值。user{dbuser}
dbhost localhost
dbname osstp
dbpassword a-password
dbuser osstp
安装目录/var/oss/osstp
管理py{webapps{u dir}/manage.py
操作系统机器x86
操作系统节点mrohan osstp yc
操作系统处理器x86
操作系统版本4.4.0-101-通用
Linux操作系统mrohan
虚拟环境/home/mrohan/clients/venv
webapps目录{base目录}
yamlconf目录文件{base目录}/osstpmgt/templates/sys

属性
```

\ycsysfiles`命令

ycsysfiles`管理命令支持根据通过yamlconf文件定义的属性创建系统
控制文件,例如apache配置文件。该命令按属性扫描由
定义的目录,例如:

``yaml
yamlconf_sysfiles_dir:'{base_dir}/templates/sys'
````


通过剥离"yamlconf_sysfiles_dir"
前缀并展开属性引用(是的,此
目录下的路径将包含{`和`}字符),将其映射到文件系统路径。

2。如果映射文件存在,并且可以写入运行
`ycsysfiles`命令的用户,它将使用由
django模板引擎生成的内容进行更新,其中yamlconf定义的属性
可用于模板中的替换或用于条件语句。

例如,"examples"目录下的django教程实现包含mysite/templates/sys目录,模板
文件:

1。` etc/apache2/sites available/mysite.conf`,这个模板将用于创建系统文件`/etc/apache2/sites available/mysite.conf`
(ubuntu系统上的apache站点配置文件)。

2。`{base_dir}/sysfiles.txt`,此模板将用于创建
file`sysfiles.txt`相对安装django应用程序的目录。例如,如果安装在`/var/mysite`,将创建文件
`/var/mysite/sysfiles.txt'。

可用属性可以使用
`yamlconf_attribute_functions`attribtue进行扩展。这使得基于
的属性在处理文件时可用,例如,django应用程序数据库的内容。例如,在"ycattrs.py"文件中
(通常与"settings.py"文件位于同一目录中):

``python
def userlist():
返回{
"users":user.objects.all(),
}
````

\例如,设置数据库连接的密码:


``yaml
databases.default.password:some secret password
```

yamlconf将忽略该设置。

应使用点符号更新设置文件中已定义的词典。要添加新字典,应使用yaml字典定义,例如:

```yaml
new嫒字典:
key1:value1
key2:value2
````

属性值是根据其他属性值定义的,
通常使用基目录定义其他目录。
yamlconf允许使用名为
格式语法的python引用其他属性,例如:

``yaml
log-dir:"{base-dir}/log"
`````

":raw"限定符应定义为
,以修改属性的行为,例如,用法:

``yaml
logging.formatters.simple.format:"(asctime)s%(levelname)s%(message)s'
logging.formatters.simple.format:raw:true
```

在调试上下文中),例如,将url定义添加到应用程序中:

url(r'^yamlconf/',include('django_yamlconf.urls'),

将显示yamlconf属性。对于较旧版本的django,需要明确定义
`namespace`名称空间:

>url(r'^yamlconf/',include('django_yamlconf.url',namespace='django_yamlconf'),

显示的页面示例是:

![属性索引页](images/yamlconf-list.png"yamlconf index page")


默认情况下,任何名为
的字符串为"password"的属性值都将在HTML中隐藏其值。其他敏感的
值可以通过定义限定符属性显式隐藏,例如:

``yaml
``api key:'my api key'
apikey:hide:true
````

限定符属性`:prepend`和`:append`
可用于扩展底层定义,例如,添加另一个admin
用户,可以使用以下定义:

``yaml
admins:append:'someuser@vmware.com'
```

当给定一个列表时,该属性将使用额外的值进行扩展,例如:

``yaml
admins:append:
-'someuser1@vmware.com'
-'someuser2@vmware.com'
```

只是无序的列表。但是,这里有一些值,顺序很重要,特别是
"中间件"列表。短接
请求处理的中间件需要放在列表的开头。这就是`:prepend`功能的基本原理。

通过属性替换:

`base\u dir`
释放python解释程序的串行值

"platform.machine()"函数的值,例如"x86-u 64`

"os-node`
"platform.node()"函数的值,系统简称

`os_processor`
`platform.machine()`函数的值,例如'x86_64`

`os_release`
`platform.release()`函数的值,例如'4.4.0-101-generic`

`os_system`
`platform.system()'函数的值,例如,`linux`

`top_dir`
base_dir上面的目录

当前用户的登录名

`virtual_env`
如果在python虚拟环境中运行,则将此属性定义为环境的路径,否则它具有值`` none`

attribute documentation

将`:doc`附加到yaml文件中的属性名定义了该属性的documentation
字符串。这应该用于提供有关属性的
预期值的信息,以及该值在生产服务器、
测试服务器和开发服务器上的差异,例如,调试属性
的文档将使用yaml定义:

`` yaml
调试:doc:
启用或禁用调试功能。在生产服务器上,该属性应设置为false
``

这个
将包含生产密码、调试设置等。在这个
目录下,一个"webapps"目录可以包含另一个"buildaudit.yaml"
文件,该文件可能由一个生成过程生成,该生成过程可以定义属性
标识生成、代码的git散列,最后是建造时间等,
一个"buildaudit.yaml"文件,与settings.py文件位于同一位置,该文件提供
基本属性及其文档字符串:

````
+-/var/www
+-buildaudit.yaml
+-webapps
+-buildaudit.yaml
+-buildaudit
+-buildaudit.yaml
+-settings.py
````

其他方法
被导出,并在这里被记录,但是这些
方法只能由管理命令使用。


django设置模块
*`attributes`,要添加的名称/值对字典
*`source`,源的名称(由'ycexplain'显示)

将一组名称-值对添加到属性集,例如在管理命令的命令行上定义的属性
。由于这在django加载设置后
发生,因此此函数*通常不会*更改django的行为。它用于从
管理命令行添加属性定义。虽然这不会影响
django的行为,但它确实使属性可用于
ycsysfiles命令。


django设置模块

返回一个提供属性名和相关值的字典。
当呈现"ycsysfiles"命令的模板
时,此字典用作变量。

stream=sys.stdout)
``


参数:
*`name`,yamlconf控制的设置名称
*`settings`,django设置模块
*`stream`,编写解释文本的流


解释属性定义的源,包括被高级yaml定义文件覆盖的源。如果属性
具有相关文档,则也会打印该属性。

设置模块
*`stream`,写入列表文本的流


将yamlconf管理的属性列表写入给定流。附加的
信息可以使用"explain"例程打印。



默认值为"yaml.load"。其他的可能性可能是使用json格式的文件,甚至是pickle格式的文件,但这会很奇怪。
`syntax`名称也用作yamlconf文件的文件扩展名。
`syntax`参数用'load'方法命名python模块,例如,
默认情况下,`yaml`支持用'load'方法从
文件加载定义。其他的可能性可能是"json"使用json格式的文件
,甚至是"pickle",但这会很奇怪。"syntax"名称也用作yamlconf文件的文件扩展名。
*"settings"是包含django设置的模块。如果没有给定模块,则由调用堆栈确定。
*`base_dir`,搜索yamlconf文件时的起始目录,
默认为包含设置模块的目录。
*`project`,django项目的名称,默认为包含设置模块的目录的名称。


加载django项目的yaml文件集。最简单的用法是在设置文件的末尾调用它。在这种情况下,不需要
参数。

存在于系统上且可写。
*`no op`,no op mode,打印将要执行的操作。
*`settings`,django settings模块
*`rootdir`,创建系统文件的目录,默认为`/`,
,即根文件系统。
*`render`,渲染引擎,如果没有给定,默认为django的
` render_to_string`

用法:

``yaml
admins:
-jsmith
-auser
manager:"{admins}"
````

*预定义的属性还应包括主机IP地址

`来自
[django项目](https://www.django project.com/)网站的polls`example。这个例子有两种风格:


1。在Django之下目录"examples/django-1.11"中的1.11版
2。在目录"examples/django-2.0"中的django版本2.0下

*` init`初始化应用程序的本地sqlite数据库(如果正在尝试,应该
是执行的第一个目标。
*`run server`运行本地服务器
*yamlconf的通用工具目标:`yclist`,` ycexplan和
`ycsysfiles`.

模块):

``yaml
数据库。默认值:
引擎:django.db.backends.postgresql_psycopg2
名称:mysite
用户:mysite
密码:我的密码
主机:本地主机
端口:''
````

主要分支

版本1.0.0


*首次公开发布(标记为"v1.0.0")

贡献

Django YamlConf"项目团队欢迎来自
社区的贡献。在开始使用"django yamlconf"之前,请阅读我们的[开发人员原始证书](https://cla.vmware.com/dco)。必须按照
页上的说明签署所有对此存储库的
贡献。您的签名证明您编写了修补程序或有权将其作为开源修补程序传递。有关更多详细信息,
请参阅[contribution.md](contribution.md)。


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

推荐PyPI第三方库


热门话题
安卓中的java标签长点击问题   JavaSpringMVC多行表单提交提交新的ModelAttribute   程序来查找java程序中的方法数   在JSF中自动选择java下拉列表   java onNext为ArrayList的每个元素触发,而不是使用RXJava触发一次   为什么java不允许创建内部类的实例?   JavaJSF<p:calendar>小部件在选择不同月份时不会刷新   java如何限制JFileChooser只允许选择特定数量的文件?   java ANT build无法识别geckodriver可执行文件“驱动程序可执行文件不存在”   java TextView空指针异常   java试图在安卓中传递参数   如何将XML配置转换为Java   java支持使用JAXRPC的soap服务,但pom中没有定义它。xml   在Java中检查整个ArrayList