mirror of
https://github.com/django/django.git
synced 2024-12-28 03:55:50 +00:00
[5.0.x] Fixed #35084 -- Recommended 'django_' prefix for reusable app modules.
Backport of 05f124348e
from main
This commit is contained in:
parent
ef8234aef8
commit
4818a139f7
@ -121,16 +121,17 @@ Python *packaging* refers to preparing your app in a specific format that can
|
|||||||
be easily installed and used. Django itself is packaged very much like
|
be easily installed and used. Django itself is packaged very much like
|
||||||
this. For a small app like polls, this process isn't too difficult.
|
this. For a small app like polls, this process isn't too difficult.
|
||||||
|
|
||||||
#. First, create a parent directory for ``polls``, outside of your Django
|
#. First, create a parent directory for the package, outside of your Django
|
||||||
project. Call this directory ``django-polls``.
|
project. Call this directory ``django-polls``.
|
||||||
|
|
||||||
.. admonition:: Choosing a name for your app
|
.. admonition:: Choosing a name for your app
|
||||||
|
|
||||||
When choosing a name for your package, check resources like PyPI to avoid
|
When choosing a name for your package, check PyPI to avoid naming
|
||||||
naming conflicts with existing packages. It's often useful to prepend
|
conflicts with existing packages. We recommend using a ``django-``
|
||||||
``django-`` to your module name when creating a package to distribute.
|
prefix for package names, to identify your package as specific to
|
||||||
This helps others looking for Django apps identify your app as Django
|
Django, and a corresponding ``django_`` prefix for your module name. For
|
||||||
specific.
|
example, the ``django-ratelimit`` package contains the
|
||||||
|
``django_ratelimit`` module.
|
||||||
|
|
||||||
Application labels (that is, the final part of the dotted path to
|
Application labels (that is, the final part of the dotted path to
|
||||||
application packages) *must* be unique in :setting:`INSTALLED_APPS`.
|
application packages) *must* be unique in :setting:`INSTALLED_APPS`.
|
||||||
@ -138,19 +139,35 @@ this. For a small app like polls, this process isn't too difficult.
|
|||||||
</ref/contrib/index>`, for example ``auth``, ``admin``, or
|
</ref/contrib/index>`, for example ``auth``, ``admin``, or
|
||||||
``messages``.
|
``messages``.
|
||||||
|
|
||||||
#. Move the ``polls`` directory into the ``django-polls`` directory.
|
#. Move the ``polls`` directory into ``django-polls`` directory, and rename it
|
||||||
|
to ``django_polls``.
|
||||||
|
|
||||||
|
#. Edit ``django_polls/apps.py`` so that :attr:`~.AppConfig.name` refers to the
|
||||||
|
new module name and add :attr:`~.AppConfig.label` to give a short name for
|
||||||
|
the app:
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
:caption: ``django-polls/django_polls/apps.py``
|
||||||
|
|
||||||
|
from django.apps import AppConfig
|
||||||
|
|
||||||
|
|
||||||
|
class PollsConfig(AppConfig):
|
||||||
|
default_auto_field = "django.db.models.BigAutoField"
|
||||||
|
name = "django_polls"
|
||||||
|
label = "polls"
|
||||||
|
|
||||||
#. Create a file ``django-polls/README.rst`` with the following contents:
|
#. Create a file ``django-polls/README.rst`` with the following contents:
|
||||||
|
|
||||||
.. code-block:: rst
|
.. code-block:: rst
|
||||||
:caption: ``django-polls/README.rst``
|
:caption: ``django-polls/README.rst``
|
||||||
|
|
||||||
=====
|
============
|
||||||
Polls
|
django-polls
|
||||||
=====
|
============
|
||||||
|
|
||||||
Polls is a Django app to conduct web-based polls. For each question,
|
django-polls is a Django app to conduct web-based polls. For each
|
||||||
visitors can choose between a fixed number of answers.
|
question, visitors can choose between a fixed number of answers.
|
||||||
|
|
||||||
Detailed documentation is in the "docs" directory.
|
Detailed documentation is in the "docs" directory.
|
||||||
|
|
||||||
@ -161,19 +178,18 @@ this. For a small app like polls, this process isn't too difficult.
|
|||||||
|
|
||||||
INSTALLED_APPS = [
|
INSTALLED_APPS = [
|
||||||
...,
|
...,
|
||||||
"polls",
|
"django_polls",
|
||||||
]
|
]
|
||||||
|
|
||||||
2. Include the polls URLconf in your project urls.py like this::
|
2. Include the polls URLconf in your project urls.py like this::
|
||||||
|
|
||||||
path("polls/", include("polls.urls")),
|
path("polls/", include("django_polls.urls")),
|
||||||
|
|
||||||
3. Run ``python manage.py migrate`` to create the polls models.
|
3. Run ``python manage.py migrate`` to create the models.
|
||||||
|
|
||||||
4. Start the development server and visit http://127.0.0.1:8000/admin/
|
4. Start the development server and visit the admin to create a poll.
|
||||||
to create a poll (you'll need the Admin app enabled).
|
|
||||||
|
|
||||||
5. Visit http://127.0.0.1:8000/polls/ to participate in the poll.
|
5. Visit the ``/polls/`` URL to participate in the poll.
|
||||||
|
|
||||||
#. Create a ``django-polls/LICENSE`` file. Choosing a license is beyond the
|
#. Create a ``django-polls/LICENSE`` file. Choosing a license is beyond the
|
||||||
scope of this tutorial, but suffice it to say that code released publicly
|
scope of this tutorial, but suffice it to say that code released publicly
|
||||||
@ -251,8 +267,8 @@ this. For a small app like polls, this process isn't too difficult.
|
|||||||
|
|
||||||
include LICENSE
|
include LICENSE
|
||||||
include README.rst
|
include README.rst
|
||||||
recursive-include polls/static *
|
recursive-include django_polls/static *
|
||||||
recursive-include polls/templates *
|
recursive-include django_polls/templates *
|
||||||
|
|
||||||
#. It's optional, but recommended, to include detailed documentation with your
|
#. It's optional, but recommended, to include detailed documentation with your
|
||||||
app. Create an empty directory ``django-polls/docs`` for future
|
app. Create an empty directory ``django-polls/docs`` for future
|
||||||
@ -266,8 +282,8 @@ this. For a small app like polls, this process isn't too difficult.
|
|||||||
you add some files to it. Many Django apps also provide their documentation
|
you add some files to it. Many Django apps also provide their documentation
|
||||||
online through sites like `readthedocs.org <https://readthedocs.org>`_.
|
online through sites like `readthedocs.org <https://readthedocs.org>`_.
|
||||||
|
|
||||||
#. Try building your package with ``python setup.py sdist`` (run from inside
|
#. Try building your package by running ``python setup.py sdist`` inside
|
||||||
``django-polls``). This creates a directory called ``dist`` and builds your
|
``django-polls``. This creates a directory called ``dist`` and builds your
|
||||||
new package, ``django-polls-0.1.tar.gz``.
|
new package, ``django-polls-0.1.tar.gz``.
|
||||||
|
|
||||||
For more information on packaging, see Python's `Tutorial on Packaging and
|
For more information on packaging, see Python's `Tutorial on Packaging and
|
||||||
@ -299,14 +315,21 @@ working. We'll now fix this by installing our new ``django-polls`` package.
|
|||||||
|
|
||||||
python -m pip install --user django-polls/dist/django-polls-0.1.tar.gz
|
python -m pip install --user django-polls/dist/django-polls-0.1.tar.gz
|
||||||
|
|
||||||
#. With luck, your Django project should now work correctly again. Run the
|
#. Update ``mysite/settings.py`` to point to the new module name::
|
||||||
server again to confirm this.
|
|
||||||
|
|
||||||
#. To uninstall the package, use pip:
|
INSTALLED_APPS = [
|
||||||
|
"django_polls.apps.PollsConfig",
|
||||||
|
...,
|
||||||
|
]
|
||||||
|
|
||||||
.. code-block:: shell
|
#. Update ``mysite/urls.py`` to point to the new module name::
|
||||||
|
|
||||||
python -m pip uninstall django-polls
|
urlpatterns = [
|
||||||
|
path("polls/", include("django_polls.urls")),
|
||||||
|
...,
|
||||||
|
]
|
||||||
|
|
||||||
|
#. Run the development server to confirm the project continues to work.
|
||||||
|
|
||||||
Publishing your app
|
Publishing your app
|
||||||
===================
|
===================
|
||||||
@ -326,7 +349,7 @@ the world! If this wasn't just an example, you could now:
|
|||||||
Installing Python packages with a virtual environment
|
Installing Python packages with a virtual environment
|
||||||
=====================================================
|
=====================================================
|
||||||
|
|
||||||
Earlier, we installed the polls app as a user library. This has some
|
Earlier, we installed ``django-polls`` as a user library. This has some
|
||||||
disadvantages:
|
disadvantages:
|
||||||
|
|
||||||
* Modifying the user libraries can affect other Python software on your system.
|
* Modifying the user libraries can affect other Python software on your system.
|
||||||
|
Loading…
Reference in New Issue
Block a user