Django veritabanına dışarıdan toplu üye aktarma

Herkese merhabalar arkadaşlar,

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.

Bu durumu nasıl aşabilirim?

Veri tabanı tablosunu çekip create_user fonksiyonu üzerinden kaydederseniz kullanıcılar gelir.

Ü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ı.

1 Beğeni