Python (Django) teklif ve müşteri yönetim uygulaması
-
pip (Python paketlerini yüklemek için)
-
django
-
Bu kılavuz, işletim sistemi olarak Debian/Ubuntu kullanıldığını varsayar. Yönetici yetkileri sudo kullanılarak alınır.
-
RPM tabanlı sistemler de benzer olmalıdır. Windows teorik olarak mümkündür ancak test edilmemiştir.
-
Uygulama /opt/offermanager dizinine kurulacaktır.
-
Temel kurulum, uygulamayı çalışır hale getirecektir ancak canlı ortam (production) kullanımı için uygun değildir.
- pip kurulumunu yapın:
$ sudo apt-get install python3 python3-pip- pip'i en son sürüme güncelleyin (pip ile sudo kullanırken -H bayrağı gereklidir):
$ sudo -H pip install --upgrade pip- requirements.txt dosyasındaki bağımlılıkları yükleyin:
$ pip install -r requirements.txt- OfferManager'ı Github deposundan indirin. İsteğe bağlı olarak, Zip dosyasını https://github.com/42htuna/offermanager/archive/master.zip adresinden de indirebilirsiniz:
$ git clone https://github.com/42htuna/offermanager --branch master
$ sudo cp -r offermanager /opt
$ cd /opt/offermanager- Ortamınıza uygun şekilde
offermanager/settings.pydosyasındaki aşağıdaki satırları düzenleyin:
# Buraya en az 50 karakter uzunluğunda rastgele bir metin girin. Bu, özetlenmiş (hashed) şifreleri güvende tutacaktır.
SECRET_KEY = 'abcdefghijklmnopqrstuvwxyz1234567890!@#$%^&*()<>{}'
# Sistem saatiyle eşleşecek şekilde ayarlayın
TIME_ZONE = 'UTC'Projenin kök dizininde (settings.py'nin görebileceği konumda) bir .env dosyası oluşturun. Terminalde taze bir anahtar üretip bu dosyaya ekleyin:
python -c "from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())"# .env dosyasının içeriği
DJANGO_SECRET_KEY=urettiginiz_gizli_anahtar
settings.py dosyanızın içini ise bu dosyadan okuyacak şekilde değiştirirsiniz (örneğin django-environ veya python-dotenv kütüphanesi kullanarak):
# settings.py içi
import os
from dotenv import load_dotenv
load_dotenv() # .env dosyasını yükler
SECRET_KEY = os.environ.get('DJANGO_SECRET_KEY')Özetle: SECRET_KEY aslında settings.py içinde bir koddur. Ama en doğru pratik, onu settings.py yanındaki bir .env dosyasında gizlemektir.
- Uygulama veritabanını oluşturun:
python manage.py makemigrations offermanagerpython manage.py makemigrationspython manage.py migrate- Bir yönetici (admin) kullanıcısı oluşturun:
python manage.py createsuperuserUsername (leave blank to use 'root'): admin
Email address: admin@home.local
Password:
Password (again):
Superuser created successfully.
- Bu aşamada, uygulamayı Python'un geliştirme sunucusuyla çalıştırmak için yeterli yapılandırmaya sahip olmalısınız. Aşağıdaki komutu çalıştırın ve tarayıcınızdan http://localhost:8000 adresine gidin:
python manage.py runserver 0.0.0.0:8000- DEBUG Ayarı:
DEBUG = FalseStatik dosyalara erişebilmek için "--insecure" parametresini ekleyin:
python manage.py runserver 0.0.0.0:8000 --insecureGunicorn ile çalıştırmak için:
python manage.py collectstatic --noinputgunicorn offermanager.wsgi:application --bind 0.0.0.0:8000 --workers 3 --timeout 90Waitress ile çalıştırmak için (Windows için en iyi alternatif):
python manage.py collectstatic --noinputwaitress-serve --port=8000 --threads=16 --connection-limit=200 offermanager.wsgi:application- ALLOWED_HOSTS Ayarı:
ALLOWED_HOSTS = ['127.0.0.1','localhost',]
ALLOWED_HOSTS += ['192.168.1.{}'.format(i) for i in range(256)]
#ALLOWED_HOSTS += ['192.168.{}.{}'.format(i,j) for i in range(256) for j in range(256)]- MySQL istemcisini ve Python MySQL sürücüsünü yükleyin:
$ sudo apt-get install mariadb-client
$ sudo -H pip install mysqlclient- MySQL veritabanını ve kullanıcısını oluşturun:
$ mysql -u root -p [-h servername]create database 'offermanager';
grant all on 'offermanager'.* to 'offermanager'@'%' identified by 'mysecretpassword';
exit;offermanager/settings.pydosyasını güncelleyin. 'DATABASES' bölümünü bulun, sqlite veritabanı ayarlarını yorum satırı yapın ve mysql ayarlarının yorum işaretlerini kaldırın:
# Veritabanı
# https://docs.djangoproject.com/en/1.10/ref/settings/#databases
# Yerel sqlite dosyası için aşağıdaki ayarları kullanın
# DATABASES = {
# 'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
# 'USER': '',
# 'PASSWORD': '',
# 'HOST': '',
# 'PORT': '',
# }
# }
# MySQL sunucusu için aşağıdaki ayarları kullanın (python-mysql gerektirir)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'offermanager',
'USER': 'offermanager',
'PASSWORD': 'mysecretpassword',
'HOST': 'servername',
'PORT': '',
}
}offermanager'ı çalıştırmak için "gerçek" bir web sunucusu kullanmanız şiddetle tavsiye edilir. Bu örnekte Apache kullanılmaktadır ancak WSGI uyumlu herhangi bir sunucu da işinizi görecektir.
- Apache ve WSGI modülünü yükleyin:
$ sudo apt-get install apache2 libapache2-mod-wsgi-py3
$ sudo a2enmod wsgi- Apache yapılandırmasını, offermanager ile birlikte gelen
wsgi.pydosyasını kullanacak ve statik ile ek (attachments) dizinlerini dahil edecek şekilde düzenleyin:
$ sudo nano /etc/apache2/sites-enabled/000-default.conf# Bu satırlar VirtualHost direktifinin dışında olmalıdır
WSGIScriptAlias / /opt/offermanager/offermanager/wsgi.py
WSGIPythonPath /opt/offermanager
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory /opt/offermanager>
Options Indexes MultiViews FollowSymLinks
Require all granted
</Directory>
<Directory /opt/offermanager/offermanager>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
# Bu dizinlerin gerçek konumu istenirse değiştirilebilir.
# Buradaki değişiklikleri yansıtmak için /opt/offermanager/offermanager/settings.py dosyasını güncellemeyi unutmayın.
Alias /static /opt/offermanager/offermanager/static
</VirtualHost>- Apache'yi yeniden başlattığınızda sisteminiz hazır olacaktır!
$ sudo service apache2 restartMevcut sistemdeki Kullanıcı, Çalışan, Stok ve Müşteri tablolarını, projenin temel yapısını bozmadan yeni veritabanına aktarmak için aşağıdaki iki yöntemden biri kullanılabilir.
Herhangi bir kod değişikliği yapmadan, tamamen Django'nun yerleşik dumpdata ve loaddata mekanizmasını kullanan pratik yöntemdir.
Eski veritabanınız aktifken terminalde aşağıdaki komutu çalıştırarak stok ve müşteri verilerini JSON formatında yedekleyin.
python manage.py dumpdata auth.user offermanager.employee offermanager.OfferStock offermanager.Customer --indent 4 -o devir_verisi.jsonYeni veritabanına geçiş yapıp "python manage.py migrate" çalıştırdıktan sonra verileri doğrudan içeri yükleyin.
python manage.py loaddata devir_verisi.jsonProje içine gömülü, veritabanı kısıtlamalarını (Foreign Key denetimlerini) geçici olarak bypass ederek verileri esnek bir şekilde içeri basan yöntemdir.
Terminalde tek bir komutla ilgili tabloları devir_verisi.json adıyla dışarı aktarın.
python manage.py devir_exportpython manage.py devir_export --file ~/yedek.jsonYeni veritabanına geçip migrate işlemlerini tamamladıktan sonra verileri direkt içeri basmak için:
python manage.py devir_importpython manage.py devir_import --file ~/yedek.jsonVerileri Windows ortamından, Linux ortamına aktarırken Türkçe karakterlerin bozulmaması için -Xutf8 parametresi ile UTF8 karakter kodlaması seçilmelidir.
Boş veritabanına geri yükleme yaparken, veri çakışmalarını ve hataları önlemek için de --exclude parametresi ile contenttypes ve auth.Permission tabloları hariç tutulmalıdır.
python -Xutf8 manage.py dumpdata --exclude contenttypes --exclude auth.Permission --format json --indent 4 -o database_backup.json.\backup.batpython manage.py dumpdata --exclude contenttypes --exclude auth.Permission --indent 4 -o database_backup.jsonbash backup.shpython manage.py loaddata database_backup.json