Merhabalar, bu yazımda Django’da özelleştirilmiş, profil fotoğrafına sahip bir UserModel’i nasıl oluşturabileceğimizi anlatmaya çalışacağım. Kolay olması açısından bu örneği AbstractUser kullanarak yapacağım.
Eminim ki bir çoğumuz Django ile çalışırken kullanıcılarımızın profil fotoğraflarını almayı istemişizdir. Bunun için genelde kullanılan yöntem ayrı bir Profile modeli tanımlamak ve bir User modeli ile bağlayıp signal kullanarak kayıt işlemini tamamlamaktır. Buna ek olarak Django ile birlikte gelen AbstractUser ve AbstractBaseUser sınıflarını miras alarak da kendi User sınıfımızı oluşturabiliriz.
AbstractUser vs AbstractBaseUser
Django default olarak kullanıcı doğrulamak için username kullanır. Biz bunu değiştirmek istersek veya kullanıcılarımıza başka özellikler eklemek istersek AbstractUser ve AbstractBaseUser sınıflarını kullanabiliriz. Peki ikisi arasındaki fark nedir?
AbstractUser
Default gelen User modelinden memnunsak, yalnızca bazı fieldları çıkartmak veya bazı yeni fieldlar eklemek istiyorsak bu sınıfı kullanmamız gerekmektedir.
AbstractBaseUser
Eğer ki hiç bir şekilde default gelen User modelinden memnun değilsek sıfırdan kendi User modelimizi oluşturmak için bu sınıfı kullanmamız gerekmektedir.
Şimdi örneğimize geçelim. Sıfırdan bir django projesi oluşturuyorum ve içerisinde myuser adında bir app oluşturuyorum.

myuser altındaki models.py dosyama gidiyorum ve AbstractUser sınıfını import ediyorum.

Kendime MyUser adında, AbstractUser sınıfını miras alan bir sınıf oluşturuyorum.
- Profil fotoğrafı için profile_photo adında bir field ekliyorum

Kendi kullanıcı modelimizi oluşturduğumuza göre artık bunu settings.py içerisinde AUTH_USER_MODEL ile Django’ya bildirmeliyiz ve o da authentication işlemlerinin bu model üzerinden yapılacağını anlasın. Şema şu şekildedir: hangi_app.HangiModel

Artık migrate işlemlerini gerçekleştirebiliriz. ImageField kullandığımız için Pillow kütüphanesinin yüklenmesi gerekmektedir (pip install Pillow).

Kendime bir superuser oluşturuyorum ve admin panele giriş yapıyorum. Vee karşımda MyUser modellerini yönetebileceğim bir bölüm yok. Bunun için MyUser modeli admin.py içerisinde admin app’imize kayıt ediyoruz.


İstersek aşağıdaki gibi bir modifikasyonla resimleri admin panelimizde de gösterebiliriz.


Kendi kullanıcı modelimizi oluşturmayı kolay olması için sadece profil fotoğrafı ekleyerek göstermeye çalıştım. Fakat biraz daha ileri seviye sayılabilecek özelleştirmeler için Django’nun kendi official dökümanlarından yararlanabilirsiniz. Umarım faydalı olmuştur, iyi çalışmalar.