Tutorial lanjut: Bagaimana menulis aplikasi digunakan kembaliLink to this heading

Tutorial lanjutan ini mulai dimana Tutorial 7 ditinggalkan. Kami akan merubah jejak pendapat Jaringan kami kedalam paket Python berdisi sendiri anda dapat gunakan kembali dalam proyek baru dan berbagi dengan orang lain.

Jika anda belum melengkapi Tutorial 1–7, kami mendorong anda meninjau ini sehingga proyek contoh anda cocok satu yang digambarkan dibawah.

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?

Penggunaan kembali adalah cara hidup dalam Python. The Python Package Index (PyPI) mempunyai jangkauan luas dari paket-paket anda dapat gunakan dalam program Python anda sendiri. Periksa Django Packages untuk aplikasi dapat digunakan yang ada anda dapat gabungkan dalam proyek anda. Django itu sendiri juga hanya sebuah paket Python. Ini berarti bahwa anda dapat mengambil paket-paket Python yang ada dan menyusun mereka kedalam proyek jaringan anda sendiri. Anda hanya butuh menulis bagian-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, 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.

Proyek anda dan aplikasi digunakan kembali andaLink to this heading

Setelah tutorial sebelumnya, proyek kami harusnya seperti ini:

Code
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 prasyaratLink to this heading

Keadaan saat ini dari pemaketan Phyton adalah sedikit karut dengan alat beragam. Untuk tutorial ini, kami akan menggunakan setuptools untuk membangun paket kami. Ini adalah alat pemaketan disarankan (digabungkan dengan mengedarkan cabang). Kami akan juga menggunakan pip untuk memasan dan melepasnya. Anda harus memasang dua paket ini sekarang. Jika anda butuh bantuan, anda dapat mengacu ke how to install Django with pip. Anda dapat memasang setuptools cara sama.

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

  2. Pindahkan direktori poll kedalam direktori django-polls.

  3. Buat berkas django-polls/README.rst dengan isi berikut:

    django-polls/README.rst
    Code
    =====
    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. Selanjutnya kami akan membuat berkas setup.py yang menyediakan rincian tentang bagaimana membangun dan memasang aplikasi. Penjelasan penuh dari berkas ini diluar cakupan dari tutorial ini, tetapi setuptools docs mempunyai penjelasan baik. Buat sebuah berkas django-polls/setup.py dengan isi berikut:

    django-polls/setup.py
    Code
    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
    Code
    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:

    Code
    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.

  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.

For more information on packaging, see Python's Tutorial on Packaging and Distributing Projects.

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. Untuk memasang paket, gunakan pip (anda sudah memasangnya, benar?):

    Code
    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:

    Code
    pip uninstall django-polls
    

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:

Memasang paket Phyton dengan virtualenvLink to this heading

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, keadaan ini hanya muncul sekali anda sedang merawat beberapa proyek Django. Ketike mereka melakukan, pemecahan terbaik adalah menggunakan virtualenv. Alat ini mengizinkan anda untuk merawat banyak lingkungan Python terpencil, masing-masing dengan salinan itu sendiri dari pustaka dan paket namespace.