Eğer tek bir "app" içinde 20+ model varsa, uygulamanız birden fazla şeyi yapıyor anlamına gelir. Bu durumda uygulamanızı parçalayıp uygulama başına düşen model sayısını da azaltmanız önerilir. Chapter 6: Model Best Pratices !14
Yeni Proje Oluşturma Aşaması Son yaptığın projeyi clone'la ? Önce yeni versiyon Django ile proje oluştur, daha sonra en son yaptığın projenin settings'inden kopyala ? !15
class CreatePosts < ActiveRecord ::Migration[5.2] def change create_table :posts do |t| t.string :title t.text :body t.timestamps end end end Migration Model Controller (View) View (Template) !22
Rails ile Hazır Gelenler • Ortam izolasyonu: "config/environments/" • Ortama göre paket organizasyonu: "Gemfile" • Tek "app" kavramı: "app/" • Model "app/models/" altında !24
Rails ile Hazır Gelenler • Controller (View) "app/controllers" altında • Migration'lar proje kapsamında "db/migrate" altında • Tesler'ler projre kampsamında "test/" altında • Management komutları: "Rakefile" / Rake Task * !25
Hayalimdeki Yapı • Ortam izolasyonu hazır olsa (dev/prod/stage/test ...) • Kolay model/view/template üretebilsem ... • Rails'deki "routes" gibi "urls.py" ı yönetsem ... • Rails'deki gibi proje yapısı olsa tek yerden erişsem ... • Temel bir modelim olsa, olmazsa olmaz field'ları barındırsa ... • Ortama göre paketleri düzenleyebilsem? (dev.pip, prod.pip ...) • Sık kullandığım paketler içinde olsa ...(django-debug-toolbar gibi) • Diğer yaptığım ve hep kullandığım tool'cuklarım da içinde olsa ... !28
Django Project Starter Template • Özelleştirilebilir Custom User modeli • BaseModel ve BaseModelWithSoftDelete * modelleri • Yeni proje dosya/dizin yapısı • Ortam ve paket izolasyonu • App ve Model üretmek için Rake task'leri (Management Commands) !30
Django Project Starter Template • Migration yönetimi için Rake task'leri (Management Commands) • Sadeleştirilmiş development logger • Debug için (console ve html seviyesinde) araçlar • Admin için yardımcı Widget'lar ve Storage • bulma.io entegrasyonu !31
Django Project Starter Template $ rake -T rake db:migrate[database] # Run migration for given database (default: 'default') rake db:roll_back[name_of_application,name_of_migration] # Roll-back (name of application, name of migration) rake db:shell # run database shell .. rake db:show[name_of_application] # Show migrations for an application (default: 'all') rake db:update[name_of_application,name_of_migration,is_empty] # Update migration (name of application, name of migration?, is empty?) rake locale:compile # Compile locale dictionary rake locale:update # Update locale dictionary rake new:application[name_of_application] # Create new Django application rake new:model[name_of_application,name_of_model,type_of_model] # Create new Model for given application: django,basemodel,softdelete rake run_server # Run server rake shell[repl] # Run shell+ avail: ipython,bpython default: ipython rake test:browse_coverage[port] # Browse test coverage rake test:coverage[cli_args] # Show test coverage (default: ' --show-missing --ignore-errors --skip-covered') rake test:run[name_of_application,verbose] # Run tests for given application !37
Django Project Starter Template $ rake db:roll_back[core,4] Operations to perform: Target specific migration: 0004_add __staff __to_program, from core Running migrations: Rendering model states ... DONE Unapplying core.0006_add_duty_to_person_and_title_is_nullable ... OK Unapplying core.0005_fix_person ... OK !39