---
title: "Tutorial lanjut: Bagaimana menulis aplikasi digunakan kembali"
version: 1.9
locale: id
source: https://docs.djangoproject.com/id/1.9/intro/reusable-apps/
canonical: https://djangodocs.dev/id/1.9/intro/reusable-apps/
---
# Tutorial lanjut: Bagaimana menulis aplikasi digunakan kembali

This advanced tutorial begins where [Tutorial 7](/id/1.9/intro/tutorial07/)
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–7, we encourage you to review
these so that your example project matches the one described below.

## Hal-hal dapat digunakan kembali

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?

Kegunaan kembali adalah cara hidup Phyton. [Python Package Index (PyPI)](https://pypi.python.org/pypi) mempunyai jangkauan luas paket anda dapat gunakan du program Phyton anda sendiri. Periksa [Paket Django](https://www.djangopackages.com) untuk aplikasi kegunakan kembali anda dapat menggabungkan di proyek anda. Django itu sendiri juga hanya sebuah paket Phyton. Ini berarti anda dapat mengambil paket Phyton yang ada atau aplikasi Django menyusun mereka kedalam proyek jaringan anda sendiri. Anda hanya butuh menulis bagian yang membuat proyek anda unik.

Mari kita katakan anda memulai proyek baru yang butuh aplikasi jejak pendapat seperti satu yang telah kita kerjakan. Bagaimana anda membuat aplikasi ini digunakan kembali? Untungnya, anda sudah di jalan yang baik. Di [Tutorial 3](/id/1.9/intro/tutorial03/), kami melihat bagaimana kami memisahkan jejak pendapat dari URLconf tingkatan-proyek menggunakan sebuah `include`. Di tutorial ini, kami akan mengambil langkah lebih jauh untuk membuat aplikasi mudah digunakan di proyek baru dan siap untuk diterbitkan untuk lainnya untuk dipasang dan digunakan.

> **Paket? Aplikasi?**
>
> A Python [package](https://docs.python.org/3/glossary.html#term-package) provides a way of grouping related Python code for
> easy reuse. A package contains one or more files of Python code (also known
> as "modules").
>
> Sebuah paket dapat diimpor dengan `import foo.bar` atau `from foo import bar`. Untuk direktori (seperti `polls`) untuk membentuk paket, dia harus mengandung berkas khusus `__init__.py`, bahkan jika berkas ini kosong.
>
> Sebuah *aplikasi* Django hanya sebuah paket Phyton yang khususnya dimaksudkan untuk digunakan di proyek Django. Sebuah aplikasi mungkin menggunakan kebiasaan Django umum, seperti mempunyai submodul `model`, `percobaan`, `url`, dan `tampilan`.
>
> Kemudian kami menggunakan istilah *pemaketan* untuk menggambarkan pengolahan dalam membuat paket Phyton mudah untuk lainnya untuk dipasang. Dia dapat sedikit membingungkan, kami tahu.

## Proyek anda dan aplikasi digunakan kembali anda

Setelah tutorial sebelumnya, proyek kami harusnya seperti ini:

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

Anda membuat `mysite/template` di doc:Tutorial 7 \</intro/tutorial07\>\`, dan polls/templates\` di :doc: Tutorial 3 \</intro/tutorial03\>\`. Sekarang tampak lebih jelas mengapa kita memilih direktori templat yang berbeda untuk project dan aplikasi: semua yang merupakan bagian aplikasi polls di dalam polls\`. Hal ini membuat aplikasi berdiri-sendiri dan lebih mudah untuk membuat projek baru.

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 prasyarat

Keadaan saat ini dari pemaketan Phyton adalah sedikit karut dengan alat beragam. Untuk tutorial ini, kami akan menggunakan [setuptools](https://pypi.python.org/pypi/setuptools) untuk membangun paket kami. Ini adalah alat pemaketan disarankan (digabungkan dengan `mengedarkan` cabang). Kami akan juga menggunakan [pip](https://pypi.python.org/pypi/pip) untuk memasan dan melepasnya. Anda harus memasang dua paket ini sekarang. Jika anda butuh bantuan, anda dapat mengacu ke [bagaimana memasang Django dengan pip](/id/1.9/topics/install/#installing-official-release). Anda dapat memasang `setuptools` cara sama.

## Memaketkan aplikasi anda

*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. Pertama, buat direktori induk untuk `polls`, diluar dari proyek Django anda. Panggil direktori ini `django-polls`.

   > **Memilih nama dari aplikasi anda**
   >
   > Ketika memilih nama untuk paket anda, periksa sumber daya seperti PyPI untuk menghindari penamaan bertentangan dengan paket yang anda. Ini sering berguna untuk menambahkan `django-` ke nama modul ketika membuat paket untuk dibagikan. Ini membantu lainnya mencari aplikasi Django mencirikan aplikasi anda sebagai khas Django.
   >
   > Label aplikasi (yaitu, bagian akhir dari jalur bertitik ke paket aplikasi) *harus* unik di [`INSTALLED_APPS`](/id/1.9/ref/settings/#std-setting-INSTALLED_APPS). Hindari menggunakan label sama seperti Django [contrib packages](/id/1.9/ref/contrib/), sebagai contoh `auth`, `admin`, or `messages`.
2. Pindahkan direktori `poll` kedalam direktori `django-polls`.
3. Buat berkas `django-polls/README.rst` dengan isi berikut:

   *django-polls/README.rst*

   ```
   =====
   Polls
   =====

   Polls is a simple 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 = [
           ...
           'polls',
       ]

   2. Include the polls URLconf in your project urls.py like this::

       url(r'^polls/', include('polls.urls')),

   3. Run `python manage.py migrate` to create the polls models.

   4. Start the development server and visit http://127.0.0.1:8000/admin/
      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.
   ```
4. 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.
5. Next we'll create a `setup.py` file which provides details about how to
   build and install the app.  A full explanation of this file is beyond the
   scope of this tutorial, but the [setuptools docs](https://setuptools.readthedocs.io/en/latest/) have a good
   explanation. Create a file `django-polls/setup.py` with the following
   contents:

   *django-polls/setup.py*

   ```
   import os
   from setuptools import find_packages, setup

   with open(os.path.join(os.path.dirname(__file__), 'README.rst')) as readme:
       README = readme.read()

   # allow setup.py to be run from any path
   os.chdir(os.path.normpath(os.path.join(os.path.abspath(__file__), os.pardir)))

   setup(
       name='django-polls',
       version='0.1',
       packages=find_packages(),
       include_package_data=True,
       license='BSD License',  # example license
       description='A simple Django app to conduct Web-based polls.',
       long_description=README,
       url='https://www.example.com/',
       author='Your Name',
       author_email='yourname@example.com',
       classifiers=[
           'Environment :: Web Environment',
           'Framework :: Django',
           'Framework :: Django :: X.Y',  # replace "X.Y" as appropriate
           'Intended Audience :: Developers',
           'License :: OSI Approved :: BSD License',  # example license
           'Operating System :: OS Independent',
           'Programming Language :: Python',
           # Replace these appropriately if you are stuck on Python 2.
           'Programming Language :: Python :: 3',
           'Programming Language :: Python :: 3.4',
           'Programming Language :: Python :: 3.5',
           'Topic :: Internet :: WWW/HTTP',
           'Topic :: Internet :: WWW/HTTP :: Dynamic Content',
       ],
   )
   ```
6. Hanya modul dan paket Phyton yang disertakan dalam paket secara awal. Untuk menyertakan berkas tambahan, kami akan butuh membuat berkas `MANIFEST.in`. Dokumentasi alat pengaturan mengacu di langkah sebelumnya obrolkan berkas ini lebih rinci. Untuk menyertakan cetakan, berkas `README.rst` dan `LICENSE` kami, membuat sebuah berkas `django-polls/MANIFEST.in` dengan isi berikut:

   *django-polls/MANIFEST.in*

   ```
   include LICENSE
   include README.rst
   recursive-include polls/static *
   recursive-include polls/templates *
   ```
7. Ini adalah pilihan, tetapi disarankan, untuk menyertakan dokumentasi rinci dengan aplikasi anda. Buat direktori kosong `django-polls/docs` untuk dokumentasi akan datang. Tambah sebuah tambahan baris pada `django-polls/MANIFEST.in`:

   ```
   recursive-include docs *
   ```

   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](https://readthedocs.org).
8. Coba membangun paket anda dengan `python setup.py sdist` (jalankan dari dalam `django-polls`). Ini membuat direktori dipanggil `dist` dan bangun paket baru anda, `django-polls-0.1.tar.gz`.

Untuk informasi lebih pada pemaketan, lihat Tutorial pada Pemaketan dan Penyaluran Proyek \<https://packaging.python.org/en/latest/distributing.html\> Phyton.

## Menggunakan paket anda sendiri

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

> **Memasang sebagai pustaka pengguna**
>
> Langkah berikut memasang `django-polls` sebagai pustaka pengguna. Tiap-pengguna pasang mempunyai banyak keuntungan lebih memasang paket lebar-sistem, seperti menjadi berguna di sistem dimana anda tidak mempunyai akses administrator sama halnya mencegah paket dari layanan sistem terpengaruh dan pengguna lain dari mesin.
>
> Catat bahwa pemasangan per-pengguna dapat masih mempengaruhi kebiasaan alat sistem yang berjalan sebagai pengguna tersebut, jadi `virtualenv` adalah pemecahan lebih kuat (lihat dibawah).

1. Untuk memasang paket, gunakan pip (anda sudah [memasangnya](#installing-reusable-apps-prerequisites), benar?):

   ```
   pip install --user django-polls/dist/django-polls-0.1.tar.gz
   ```
2. Dengan keberuntungan, proyek DJango anda seharusnya sekarang bekerja dengan benar kembali. Jalankan peladen kembali untuk menegaskan ini.
3. Untuk melepas paket. gunakan pip:

   ```
   pip uninstall django-polls
   ```

## Keluarkan aplikasi anda

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

- Email paket ke teman.
- Unggah paket di situs jaringan anda.
- Tempatkan paket di gudang umum, seperti [the Python Package Index (PyPI)](#the-python-package-index-pypi). [packaging.python.org](https://packaging.python.org) punya [tutorial bagus](https://packaging.python.org/en/latest/distributing.html#uploading-your-project-to-pypi) untuk melakukan ini.

## Memasang paket Phyton dengan virtualenv

Sebelumnya, kami memasalang aplikasi poling sebagai pustaka pengguna. Ini mempunyai beberapa kerugian:

- 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, situasi ini hanya muncul sekali anda sedang merawat beberapa proyek DJango, Ketika mereka melakukannya, solusi terbaik adalah menggunakan [virtualenv](http://www.virtualenv.org/).  Alat ini mengizinkan anda untuk merawat banyak lingkungan Phyton terisolasi, setiapnya dengan salinan sendiri dari pustaka dan namespace paket.
