最近、Django で既存の mysql データベースを使い始めました。実装するとうまくいきました
データベースの設定はこんな感じ
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': '',
}
次のように、モデル「MyUser」で「ユーザー」データベース接続を使用します。
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'
でデータベースを検査することにより、上記と同じ出力を得ました
python manage.py inspectdb --database=users
ユーザー認証に外部データベースを使用しており、モデルがデフォルトとは大きく異なるため、Django のデフォルト ユーザー モデルを使用してカスタム バックエンドを作成し、最初のログインでユーザーをそれにコピーしました。
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
ログイン時にすでにスタックしているため、すべてが機能していることを確認することさえできません.
Cannot resolve keyword 'name' into field. Choices are: id
私はまだ Python と Django の初心者です。Python 2.7.12
読んでDjango 1.10.3
くれてありがとう!