Aramaya inandım ancak benzer bir başlık bulamadım.
Yeni oluşturduğum projemde SQLite veritabanı kullanacağım.
Bir MySQL veritabından PhpMyAdmin arayüzü ile kullanıcı adı ve şifreleri SQL kodu olarak dışarı aktardım (INSERT INTO olarak dosya halinde verdi).
Django’nun NOT NULL olması gerek alanlarını da ekledikten sonra kodu DB Browser for SQLite ile aktardım ancak uygulamamda kullanıcı girişinde kullanıcı bulunamıyor.
Uygulama üzerinde admin panel ile oluşturduğum kullanıcı girişinde problem yok.
Veritabanına baktığımda Django, uygulamada oluşturduğum admin panel kullanıcısının şifresini hash kullanarak tutuyor. Kendi aktardığım kullanıcıların şifreleri ise normal şekilde görünüyor yani herhangi bir şifreleme yok.
Üyeleri bir txt dosyasından interaktif shell kullanarak aktarım sağladım.
txt dosyası içinde üyeler kullanıcı adı ve şifre virgülle ayrılmış şekilde. Örnek olarak;
foo,123456 bar,654321 baz,192837
Şifreler özel karakter içermediğinden ayıklama gereği duymadım, benzer bir sorunla karşılaşan arkadaş duruma göre burada ekstra işlemler yapabilir.
Önce django shell ortamına giriş yaptım.
$ python manage.py shell
Shell ortamında üye kayıt gerekli kütüphaneyi import edip dosya okuduktan sonra bir döngü ile satır satır kayıt işlemini gerçekleştirdim. Kayıt işlemi django tarafından yapıldığı için şifreler hash işleminden geçerek veritabına aktarıldı.
from django.contrib.auth.models import User # django üyelik sınıfı
f = open('users.txt', 'r') # dosyayı aç
"""
satır satır oku, linux ve macOS için çalışır ancak
windows için open fonksiyonuna encoding='utf-8' eklemek gerekiyor
"""
users = f.readlines()
users = [line.rstrip('\n') for line in users] # yeni satır karakterini kes
for user in users:
# her satırda kullanıcı ve şifre virgülle ayrıldığı için virgüle göre listeye bölüyorum
user = user.split(',')
# kayıt işlemi
User.objects.create_user(username=user[0], password=user[1])
Önemli olan bir diğer nokta, kullanıcılardan benzer kullanıcı adı olan var ise hata alınır.
Django varsayılan User sınıfında username alanı UNIQUE olarak ayarlı.