Tutorial lanjut: Bagaimana menulis aplikasi digunakan kembali¶
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 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?
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.
Paket? Aplikasi?
package Python menyediakan cara pengelompokkan terhubung kode Python untuk memudahkan penggunaan kembali. Sebuah paket mengandung satu atau lebih berkas dari kode Python (juga dikenal sebagai "modul").
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 adalah sebuah paket Python yang khususnya diperuntukkan untuk penggunaan dalam sebuah proyek Django. Sebuah aplikasi mungkin menggunakan kebiasaan umum Django, seperti memiliki submodul models
, tests
, urls
, dan views
.
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
asgi.py
wsgi.py
polls/
__init__.py
admin.py
apps.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 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 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.
Pertama, buat direktori induk untuk
polls
, diluar dari proyek Django anda. Panggil direktori inidjango-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
. Hindari menggunakan label sama seperti Django contrib packages, sebagai contohauth
,admin
, ormessages
.Pindahkan direktori
poll
kedalam direktoridjango-polls
.Buat berkas
django-polls/README.rst
dengan isi berikut:===== Polls ===== 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 = [ ... 'polls', ] 2. Include the polls URLconf in your project urls.py like this:: path('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.
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.Selanjutkanya kami akan membuat berkas
setup.cfg
dansetup.py
yang merincikan bagaimana membangun dan memasang aplikasi. Penjelasan penuh dari berkas ini di luar ruang lingkup tutorial ini, tetapi setuptools documentation mempunyai penjelasan bagus. Buat berkasdjango-polls/setup.cfg
dandjango-polls/setup.py
dengan isi berikut:[metadata] name = django-polls version = 0.1 description = A Django app to conduct Web-based polls. long_description = file: README.rst url = https://www.example.com/ author = Your Name author_email = yourname@example.com license = BSD-3-Clause # Example license classifiers = Environment :: Web Environment Framework :: Django Framework :: Django :: X.Y # Replace "X.Y" as appropriate Intended Audience :: Developers License :: OSI Approved :: BSD License Operating System :: OS Independent Programming Language :: Python Programming Language :: Python :: 3 Programming Language :: Python :: 3 :: Only Programming Language :: Python :: 3.6 Programming Language :: Python :: 3.7 Programming Language :: Python :: 3.8 Topic :: Internet :: WWW/HTTP Topic :: Internet :: WWW/HTTP :: Dynamic Content [options] include_package_data = true packages = find:
from setuptools import setup setup()
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, berkasREADME.rst
danLICENSE
kami, membuat sebuah berkasdjango-polls/MANIFEST.in
dengan isi berikut:include LICENSE include README.rst recursive-include polls/static * recursive-include polls/templates *
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 padadjango-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.Coba membangun paket anda dengan
python setup.py sdist
(jalankan dari dalamdjango-polls
). Ini membuat direktori dipanggildist
dan bangun paket baru anda,django-polls-0.1.tar.gz
.
Untuk informasi lebih pada pemaketan, lihat Tutorial on Packaging and Distributing Projects Python.
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.
Note that per-user installations can still affect the behavior of system tools that run as that user, so using a virtual environment is a more robust solution (see below).
Untuk memasang paket, gunakan pip (anda sudah memasangnya, benar?):
python -m pip install --user django-polls/dist/django-polls-0.1.tar.gz
Dengan keberuntungan, proyek Django anda seharusnya sekarang bekerja dengan benar kembali. Jalankan peladen kembali untuk menegaskan ini.
Untuk melepas paket. gunakan pip:
python -m 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:
- Surel paket ke teman.
- Unggah paket di situs jaringan anda.
- Tempatkan paket pada gudang umum, seperti the Python Package Index (PyPI). packaging.python.org mempunyai a good tutorial untuk melakukan ini.
Menginstal paket Python dengan lingkungan virtual¶
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).
Typically, these situations only arise once you're maintaining several Django projects. When they do, the best solution is to use venv. This tool allows you to maintain multiple isolated Python environments, each with its own copy of the libraries and package namespace.