# Gemini CLI ile Django projelerinde pratik rehber

Adres: https://agentvera.dev/blog/gemini-cli-ile-django/ · Yayın: 2026-11-01

Django projelerinde Gemini CLI ile models, migrations, ORM, DRF ve pytest-django görevlerini yönetmek için GEMINI.md ayarı, çalışma döngüsü ve tuzaklar.

**Kısaca:**

- GEMINI.md dosyasına Django’ya özel test, lint ve klasör kurallarını yazarak ajanın projeyi doğru anlamasını sağlayın.
- Küçük adımlarla plan yapıp her değişiklikten sonra pytest-django ile testleri çalıştırmak riski azaltır.
- Migration, related_name ve DRF serializer gibi Django’ya özgü tuzaklarda ajanın çıktısını mutlaka diff üzerinden denetleyin.

Gemini CLI, Django projenizin kök dizininde `gemini` komutuyla başlattığınız bir terminal ajanıdır; doğru hazırlanmış bir GEMINI.md ve küçük adımlı bir çalışma döngüsüyle model, migration, ORM ve DRF işlerini hızlandırır. Aşağıda kurulumu, görev döngüsünü ve Django’ya özgü tuzakları pratik biçimde ele alıyorum.

## Neden Gemini CLI Django işlerine uygun

Django projeleri tekrarlayan ve birbirine bağlı dosyalardan oluşur: model değişince migration, serializer, view ve testler etkilenir. Gemini CLI bu zinciri proje bağlamıyla birlikte değerlendirir; GEMINI.md’deki komutları çalıştırarak test ve lint çıktısını kendi döngüsüne alır. Örneğin `python manage.py makemigrations` sonrası oluşan dosyayı görebilir, `pytest` çıktısındaki hataya göre düzeltme yapabilir. Bu, Django’nun ORM katmanındaki ilişkili değişiklikleri tek seferde yürütmek için uygundur. Gemini CLI’nın genel çalışma biçimi için [Gemini CLI](/ajanlar/gemini-cli/) sayfasına bakabilirsiniz.

Ajan aynı zamanda views, templates ve DRF serializer’larındaki tekrarlayan kalıpları üretebilir. Asıl değeri, siz `pytest-django` ile testleri çalıştırdıkça hataları geri beslemesidir; böylece Django’ya özgü import ve uygulama kurulum hatalarını erkenden yakalar. Örneğin yeni bir `apps/orders` uygulaması oluşturulurken ajan; models.py, admin.py, apps.py, migrations klasörü ve test dosyalarını birlikte düzenleyebilir, `apps.py` içindeki `default_auto_field` ayarını ve `__init__.py` dosyasını unutmaz. Django’nun request/response döngüsü, middleware sırası ve template bağlamı hakkında yaygın bilgiye sahip olduğundan, view ve şablon düzeltmelerinde de işe yarar. Yine de projenizin özel context processor’ları veya middleware’leri varsa bunları GEMINI.md’de belirtmek gerekir. Ayrıca `AUTH_USER_MODEL`, `app_label` ve `related_name` gibi projeye özgü kabullerin altını çizmek gerekir; ajan bu bilgileri GEMINI.md’den okumadıkça varsayılan ayarlarla çalışabilir.

## Projeyi ajan için hazırlamak

Gemini CLI proje talimatlarını GEMINI.md dosyasından okur; bu yüzden dosyayı Django’ya göre netleştirmek gerekir. Aşağıdaki örnek, build, test, lint komutlarını, klasör kurallarını ve Django’ya özgü beklenen davranışları gösterir. Daha geniş bir başlangıç için [Gemini CLI nasıl kullanılır? Adım adım rehber](/blog/gemini-cli-nasil-kullanilir/) adım adım rehberine de bakılabilir.

```
# GEMINI.md
# Build/test komutları
- Test: pytest -q
- Lint: ruff check .
- Format: ruff format --check .
- Tip kontrolü: mypy .

# Klasör kuralları
- Django projesi `config/` içinde settings, `apps/` içinde her uygulama.
- Migration dosyalarını elle düzenleme; her model değişikliğinde `python manage.py makemigrations` çalıştır.
- API uçları `apps/<app>/api/` altında serializer.py, views.py, urls.py olarak tutulur.

# Django'ya özel kurallar
- Her model için `__str__` yaz, `Meta.ordering` ekle.
- ForeignKey/OneToOneField/ManyToManyField alanlarında `related_name` açıkça belirt.
- DRF serializer'larında `fields = '__all__'` kullanma, açık liste yaz.
- Testler pytest-django ile `pytest.mark.django_db` kullanılarak yazılır.
```

Bu dosya sayesinde ajan, `pytest` komutunu bilir, `apps/<app>/api/` yapısına uyar ve `__all__` serializer alanları gibi tuzaklardan kaçınır. Dosyayı sürüm kontrolüne ekleyin ve ajan başlatıldığında güncel olduğundan emin olun. Örneğin yeni bir uygulama eklediğinizde klasör kuralını güncellerseniz ajan yanlış yere dosya üretmez. Ayrıca `DJANGO_SETTINGS_MODULE` gibi ortam değişkenlerini komut satırına yazmak yerine `.env` dosyasında tanımlayıp GEMINI.md’de referans vermek daha temiz olur. pytest-django için `pytest.ini` içinde `DJANGO_SETTINGS_MODULE = config.settings.local` gibi bir satır bulunuyorsa, bunu da GEMINI.md’ye ekleyin; ajan testleri doğru ayarlarla çalıştırabilsin. `mypy` ve `django-stubs` kullanıyorsanız, model alanları için tip kontrolü yapılacağını belirtmek faydalıdır.

## Çalışma döngüsü

Django’da güvenli bir döngü şöyle işler: görevi tek bir modül veya davranışla sınırlandırın, ajanın plan yapmasını isteyin, üretilen kodu uygulayın, `pytest -q` ile testleri çalıştırın ve `git diff` üzerinde migration, serializer ve import değişikliklerini inceleyin. İyi prompt yazımı için [Kodlama ajanları için prompt nasıl yazılır?](/blog/kodlama-ajanlari-icin-prompt-yazmak/) sayfasındaki kalıpları uygulayabilirsiniz.

Önce ajanın plan yapmasını isteyin; örneğin "`Order` modeline `status` alanı eklemeden önce hangi dosyaları değiştireceğini ve migration adını listele" demek işe yarar. Ajan dosya listesini verince, onayladıktan sonra uygulama adımına geçin. Küçük adım önemlidir: tek seferde hem modeli hem serializer’ı hem view’i değiştirmek yerine, önce modeli ve migration’u halledin, testleri çalıştırın, ardından serializer’ı ekleyin. Her adımdan sonra `pytest -q apps/orders/tests/` gibi hedefe odaklı test komutu çalıştırıp sonucu ajana geri bildirin. Son olarak `git diff` ile migration dosyasındaki `operations` listesini, serializer’daki `fields` listesini ve import değişikliklerini gözden geçirin.

Aşağıdaki promptlar sık kullanılan Django görevleri için başlangıç noktasıdır.

- `apps/orders` içindeki `Order` modeline `status` alanı ekle; seçenekleri `CharField` ile tanımla, migration üret ve ilgili testleri çalıştır.
- DRF’de `ProductSerializer` ve `ProductViewSet` oluştur; router’ı `config/urls.py` içine bağla, `Product` için list/create/retrieve testleri yaz.
- `Customer.email` alanına unique constraint ekle; önce duplicate kayıtları tespit eden bir management command yaz, sonra migration üret ve testleri koş.
- `cart` uygulamasındaki N+1 sorgularını bul, `select_related`/`prefetch_related` ekleyip testleri yeşil tut.
- `OrderSerializer`'da nested `OrderItem` gösterimini ekle, ancak performans için `Prefetch` kullan ve mevcut testleri güncelle.

## Hangi Django görevlerinde iyi, nerelerde dikkat

Tablo, sık kullanılan görevlerde ajanın nerede verimli olduğunu ve hangi noktalarda denetim gerektiğini özetler.

| Görev | İyi prompt | Dikkat edilecek nokta |
|---|---|---|
| Model ve migration | `Order` modeline `status` alanı ekle, migration üret ve testleri çalıştır | Migration dosyasında veri kaybı veya geri alınamaz `RunPython` adımı olmasın. |
| DRF serializer/view | `ProductSerializer` ve `ProductViewSet` oluştur, router bağla ve test yaz | `fields` listesi açık olsun; nested serializer performansı ve `source` kullanımı doğru mu? |
| ORM sorgu optimizasyonu | N+1 sorgularını tespit et, `select_related`/`prefetch_related` ekle | Gereksiz `prefetch_related` ekleyip bellek kullanımını artırmasın; queryset’i testle doğrula. |
| Şablon ve view | `OrderDetailView` şablonunu oluştur, context adlarını düzelt | View’da `get_context_data` içinde gereksiz veritabanı sorgusu yapmasın. |

Ajan, model alanı ekleme, temel serializer oluşturma, viewset yazma ve şablon düzeltme gibi işlerde oldukça başarılıdır. Ancak Django’ya özgü bazı bölgelerde yakın takip gerekir. Migration üretiminde, ajan bazen `AlterField` ile `RemoveField` + `AddField` arasında karışıklık yaşayabilir veya `RunPython` adımını geri döndürülemez biçimde yazabilir. Signals kullanıyorsanız, ajan `models.py` içine sinyal tanımı eklediğinde `apps.py` içindeki `ready()` metoduna kayıt koymayı unutabilir; bu da testlerde sinyalin çalışmamasına yol açar. Admin panellerinde `list_display`, `search_fields` ve `readonly_fields` gibi seçenekleri atlayabilir. Soyut model kalıtımı, proxy model veya `GenericForeignKey` gibi ileri düzey ORM konularında ajanın önerdiği kodu mutlaka gözden geçirin; bazen yanlış `app_label` veya yanlış veritabanı tablosu kullanabilir. DRF’de `permission_classes`, `authentication_classes` ve nested serializer performansı gibi konuları test etmek önemlidir.

## Django’da test ve doğrulama

pytest-django, ajanla çalışırken en güvenilir doğrulama katmanıdır. GEMINI.md’ye `pytest -q --reuse-db` gibi bir test komutu yazarsanız ajan her değişiklikten sonra hızlı geri bildirim alır. Ancak `--reuse-db` şeması değiştiğinde yanıltabilir; migration sonrası tam veritabanı kurulumu için `pytest --create-db` çalıştırmak güvenli olur. Ajanın ürettiği migration dosyasını `python manage.py makemigrations --check` ile doğrulayın; `git diff` üzerinde `operations` listesini okuyun. DRF için testlerde `APIClient` ve `force_authenticate` kullanımı standarttır; ajanın testleri gerçekten veritabanına erişiyorsa `@pytest.mark.django_db` eklediğinden emin olun. Ajan test yazarken `reverse` ile URL çözümlemesi yapabilir; testlerde `Client` yerine `APIClient` kullanması gerektiğini GEMINI.md’ye yazın. Migration testleri için `django_test_migrations` gibi ek paketler kullanıyorsanız bunu da belirtin.

Sorgu sayısını doğrulamak için `django_assert_num_queries` fixture’ını kullanabilirsiniz. Örneğin ajan bir view’i optimize ettiyse, test dosyasına `with django_assert_num_queries(2): response = client.get(reverse('order-detail', args=[order.pk]))` eklemesini isteyin. Bu, N+1 problemini gerçekten çözdüğünü kanıtlar. Ayrıca `CaptureQueriesContext` ile üretilen SQL’e bakabilirsiniz. Testlerden sonra `ruff check .` ve `mypy .` komutlarını mutlaka çalıştırın; ajan bazen kullanılmayan importlar veya tür hataları üretebilir. `python manage.py check` de Django ayarlarındaki hataları yakalamak için faydalıdır. Son olarak `git diff --stat` ile değişen dosyaların kapsamını gözden geçirin; beklenmedik dosyalarda değişiklik varsa ajanı uyarın.

## Aynı Django projesinde birden fazla ajanı AgentVera ile çalıştırmak

AgentVera, Gemini CLI dahil birden fazla kodlama ajanının gerçek komut satırı araçlarını tek pencerede yan yana çalıştırır. Django’da model, API ve test görevlerini ayrı git worktree’lerde paralel yürütebilir, böylece ajanlar birbirinin dosyalarının üzerine yazmaz. Bir ajanın turu bitince otomatik kod incelemesi bulguları file:line ile gösterir; checkpoints sayesinde hatalı bir migration düzeltmesini tek tıkla geri alıp oturumu adım adım yeniden oynatabilirsiniz. Token bütçeleri ise ajanın gün içinde kontrolden çıkmasını engeller.

## Sonuç

Gemini CLI, Django projenizde GEMINI.md ile net kurallar tanındığında model, migration, DRF ve test işlerini hızlandıran pratik bir ajan olur. Başarı, büyük görevleri tek seferde istemekten değil; küçük adımlar, test döngüsü ve diff denetiminden gelir. Bu disiplinle ajanı güvenle kullanabilirsiniz.

## Sık sorulanlar

**Gemini CLI Django projesinde nasıl çalıştırılır?** Proje klasöründe terminal açıp gemini komutunu çalıştırırsınız. Ajan, GEMINI.md dosyasını okuyarak proje kurallarını anlar ve verdiğiniz görevi adım adım uygular.

**Gemini CLI için GEMINI.md dosyasına neler yazılmalı?** Build, test ve lint komutları, klasör yapısı, Django’ya özgü kurallar ve dikkat edilecek tuzaklar yazılmalı. Örneğin python manage.py test yerine pytest kullanılması, migration’ların manuel incelenmesi ve DRF serializer’larında fields kontrolü gibi notlar eklenmelidir.

**Gemini CLI ile Django migration yönetimi güvenli mi?** Evet, ancak her migration sonrası python manage.py makemigrations --check ve python manage.py migrate çalıştırılmalı. Ajanın ürettiği migration dosyasını diff ile inceleyip veri kaybı veya gereksiz bağımlılık olmadığını doğrulamak gerekir.

**Gemini CLI Django REST framework projelerinde serializer ve view yazabilir mi?** Evet, model serializer, viewset ve router görevlerini iyi yürütür. Yine de permission, nested serializer ve source kullanımı gibi konularda çıktıyı gözden geçirip testleri çalıştırmanız önerilir.

---

**AgentVera hakkında.** AgentVera, Solviera Teknoloji tarafından geliştirilen macOS, Windows ve Linux masaüstü uygulamasıdır. 18 yapay zeka kodlama ajanını (Claude Code, Codex, Gemini CLI, Copilot, Cursor, Antigravity, opencode, Hermes, Qwen Code, Kimi Code, Kiro, Amp, Droid, Goose, Vibe, Crush, Aider, Cline) proje bazında, gerçek terminallerde ve kullanıcının kendi CLI kurulum ve girişleriyle yan yana çalıştırır. Ücretsiz planda sınırsız ajan vardır. İndir: https://agentvera.dev/indir/ · Fiyatlar: https://agentvera.dev/fiyatlar/
