Tutorial lanjut: Bagaimana menulis aplikasi digunakan kembaliLink to this heading

This advanced tutorial begins where Tutorial 8 left off. We'll be turning our web-poll into a standalone Python package you can reuse in new projects and share with other people.

If you haven't recently completed Tutorials 1–8, we encourage you to review these so that your example project matches the one described below.

Hal-hal dapat digunakan kembaliLink to this heading

Adalah pekerjaan banyak untuk merancang, membangun, mencoba dan merawat aplikasi jaringan. Banyak proyek Phyton dan Django berbagi masalah umum. Bukankah bagus jika kami dapat menyimpan beberapa pekerjaan berulang ini?

Dapat digunakan kembali adalah cara hidup dalam Python. The Python Package Index (PyPI) memiliki jangkauan luas dari paket-paket anda dapat gunakan dalam program Python anda. Periksa Django Packages untuk aplikasi-aplikasi yang dapat digunakan kembali yang anda anda dapat bekerjasama dalam proyek anda. Django itu sendiri merupakan paket biasa Python. Ini berarti bahwa anda dapat mengambil paket Python yang ada atau aplikasi Django dan menyusun mereka kedalam proyek jaringan anda sendiri. Anda hanya butuh menulis bagian yang membuat proyek anda unik.

Mari kita katakan anda sedang memulai proyek baru yang butuh aplikasi jejak pendapat seperti satu yang kite telah kerjakan. Bagaimana anda ingin membuat aplikasi ini dapat digunakan kembali? Untungnya, anda sudah sedang dalam perjalanan. Dalam Tutorial 1, kai lihat bagaimana kami dapat memisahkan jejak pendapat dari URLconf tingkat-proyek menggunakan include. Dalam tutorial ini, kami akan mengambil langkah lebih jauh untuk membuat aplikasi lebih mudah digunakan dalam proyek baru dan siap untuk diterbitkan untuk lainnya untuk dipasang dan digunakan.

Proyek anda dan aplikasi digunakan kembali andaLink to this heading

After the previous tutorials, our project should look like this:

Text
djangotutorial/
    manage.py
    mysite/
        __init__.py
        settings.py
        urls.py
        asgi.py
        wsgi.py
    polls/
        __init__.py
        admin.py
        apps.py
        migrations/
            __init__.py
            0001_initial.py
        models.py
        static/
            polls/
                images/
                    background.png
                style.css
        templates/
            polls/
                detail.html
                index.html
                results.html
        tests.py
        urls.py
        views.py
    templates/
        admin/
            base_site.html

You created djangotutorial/templates in Tutorial 7, and polls/templates in Tutorial 3. Now perhaps it is clearer why we chose to have separate template directories for the project and application: everything that is part of the polls application is in polls. It makes the application self-contained and easier to drop into a new project.

Direktori polls sekarang dapat disalin kedalam proyek Django baru dan segera digunakan kembali. Dia tidak siap untuk diterbitkan. Untuk itu, kami butuh untuk memaketkan aplikasi agar membuatnya mudah untuk lainnya dipasang.

Memasang beberapa prasyaratLink to this heading

The current state of Python packaging is a bit muddled with various tools. For this tutorial, we're going to use setuptools to build our package. It's the recommended packaging tool (merged with the distribute fork). We'll also be using pip to install and uninstall it. You should install these two packages now. If you need help, you can refer to how to install Django with pip. You can install setuptools the same way.

Memaketkan aplikasi andaLink to this heading

Pemaketan Phyton mengacu pada menyiapkan aplikasi anda di bentuk khusus yang dapat mudah dipasang dan digunakan. Django itu sendiri dipaketkan seperti ini. Untuk aplikasi jecil seperti jejak pendapat, pengolahan ini tidak terlalu sulit.

  1. First, create a parent directory for the package, outside of your Django project. Call this directory django-polls.

  2. Move the polls directory into django-polls directory, and rename it to django_polls.

  3. Edit django_polls/apps.py so that name refers to the new module name, add label to give a short name for the app, and set default_auto_field to ensure your migrations are not affected by changes to DEFAULT_AUTO_FIELD made by users of your reusable app:

    django-polls/django_polls/apps.py
    Python
    from django.apps import AppConfig
    
    
    class PollsConfig(AppConfig):
        default_auto_field = "django.db.models.BigAutoField"
        name = "django_polls"
        label = "polls"
    
  4. Buat berkas django-polls/README.rst dengan isi berikut:

    django-polls/README.rst
    Rst
    ============
    django-polls
    ============
    
    django-polls is a Django app to conduct web-based polls. For each
    question, visitors can choose between a fixed number of answers.
    
    Detailed documentation is in the "docs" directory.
    
    Quick start
    -----------
    
    1. Add "polls" to your INSTALLED_APPS setting like this::
    
        INSTALLED_APPS = [
            ...,
            "django_polls",
        ]
    
    2. Include the polls URLconf in your project urls.py like this::
    
        path("polls/", include("django_polls.urls")),
    
    3. Run ``python manage.py migrate`` to create the models.
    
    4. Start the development server and visit the admin to create a poll.
    
    5. Visit the ``/polls/`` URL to participate in the poll.
    
  5. Buat berkas django-polls/LICENSE. Memilih lisensi diluar lingkup dari tutorial ini, tetapi mencukupinya untuk dikatakan bahwa kode diterbitkan umum tanpa lisensi adalah tidak berguna. Django dan banyak aplikasi Sesuai-Django disebarkan dibawah lisensi BSD; bagaimanapun, anda bebas mengambil lisensi anda sendiri. Hanya waspada bahwa pilihan lisensi anda akan mempengaruhi siapa yang dapat menggunakan kode anda.

  6. Next we'll create the pyproject.toml file which details how to build and install the app. A full explanation of this file is beyond the scope of this tutorial, but the Python Packaging User Guide has a good explanation. Create the django-polls/pyproject.toml file with the following contents:

    django-polls/pyproject.toml
    Toml
    [build-system]
    requires = ["setuptools>83"]
    build-backend = "setuptools.build_meta"
    
    [project]
    name = "django-polls"
    version = "0.1"
    dependencies = [
        "django>=X.Y",  # Replace "X.Y" as appropriate
    ]
    description = "A Django app to conduct web-based polls."
    readme = "README.rst"
    license = "BSD-3-Clause"
    requires-python = ">= 3.12"
    authors = [
        {name = "Your Name", email = "yourname@example.com"},
    ]
    classifiers = [
        "Environment :: Web Environment",
        "Framework :: Django",
        "Framework :: Django :: X.Y",  # Replace "X.Y" as appropriate
        "Intended Audience :: Developers",
        "Operating System :: OS Independent",
        "Programming Language :: Python",
        "Programming Language :: Python :: 3",
        "Programming Language :: Python :: 3 :: Only",
        "Programming Language :: Python :: 3.12",
        "Programming Language :: Python :: 3.13",
        "Programming Language :: Python :: 3.14",
        "Topic :: Internet :: WWW/HTTP",
        "Topic :: Internet :: WWW/HTTP :: Dynamic Content",
    ]
    
    [project.urls]
    Homepage = "https://www.example.com/"
    
  7. Many common files and Python modules and packages are included in the package by default. To include additional files, we'll need to create a MANIFEST.in file. To include the templates and static files, create a file django-polls/MANIFEST.in with the following contents:

    django-polls/MANIFEST.in
    Text
    recursive-include django_polls/static *
    recursive-include django_polls/templates *
    
  8. It's optional, but recommended, to include detailed documentation with your app. Create an empty directory django-polls/docs for future documentation.

    Catat bahwa direktori docs tidak akan disertakan dalam paket anda meskipun anda menambahkan beberapa berkas ke dalamnya. Banyak aplikasi Django juga menyediakan dokumentasi darin mereka melalui situs seperti readthedocs.org.

    Many Python projects, including Django and Python itself, use Sphinx to build their documentation. If you choose to use Sphinx you can link back to the Django documentation by configuring Intersphinx and including a value for Django in your project's intersphinx_mapping value:

    Code
    intersphinx_mapping = {
        # ...
        "django": (
            "https://docs.djangoproject.com/en/stable/",
            None,
        ),
    }
    

    With that in place, you can then cross-link to specific entries, in the same way as in the Django docs, such as ":attr:`django.test.TransactionTestCase.databases`".

  9. Check that the build package is installed (python -m pip install build) and try building your package by running python -m build inside django-polls. This creates a directory called dist and builds your new package into source and binary formats, django_polls-0.1.tar.gz and django_polls-0.1-py3-none-any.whl.

Untuk informasi lebih pada pemaketan, lihat Tutorial on Packaging and Distributing Projects Python.

Menggunakan paket anda sendiriLink to this heading

Sejak kami memindahkan direktori polls diluar proyek, dia tidak lagi bekerja. Kami akan sekarang memperbaiki ini dengan memasang paket django-polls baru.

  1. To install the package, use pip (you already installed it, right?):

    Shell
    python -m pip install --user django-polls/dist/django_polls-0.1.tar.gz
    
  2. Perbaharui mysite/settings.py sampai titik ke nama modul baru:

    Code
    INSTALLED_APPS = [
        "django_polls.apps.PollsConfig",
        ...,
    ]
    
  3. Update mysite/urls.py to point to the new module name:

    Code
    urlpatterns = [
        path("polls/", include("django_polls.urls")),
        ...,
    ]
    
  4. Run the development server to confirm the project continues to work.

Keluarkan aplikasi andaLink to this heading

Sekarang bahwa kita telah memaketkan dan mengujikan django-polls, dia sudah siap dibagi dengan dunia! Jika ini bukan contoh, anda dapat melakukannya sekarang:

Menginstal paket Python dengan lingkungan virtualLink to this heading

Earlier, we installed django-polls as a user library. This has some disadvantages:

  • Merubah pustaka pengguna dapat berakibat perangkat lunak Phyton lain di sistem anda.

  • Anda tidak dapat menjalankan versi banyak dari paket ini (atau lainnya dengan nama sama disini).

Khususnya, keadaan ini dapat hanya muncul ketika anda sedang merawat beberapa proyek Django. Ketika mereka melakukannya, pemecahan terbaik adalah menggunakan venv. Alat ini mengizinkan anda merawat banyak lingkungan Python terpencil, masing-masing dengan salinannya sendiri dari pustaka dan paket namespace.