first commit

This commit is contained in:
Beyhan Oğur
2026-04-26 22:27:56 +03:00
commit d9f1ea341e
1021 changed files with 70645 additions and 0 deletions

208
CONTACT_EMAIL_SETUP.md Normal file
View File

@@ -0,0 +1,208 @@
# Contact Form - Email Gönderimi (Celery)
## Yapılan Değişiklikler
### 1. Contact Model Güncellemeleri
- `user` alanı artık `null=True, blank=True` (anonim kullanıcılar da form gönderebilir)
- `ip` alanı artık `null=True, blank=True` (opsiyonel)
- `on_delete=SET_NULL` olarak değiştirildi
### 2. Yeni Dosyalar
- **contact/tasks.py**: Celery task ile email gönderimi
- **core/celery.py**: Celery yapılandırması
- **core/__init__.py**: Celery app otomatik yükleme
- **test_contact_api.py**: API test scripti
### 3. View Güncellemeleri (contact/views.py)
- `permission_classes = [AllowAny]` - Herkes form gönderebilir
- IP adresi otomatik olarak algılanır
- Kullanıcı giriş yapmışsa user kaydedilir, yoksa None
- Contact kaydedildikten sonra Celery task ile email gönderilir
### 4. Serializer Güncellemeleri
- Gereksiz alanlar kaldırıldı (ip, updated_at)
- Sadece gerekli alanlar kabul edilir
## Kurulum ve Çalıştırma
### 1. Migration Uygula (TAMAMLANDI ✅)
```bash
python manage.py makemigrations contact
python manage.py migrate contact
```
### 2. Redis'in Çalıştığından Emin Olun
Celery için Redis broker gerekli. Settings'te tanımlı:
```
CELERY_BROKER_URL = redis://default:1923btO**@10.80.80.70:6379/5
```
### 3. MailPit'in Çalıştığından Emin Olun
Email testleri için MailPit kullanılıyor:
- SMTP: localhost:1025
- Web UI: http://localhost:8025
MailPit başlatma (Docker):
```bash
docker run -d -p 1025:1025 -p 8025:8025 --name mailpit axllent/mailpit
```
### 4. Celery Worker Başlat
Yeni bir terminal açın ve şu komutu çalıştırın:
```bash
cd /Users/beyhan/Desktop/Projeler/Python/atabackend
source venv/bin/activate
celery -A core worker --loglevel=info
```
### 5. Django Sunucusunu Başlat
Başka bir terminal açın:
```bash
cd /Users/beyhan/Desktop/Projeler/Python/atabackend
source venv/bin/activate
python manage.py runserver
```
### 6. Test Et
```bash
# Terminal'de test script'i çalıştır
python test_contact_api.py
# Veya cURL ile
curl -X POST http://127.0.0.1:8000/api/v1/contact/create/ \
-H "Content-Type: application/json" \
-d '{
"name": "Test Kullanıcı",
"email": "test@example.com",
"subject": "Test Konusu",
"message": "Bu bir test mesajıdır."
}'
```
### 7. Email Kontrolü
- MailPit web arayüzüne gidin: http://localhost:8025
- Gönderilen emaili göreceksiniz
## API Endpoint
**URL**: `POST /api/v1/contact/create/`
**Permission**: AllowAny (Kimlik doğrulama gerekmez)
**Request Body**:
```json
{
"name": "Adınız Soyadınız",
"email": "email@example.com",
"subject": "Konu",
"message": "Mesajınız"
}
```
**Response** (201 Created):
```json
{
"id": 1,
"name": "Adınız Soyadınız",
"email": "email@example.com",
"subject": "Konu",
"message": "Mesajınız",
"created_at": "2026-01-15T10:30:00Z"
}
```
## Celery Task İzleme
### Task Logları
Celery worker terminalinde task durumunu görebilirsiniz:
```
[2026-01-15 10:30:00,123: INFO/MainProcess] Task contact.tasks.send_contact_email[...] received
[2026-01-15 10:30:00,456: INFO/ForkPoolWorker-1] Task contact.tasks.send_contact_email[...] succeeded
```
### Django Admin'den İzleme
Celery Beat ve Results kurulu, admin panelden task sonuçlarını görebilirsiniz:
- http://127.0.0.1:8000/admin/django_celery_results/
## Email Şablonu
Gönderilen email formatı:
```
Konu: Yeni İletişim Mesajı: [KONU]
Yeni bir iletişim mesajı alındı!
Gönderen: [AD SOYAD]
Email: [EMAIL]
IP Adresi: [IP]
Konu: [KONU]
Mesaj:
[MESAJ İÇERİĞİ]
---
Bu mesaj otomatik olarak gönderilmiştir.
```
## Production Ayarları
Production'da şunları yapın:
1. **Email Backend'i değiştir** (settings.py):
```python
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com' # veya kendi SMTP sunucunuz
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_HOST_USER = 'your-email@gmail.com'
EMAIL_HOST_PASSWORD = 'your-app-password'
DEFAULT_FROM_EMAIL = 'noreply@denizogur.com.tr'
```
2. **Alıcı email adresini değiştir** (contact/tasks.py):
```python
recipient_list=['info@denizogur.com.tr'] # Production email
```
3. **Redis production URL'i kullan**
4. **Celery worker'ı production'da service olarak çalıştır**
## Sorun Giderme
### Email Gönderilmiyor
1. Celery worker çalışıyor mu? → Terminal'i kontrol edin
2. Redis bağlantısı var mı? → `CELERY_BROKER_URL` kontrol edin
3. MailPit çalışıyor mu? → http://localhost:8025 kontrol edin
### Task Çalışmıyor
```bash
# Celery task'ı manuel test et
python manage.py shell
>>> from contact.tasks import send_contact_email
>>> send_contact_email.delay('Test', 'test@test.com', 'Konu', 'Mesaj', '127.0.0.1')
```
### Celery Worker Hatası
```bash
# Celery worker'ı yeniden başlat
# Worker terminalinde Ctrl+C
# Sonra tekrar başlat:
celery -A core worker --loglevel=info
```
## İleride Eklenebilecek Özellikler
1. **Email Template (HTML)**: Rich HTML email şablonu
2. **Auto-reply**: Kullanıcıya otomatik teşekkür emaili
3. **Rate Limiting**: Spam koruması için rate limiting
4. **File Upload**: Contact formuna dosya ekleme
5. **Admin Notifications**: Yeni mesaj geldiğinde admin bildirim
6. **Email Queue Retry**: Email başarısız olursa yeniden deneme
## Referanslar
- Celery Docs: https://docs.celeryq.dev/
- Django Celery Results: https://django-celery-results.readthedocs.io/
- MailPit: https://github.com/axllent/mailpit