Skip to main content
# django-settings-custom
A Django interactive command for configuration file generation.

## Getting It

```
pip install django-settings-custom
```

## Installing It

To enable `django_settings_custom` in your project you need to add it to `INSTALLED_APPS` in your projects
`settings.py` file:
```
INSTALLED_APPS = (
...
'django_settings_custom',
...
)
```

## Using It

Create a template for your target conf.ini like
```ini
[DATABASE]
NAME = { USER_VALUE }
HOST = { USER_VALUE }
PORT = { USER_VALUE }

[DATABASE_CREDENTIALS]
USER = { USER_VALUE }
PASSWORD = { ENCRYPTED_USER_VALUE }

[DJANGO]
KEY = { DJANGO_SECRET_KEY }

# A constant field
[LDAP]
LDAPGRP = 'ldaps://myldap'
```

Add `settings.py` file
```python
SETTINGS_TEMPLATE_FILE = 'PATH_TO_YOUR_TEMPLATE_CONFIGURATION_FILE'
SETTINGS_FILE_PATH = 'TARGET_FOR_CONFIGURATION_FILE'
```

Launch in command line
```
python manage.py generate_settings
```

## Results
![](results.gif)

The command ask user to fill missing values from template:
```
[user@localhost a_project]$ ./manage.py generate_conf
** Configuration file generation: **

** Configuration file generation: **
Do you want to generate the secret key for Django ? (Y/n) : y
Django secret key generated

** Enter values for configuration file content **

Value for [DATABASE] NAME: database_name
Value for [DATABASE] HOST: database_host
Value for [DATABASE] PORT: 900
Value for [DATABASE_CREDENTIALS] USER: my_user
Value for [DATABASE_CREDENTIALS] PASSWORD (will be encrypted): my_pass

Writing file at /home/user/a_project/conf.ini:
Configuration file successfully generated.
[user@localhost a_project]$
```

It generates the file /home/user/a_project/conf.ini:
```ini
[DATABASE]
NAME = database_name
HOST = database_host
PORT = 900

[DATABASE_CREDENTIALS]
USER = my_user
PASSWORD = JbAwLj5Zwz8lMrvcUZq5sP/v6eaUFY5E7U8Fmg63vxI=

# A constant field
[LDAP]
LDAPGRP = 'ldaps://monldap'

[DJANGO]
KEY = w)r13ne4=id9_8xdojir)3)%%5m3r$co#jwj_)4d*_%%!0+f#sro
```

## Customization

### Don't use Django settings
If you want add variables to your Django settings file, you can inherit `generate_settings.Command` to specify command options :
```python
from django_settings_custom.management.commands import generate_settings


class Command(generate_settings.Command):
settings_template_file = 'The/settings/template/file_path.ini'
settings_file_path = 'The/target/settings/file_path.ini'
```

### Adding custom tag
To add a custom tag, you can inherit `generate_settings.Command` and override the method `get_value` :

```python
import random
from django_settings_custom.management.commands import generate_settings


class Command(generate_settings.Command):

@staticmethod
def get_value(section, key, value_type, secret_key):
if value_type == 'RANDOM_VALUE':
return random.uniform(0, 100)
return super(Command, Command).get_value(section, key, value_type, secret_key)
```

Or a little more complex example :

```python
from django.core.management.base import CommandError
from django_settings_custom.management.commands import generate_settings


class Command(generate_settings.Command):

@staticmethod
def get_value(section, key, value_type, secret_key):
int_less_10 = value_type == 'INT_LESS_THAN_10'
if int_less_10:
value_type = 'USER_VALUE'
value = super(Command, Command).get_value(section, key, value_type, secret_key)
if int_less_10:
try:
value = int(value)
if value >= 10:
raise CommandError('This field needs an int less than 10.')
except ValueError:
raise CommandError('This field needs an int.')
return value
```


Metadata

Release files for django-settings-custom 1.0.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for django-settings-custom 1.0.2
File Size Uploaded
django-settings-custom-1.0.2.tar.gz 4.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for django-settings-custom 1.0.2
File Interpreter ABI Platform
django_settings_custom-1.0.2-py2.py3-none-any.whl Python 3, Python 2 none any Details

Total release size: 11.2 kB

Release files / django-settings-custom-1.0.2.tar.gz

Download URL django-settings-custom-1.0.2.tar.gz
Size 4.8 kB
Tags Source
SHA-256 checksum
How to use checksums
7e8ac0c916fce096816970f8b4aa3732f50af26270109f4a3fe2f2571b532a92
BLAKE2b-256 checksum
How to use checksums
5ea9d0cd1c93ee08970600a6622a129b82cb08b09444193bd325ce17bfa7c8e5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/1.12.1 pkginfo/1.4.2 requests/2.20.0 setuptools/39.0.1 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.6.6

Release files / django_settings_custom-1.0.2-py2.py3-none-any.whl

Download URL django_settings_custom-1.0.2-py2.py3-none-any.whl
Size 6.4 kB
Tags Python 2 Python 3
SHA-256 checksum
How to use checksums
6e80c587e8438a60a0c56aebd25bbdde24468f18f2117adca518dd8fe9115edc
BLAKE2b-256 checksum
How to use checksums
90c1d11cf9ffddc8b3a4273d08d46715a34177071651b20f924ee255e71f29ec
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/1.12.1 pkginfo/1.4.2 requests/2.20.0 setuptools/39.0.1 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.6.6

Release history Release notifications | RSS feed

1.1.1

2 release files

1.1.0

2 release files

1.0.9

2 release files

1.0.8

2 release files

1.0.7

2 release files

1.0.6

2 release files

1.0.5

2 release files

1.0.4

2 release files

1.0.3

2 release files

This release

1.0.2 This release

2 release files

1.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page