Bu sayfa Öğretici 7‘nin kaldığı yerden başlıyor. Ağ anketimizi, yeni projelerde tekrar kullanabileceğiniz ve diğer insanlarla paylaşabileceğiniz bağımsız bir Python paketine dönüştürüyor olacağız.
Kısa bir süre çnce 1-7 öğreticilerini tamamladık. Örnek projeyi aşağıda açıklananlarla eşleşecek şekilde incelemenizi öneririz.
Bir ağ uygulamasını tasarlamak, oluşturmak, sınamak ve sürdürmek yoğun bir iştir. Birçok Python ve Django projeleri ortak sorunları paylaşmaktadır. Bu tekrarlanan işlerden bir kısmını kurtarabilirsek harika olmaz mı?
Yeniden kullanılabilirlik, Python’da yaşam biçimidir. Python Paket Dizini (PyPI) kendi Python programlarında kullanabileceğini geniş bir paket yelpazesine sahiptir. Projenize dahil edebileceğiniz mevcut yeniden kullanılabilir uygulamalar için Django Paketlerini göz gezdirin. Django kendisi de sadece bir Python paketi. Bu, mevcut Python paketlerini veya Django uygulamalarını alıp kendi ağ projenize oluşturabileceğiniz anlamına gelir. Sadece projenizi benzersiz yapan parçaları yazmanız yeterlidir.
Üzerinde çalıştığımız gibi bir anket uygulamasına ihtiyaç duyan yeni bir proje başlattığınızı varsayalım. Bu uygulamayı nasıl yeniden kullanılabilir yaparız? Neyse ki, halen bu yolda ilerliyorsun. Öğretici 3‘te, bir anket kullanarak anketleri proje düzeyinde URLconf’tan nasıl ayırdığımızı gördük. Bu yazıda, uygulamanın yeni projelerde kullanımı kolay hale getirilmesi ve başkalarının yükleyip kullanabilmesi, yayınlamaya hazır hale getirilmesi için daha ileri adımlar atacağız.
Bir Python paketi kolayca yeniden kullanmak için ilgili Python kodunu gruplamaya bir yol sağlar. Bir paket Python kodunun bir veya daha fazla dosyasını içerir. Bunlar “modüller” olarak da bilinir.
Bir paket “import foo.bar” veya “from foo import bar” ile alınabilir. Bir paket oluşturmak için bir dizin (sandık gibi) init.py özel bir dosya içermelidir; bu dosya boş olsa bile.
Bir Django uygulaması sadece bir Django projesinde kullanılması amaçlanan bir Python paketidir. Bir uygulama, kalıplar, sınamalar, URL’ler ve görünümler alt modülleri olması gibi ortak Django sözleşmelerini kullanabilir.
Daha sonra başkalarının yüklemesi kolay bir Python paketinin oluşturulması sürecini tanımlamak için ambalaj terimini kullanıyoruz. Bu biraz karışık olabilir biliyoruz.
Önceki eğitimlerden sonra, projemiz şöyle görünmelidir:
benimsite/
manage.py
benimsite/
__init__.py
settings.py
urls.py
wsgi.py
anketler/
__init__.py
admin.py
migrations/
__init__.py
0001_initial.py
models.py
static/
anketler/
images/
background.png
style.css
templates/
anketler/
ayrinti.html
index.html
sonuclar.html
tests.py
urls.py
views.py
templates/
admin/
base_site.html
Öğretici 7‘de benimsite/templates oluşturdunuz ve Öğretici 3‘deki anketler/templates oluşturdunuz. Şimdi, belki de proje ve uygulama için ayrı şablon dizinleri seçmeyi seçmek daha açıktı: Anket uygulamasının parçası olan her şey anketlerde. Uygulamanın kendine yetebilmesini sağlar ve yeni bir projeye dahil edilmesini kolaylaştırır.
Anketler dizini şimdi yeni bir Django projesine kopyalanabilir ve derhal yeniden kullanılabilir. Yine de yayınlanmaya hazır değil. Bunun için başkalarının yüklemesini kolaylaştırmak için uygulamayı paketlemeliyiz.
Mevcut Python paketleme durumu, çeşitli araçlar ile biraz karışıktır. Bu yazıda, paketimizi oluşturmak için setuptools kullanacağız. Tavsiye edilen paketleme aleti (dağıtma çatalıyla birleştirildi). Ayrıca, pip‘i kurmak ve kaldırmak için kullanacağız. Şimdi bu iki paketi kurmalısın. yardıma ihtiyacınız varsa, Django’nun pip ile nasıl kurulacağına bakabilirsiniz. Kurulum araçlarını aynı yolla yükleyebilirsiniz.
Python paketlemesi, uygulamanızı kolayca yüklenip kullanılabilecek belirli bir biçimde hazırlamak anlamına gelir. Django’nun kendisi buna çok benzer yapıdadır. Anketler gibi küçük bir uygulama için bu süreç çok zor değil.
Paketiniz için bir ad seçerken mevcut paketlerle çakışan isimlendirmeyi önlemek için PyPI gibi kaynakları kontrol edin. Dağıtılacak bir paket oluştururken genellikle modül adının önüne koymak kullanılışlıdır. Bu, Django uygulamalarını arayan diğer kişilerin uygulamanızı Django’ya özgü olarak tanımlamasına yardımcı olur.
Uygulama etiketleri (diğer bir deyişle, uygulama paketlerine nokta şeklindeki yolun son kısmı) INSTALLED_APPS içinde benzersiz olmalıdır. Aynı etiketi Django katkı paketlerinden herhangi biriyle (ör. Auth, admin veya messages) kullanmaktan kaçının. </div>
Anketler dizinini django-anketler dizinine taşıyın.
=====
Anketler
=====
Anketler, ağ tabanlı anketleri yapmak için basit bir Django uygulamasıdır.
Ziyaretçiler her soru için sabit sayıda cevap arasından seçim yapabilir.
Ayrıntılı belgeler "belgeler" dizininde yer almaktadır.
Hızlı Başla
-----------
1. Bunun gibi INSTALLED_APPS ayarlarınıza "anketler" ekleyin::
INSTALLED_APPS = [
...
'anketler',
]
2. Projenizin urls.py dosyasında anketler URLconf'a şöyle ekleyin::
path('anketler/', include('anketler.urls')),
3. Anket kalıplarını oluşturmak için 'python manage.py migrate' komutunu çalıştırın.
4. Bir anket oluşturmak için geliştirme sunucusunu başlatın ve http://127.0.0.1:8000 /admin/
adresini ziyaret edin (Yönetici uygulamasının etkinleştirilmesi gerekir).
5. http://127.0.0.1:8000/anketler/ ankete katılmak için ziyaret edin.
Bir django-anketler/lisans dosyası oluşturun. Bir yetki belgesi seçmek bu öğreticinin kapsamı dışındadır, ancak bir yetki belgesi olmadan halka açık olarak yayımlanan kodun işe yaramaz olduğunu söylemek yeterlidir. Django ve birçok Django uyumlu uygulamalar BSD yetki belgesi altında dağıtılır; bununla birlikte, kendi yetki belgenizi almakta özgürsünüzdür. Yetki belgesi seçiminizin kodunuzu kimin kullanabileceğini etkileyeceğini unutmayın.
import os
from setuptools import find_packages, setup
with open(os.path.join(os.path.dirname(__file__), 'README.rst')) as readme:
README = readme.read()
# setup.py'nin herhangi bir yoldan çalıştırılmasına izin ver
os.chdir(os.path.normpath(os.path.join(os.path.abspath(__file__), os.pardir)))
setup(
name='django-anketler',
version='0.1',
packages=find_packages(),
include_package_data=True,
license='BSD License', # örnek yetki belgesi
description='Ağ tabanlı anketleri yapmak için basit bir Django uygulaması.',
long_description=README,
url='https://www.orneksite.com/',
author='Senin İsmin',
author_email='seninismin@orneksite.com',
classifiers=[
'Environment :: Web Environment',
'Framework :: Django',
'Framework :: Django :: X.Y', # uygun bir şekilde X.Y yerine sürüm yazın
'Intended Audience :: Developers',
'License :: OSI Approved :: BSD License', # örnek yetki belgesi
'Operating System :: OS Independent',
'Programming Language :: Python',
'Programming Language :: Python :: 3.5',
'Programming Language :: Python :: 3.6',
'Topic :: Internet :: WWW/HTTP',
'Topic :: Internet :: WWW/HTTP :: Dynamic Content',
],
)
Varsayılan olarak pakete sadece Python modülleri ve paketleri dahildir. Ek dosyalar eklemek için bir MANIFEST.in dosası oluşturmamız gerekir. Önceki adımda bahsedilen setuptools belgeleri bu dosyayı daha ayrıntılı olarak ele alır. Şablonları README.rst ve yetki belgesi dosyamızı eklemek için aşağıdaki içeriğe sahip bir django-anketler/MANIFEST.in dosyası oluşturun:
django-anketler/MANIFEST.in
include LICENSE
include README.rst
recursive-include anketler/static *
recursive-include anketler/templates *
recursive-include docs *
Bazı dosyalar eklemediğiniz sürece belgeler dizininin paketinize dahil edilmeyeceğini unutmayın. Pek çok Django uygulaması, belgelerini readthedocs.org gibi siteler aracılığıyla çevrimiçi olarak da sağlar.
Paketinizi python setup.py sdist ile oluşturmayı deneyin (django-anketler’den çalıştırın). Bu, dist adlı bir dizin oluşturur ve yeni paketiniz django-anketler-0.1.tar.gz dosyası olarak alırsınız.
Paketleme hakkında daha fazla bilgi için bkz. Python’un Paketleme ve Dağıtma Projesi Eğitimi
Aşağıdaki adımlar django-anketleri bir kullanıcı kitaplığı olarak yüklemektedir. Kullanıcı başına kurulumların paketin örgü genelinde kurulmasına göre çok daha fazla çıkarı vardır; örneğin yönetici erişimine sahip olmadığınız sistemlerde kullanılabilir ve kapetin sistem hizmetlerini ve makinenin diğer kullanıcılarını etkilemesini önler.
Kullanıcı başına yüklemelerin, o kullanıcı olarak çalışan örgü araçlarının davranışını hala etkileyebileceğini unutmayın, böylecek sanalenv daha sağlam bir çözümdür. (Aşağı bakın)
pip install --user django-anketler/dist/django-anketler-0.1.tar.gz
Şansla, Django projeniz şimdi tekrar düngün çalışmalıdır. Bunu onaylamak için sunucuyu yeniden başlatın.
pip uninstall django-anketler
Artık django anketlerini paketledik ve sınadık. Dünyayla paylaşamya hazır durumda! Bu sadece bir örnek değilse, şimdi yapabilirsiniz.
Daha önce, anketler uygulamasını bir kullanıcı kitaplığı olarak kurduk. Bunun bazı olumsuzlukları var:
Tipik olarak, bu durumlar yalnızca birkaç Django projesini korurken ortaya çıkar. Ne yaparlarsa yapsınlar, en iyi çözüm, virtualenv kullanmaktır. Bu araç, her biri kendi kitaplıkları ve paket ad alanının kopyasını içeren çok sayıda ayrılmış Python ortamını korumanıza izin verir.