Просмотр исходного кода

Update plugins development docs

Jonathan Senecal 3 лет назад
Родитель
Сommit
d4a7af8a89
1 измененных файлов с 12 добавлено и 0 удалено
  1. 12 0
      docs/plugins/development/index.md

+ 12 - 0
docs/plugins/development/index.md

@@ -14,6 +14,7 @@ Plugins can do a lot, including:
 * Provide their own "pages" (views) in the web user interface
 * Inject template content and navigation links
 * Extend NetBox's REST and GraphQL APIs
+* Load additionnal Django Apps
 * Add custom request/response middleware
 
 However, keep in mind that each piece of functionality is entirely optional. For example, if your plugin merely adds a piece of middleware or an API endpoint for existing data, there's no need to define any new models.
@@ -82,6 +83,7 @@ class FooBarConfig(PluginConfig):
     default_settings = {
         'baz': True
     }
+    django_apps = ["foo", "bar", "baz"]
 
 config = FooBarConfig
 ```
@@ -101,6 +103,7 @@ NetBox looks for the `config` variable within a plugin's `__init__.py` to load i
 | `base_url`            | Base path to use for plugin URLs (optional). If not specified, the project's `name` will be used.                        |
 | `required_settings`   | A list of any configuration parameters that **must** be defined by the user                                              |
 | `default_settings`    | A dictionary of configuration parameters and their default values                                                        |
+| `django_apps`         | A list of additionnal apps to load alongside the plugin                                                                  |
 | `min_version`         | Minimum version of NetBox with which the plugin is compatible                                                            |
 | `max_version`         | Maximum version of NetBox with which the plugin is compatible                                                            |
 | `middleware`          | A list of middleware classes to append after NetBox's build-in middleware                                                |
@@ -112,6 +115,15 @@ NetBox looks for the `config` variable within a plugin's `__init__.py` to load i
 
 All required settings must be configured by the user. If a configuration parameter is listed in both `required_settings` and `default_settings`, the default setting will be ignored.
 
+#### Important notes about `django_apps`
+
+Loading additional apps may cause more harm than good and could lead to make identifying problems within NetBox itself more difficult. The `django_apps` attribute is intented to be used only for advanced use-cases that require a deeper Django integration.
+
+Apps from this list are inserted *before* the plugin's `PluginConfig` in the same order. Adding the plugin's `PluginConfig` module to this list changes this behavior and allows for apps to be loaded *after* the plugin.
+
+Any additionnal app must be installed within the the same Python environment as NetBox or `ImproperlyConfigured` exceptions will be raised when loading the plugin.
+
+
 ## Create setup.py
 
 `setup.py` is the [setup script](https://docs.python.org/3.8/distutils/setupscript.html) used to package and install our plugin once it's finished. The primary function of this script is to call the setuptools library's `setup()` function to create a Python distribution package. We can pass a number of keyword arguments to control the package creation as well as to provide metadata about the plugin. An example `setup.py` is below: