Récemment, j'ai commencé à utiliser ma base de données mysql existante dans Django. L'implémentation a fonctionné.
Les paramètres de la base de données ressemblent à ceci
DATABASES = {
'default': {
'NAME': 'app_data',
'ENGINE': 'django.db.backends.sqlite3',
},
'users': {
'NAME': 'user_data',
'ENGINE': 'django.db.backends.mysql',
'NAME': 'test01',
'USER': 'test01',
'PASSWORD': 'test',
'HOST': 'localhost',
'PORT': '',
}
Utilisation de la connexion de base de données 'users' dans mon modèle 'MyUser' comme suit.
class MyUser(models.Model):
name = models.CharField(max_length=50)
key = models.CharField(max_length=32)
options = models.TextField(blank=True, null=True)
description = models.TextField(blank=True, null=True)
statistics = models.TextField(blank=True, null=True)
create_time = models.DateTimeField()
modify_time = models.DateTimeField()
is_enabled = models.IntegerField(blank=True, null=True)
password = models.CharField(max_length=50, blank=True, null=True)
hosts = models.TextField(blank=True, null=True)
remote_ips = models.CharField(max_length=200, blank=True, null=True)
presets = models.TextField(blank=True, null=True)
icons = models.TextField(blank=True, null=True)
roles = models.TextField(blank=True, null=True)
resources = models.TextField(blank=True, null=True)
class Meta:
managed = False
db_table = 'user'
J'ai obtenu la même sortie que ci-dessus en inspectant la base de données avec
python manage.py inspectdb --database=users
Comme j'utilise une base de données externe pour mon authentification utilisateur et que mon modèle est très différent de celui par défaut, j'ai écrit un backend personnalisé en utilisant le modèle utilisateur par défaut de Django et en copiant les utilisateurs lors de leur première connexion.
from django.conf import settings
from django.contrib.auth.hashers import check_password
from django.contrib.auth.models import User
from dashboard.models import MyUser
class UserAuthentication(object):
def authenticate(self, username=None, password=None):
try:
myuser = MyUser.objects.get(name=username);
except MyUser.DoesNotExist:
myuser = None
if myuser and myuser.password == password:
try:
user = User.objects.get(username=username)
except User.DoesNotExist:
user = User(username=username, password=password)
user.save()
return user
return None
def get_user(self, user_id, user_name):
try:
return User.objects.get(pk=user_id)
except User.DoesNotExist:
return None
Je ne suis même pas capable de confirmer que tout fonctionne car je suis déjà bloqué lors de la connexion.
Cannot resolve keyword 'name' into field. Choices are: id
Je suis encore novice dans l'utilisation de Python et Django. Utilisant Python 2.7.12
et Django 1.10.3
J'apprécie toute aide, merci de lire!