Python/Django 驕ュ驕縺励◆繧ィ繝ゥ繝シ髮縺ィ隗」豎コ譁ケ豕
Python/Django縺ァ繧ウ繝シ繝繧」繝ウ繧ー繧偵@縺ヲ縺繧九→縲√∪縺縺セ縺隕区」繧後↑縺繧ィ繝ゥ繝シ縺ォ驕ュ驕縺吶k縺薙→縺悟、壹¥ 縺セ縺溘√げ繧ー縺」縺ヲ繧りァ」豎コ遲悶′隕九▽縺九k縺薙→繧ょー代↑縺上お繝ゥ繝シ蜴溷屏縺ョ隱ソ譟サ繧ゆク闍ヲ蜉エ縺ィ縺縺迥カ諷九〒縺吶 縺昴%縺ァ蜷後§繧医≧縺ォ繧ィ繝ゥ繝シ蜴溷屏繧定ェソ縺ケ縺ヲ騾疲婿縺ォ證ョ繧後※縺繧区婿縲シ医⊇縺ィ繧薙←閾ェ蛻蜷代¢シ峨↓ 逋コ逕溘@縺溘お繝ゥ繝シ縺ィ隗」豎コ縺励◆謇矩繧呈嶌縺埼」縺ュ縺ヲ縺縺薙≧縺ィ諤昴>縺セ縺吶 蜷後§繧ィ繝ゥ繝シ縺悟コ縺溘°繧峨→險縺」縺ヲ縲∝酔縺伜次蝗縺ァ縺ゅk縺薙→縺ッ繧ゅ■繧阪s蟆代↑縺縺ァ縺吶′ 莉雁セ後ョ繧ウ繝シ繝繧」繝ウ繧ー譎ゅョ隱ソ譟サ譎る俣縺悟、壼ー代↑繧翫→繧ょー代↑縺上↑繧九→縺縺縺ァ縺縺吶ュ縲
Python:3.9.4 Django:3.2
逶ョ谺。
- 1. Can't create table django_admin_log
- 1.1. manage.py makemigrations
- 1.2. manage.py migrate
- 2. 'auth.User' has been swapped for
- 2.1. 隗」豸域婿豕
- 3. 'NoneType' object has no attribute 'attname'
- 4. MySQLdb._exceptions.OperationalError: (1051, "Unknown table '繧「繝励Μ蜷.user_user_groups'")
- 4.1. 隗」豸域婿豕
- 5. You have multiple authentication backends configured and therefore must provide the backend argument or set the backend attribute on the use
- 5.1. 隗」豸域婿豕
Can't create table django_admin_log
繧「繝励Μ繧剃ス懈舌@縺ヲ譌ゥ騾溷虚縺九◎縺シ√→諤昴▲縺溘→縺阪↓陦ィ遉コ縺輔l縺溘お繝ゥ繝シ
辟ヲ縺」縺ヲ螟ァ莠九↑謇矩繧帝」帙ー縺励※縺縺セ縺吶
縲慧jango_admin_log縲繝繝シ繝悶Ν縺後↑縺縺ィ縺縺繧ィ繝ゥ繝シ縺ァ縺吶′縲√◎繧ゅ◎繧ゅユ繝シ繝悶Ν縺悟ュ伜惠縺励※縺翫j縺セ縺帙s縺ァ縺励◆縲
migrate縺励※縺縺ェ縺縺ョ縺ァ縲√ユ繝シ繝悶Ν縺後≠繧翫∪縺帙s
繧ィ繝ゥ繝シ繝。繝繧サ繝シ繧ク縺ョ荳ュ縺ョ繝繝シ繝悶Ν蜷阪ッ縲∽ク逡ェ譛蛻昴↓繧ィ繝ゥ繝シ縺ォ縺ェ縺」縺溘b縺ョ縺瑚。ィ遉コ縺輔l縺ヲ縺翫j縺セ縺吶 莉雁屓縺ッ繝ュ繧ー繧貞コ蜉帙@縺ォ陦後▲縺滄圀縺ォ縲√お繝ゥ繝シ縺ォ縺ェ縺」縺溘→縺縺縺薙→縺ァ縺吶ュ縲 蜴溷屏縺ッ蛻縺九▲縺溘ョ縺ァ縲[igarate縺ョ繧ウ繝槭Φ繝峨r豬√☆縺縺代〒縺吶 荳蠢應ク玖ィ倥↓險倩シ峨>縺溘@縺セ縺吶
manage.py makemigrations
縲稽anage.py縲阪ョ縺ゅk繝繧」繝ャ繧ッ繝医Μ縺ォ驕キ遘サ縺励√槭う繧ー繝ャ繝シ繧キ繝ァ繝ウ繝輔ぃ繧、繝ォ繧剃ス懈舌@縺セ縺吶
manage.py migrate
繝槭う繧ー繝ャ繝シ繧キ繝ァ繝ウ繧貞ョ溯。後@縺セ縺吶ゅ%繧後〒繝繝シ繝悶Ν縺御ス懈舌&繧後∪縺吶ョ縺ァ縲∝榊コヲ繧「繝励Μ繧貞虚縺九@縺ヲ縺ソ縺セ縺励g縺縲
'auth.User' has been swapped for
Django縺梧署萓帙@縺ヲ縺繧偽ser繝「繝繝ォ繧偵き繧ケ繧ソ繝槭う繧コ縺励◆髫帙↓驕ュ驕縺励◆繧ィ繝ゥ繝シ縺ァ縺吶
繧ィ繝ゥ繝シ縺ョ蜀螳ケ縺ッ縲弱き繧ケ繧ソ繝繝ヲ繝シ繧カ縺御ス懈舌&繧後※import縺励※繧九¢縺ゥ縲√ョ繝輔か繝ォ繝医ョUser繝「繝繝ォ繧剃スソ縺」縺ヲ繧九→縺薙m繧ゅ≠繧九h縲縺ィ
謖鞫倥&繧後※縺縺セ縺吶
縲敬as been swapped for縲阪r逶エ險ウ縺吶k縺ィ
縲御コ、謠帙&繧後※縺繧九
繧ゅ@縺上ッ
鄂ョ縺肴鋤繧上i繧後※縺繧
縺ィ縺縺諢丞袖縺ォ縺ェ繧翫∪縺吶ょ次蝗縺後o縺九k縺ィ縲√お繝ゥ繝シ縺ョ諢丞袖縺ョ蛻縺九▲縺ヲ縺阪∪縺吶ュ縲 萓九∴縺ーfrom user.models import User def loginfunc(request): if request.method == "POST": email = request.POST['email'] password = request.POST['password'] auth_object = EmailAuthBackend() user = auth_object.authenticate(email=email, password=password)縺薙ョ繧医≧縺ォ縲∽ス懈舌@縺溘き繧ケ繧ソ繝繝ヲ繝シ繧カ繧剃スソ縺」縺ヲ縺繧倶クュ縺ァ縲∝挨縺ョ繝励Ο繧ー繝ゥ繝縺ァ繝繝輔か繝ォ繝医ョUser繝「繝繝ォ繧剃スソ縺」縺溷エ蜷医↓ 繧ィ繝ゥ繝シ縺檎匱逕溘@縺セ縺吶from django.contrib.auth.models import User class EmailAuthBackend(ModelBackend): def authenticate(self, email=None, password=None, **kwargs): if email is None or password is None: return try: user = User.objects.get(email=email) except UserModel.DoesNotExist: return None/login/繝壹シ繧ク縺ォ繧「繧ッ繧サ繧ケ縺吶k縺ィ縲√%縺ョ繧医≧縺ェ繧ィ繝ゥ繝シ繝。繝繧サ繝シ繧ク縺瑚。ィ遉コ縺輔l縺セ縺吶

隗」豸域婿豕
繧ォ繧ケ繧ソ繝槭う繧コ縺励◆User繝「繝繝ォ縺ィ繝繝輔か繝ォ繝医ョUser繝「繝繝ォ縺悟ア蟄倥〒縺阪↑縺繧医≧縺ェ縺ョ縺ァ縲√ョ繝輔か繝ォ繝医ョUser繝「繝繝ォ繧剃スソ縺」縺ヲ縺繧狗ョ謇繧貞ィ縺ヲ繧ォ繧ケ繧ソ繝槭う繧コ縺励◆User繝「繝繝ォ縺ォ鄂ョ縺肴鋤縺医※縺縺阪∪縺励g縺縲
#from django.contrib.auth.models import User
from user.models import User
class EmailAuthBackend(ModelBackend):
def authenticate(self, email=None, password=None, **kwargs):
if email is None or password is None:
return
try:
user = User.objects.get(email=email)
except UserModel.DoesNotExist:
return None
'NoneType' object has no attribute 'attname'
縺薙ョ繧ィ繝ゥ繝シ繧繧医¥繧上°繧峨↑縺九▲縺溘ョ縺ァ縺吶′縲√お繝ゥ繝シ縺檎匱逕溘@縺ヲ縺縺溘け繝ゥ繧ケ縺ォ init縺ョ蜃ヲ逅繧定ソス蜉縺励※繧ィ繝ゥ繝シ隗」豸医@縺セ縺励◆縲 def __init__(self, *args, *kwargs): super().__init__(args, **kwargs)
譛ャ蠖薙ッ豁」縺励¥逅隗」縺励※縺九i騾イ繧√↑縺縺ィ縺縺代↑縺縺ョ縺ァ縺吶′ 縺薙■繧峨ッ荳譌ヲ謾セ鄂ョ
MySQLdb._exceptions.OperationalError: (1051, "Unknown table '繧「繝励Μ蜷.user_user_groups'")
migration縺励◆縺ィ縺阪↓繧ィ繝ゥ繝シ逋コ逕溘ゅ%繧後°繧峨ユ繝シ繝悶Ν繧剃ス懊m縺縺ィ縺励※縺繧九ョ縺ォ隕九▽縺九i縺ェ縺縺ィ縺ッ縺ゥ縺縺縺縺薙→縺縺ィ諤昴>縺セ縺励◆縺 縺昴b縺昴b繝繝シ繝悶Ν繧剃ス懈舌☆繧九%縺ィ縺後〒縺阪※縺縺ェ縺九▲縺溘h縺縺ァ縺吶
models.py縺ェ縺ゥ繧定ァヲ縺」縺ヲ縺ッmigrate縺励※菫ョ豁」縺励※繧堤ケー繧願ソ斐@縺ヲ縺縺上≧縺。縺ォ 繝繝シ繝悶Ν髢薙ョ螟夜Κ邨仙粋縺ェ縺ゥ縺ョ蠖ア髻ソ縺ァ縲√ユ繝シ繝悶Ν繧呈カ医@縺溘j譖エ譁ー縺励◆繧翫〒縺阪↑縺上↑縺」縺ヲ縺繧九%縺ィ縺後≠繧翫∪縺吶 縺昴ョ髫帙↓縲∽クュ騾泌濠遶ッ縺ォ縺励°繝繝シ繝悶Ν縺御ス懈舌&繧後※縺縺ェ縺縺ィ
繝繝シ繝悶Ν縺後↑縺繧
縺ィ繧ィ繝ゥ繝シ繧貞瑞縺榊コ縺励※縺上l縺セ縺吶 繧ィ繝ゥ繝シ繝。繝繧サ繝シ繧ク縺ョ譛蛻昴ョ驛ィ蛻縺ッ縲∝茜逕ィ縺励※縺繧汽B縺ォ繧医▲縺ヲ逡ー縺ェ繧翫∪縺吶 莉雁屓縺ッMySQL蛻ゥ逕ィ縺励※縺縺溘ョ縺ァ縲勲ySQLdb._exceptions縲阪→陦ィ遉コ縺輔l縺ヲ縺翫j縺セ縺吶
隗」豸域婿豕
荳玖ィ倥ョ謇矩縺ァ隗」豸医@縺セ縺励◆縲ゅ◆縺縺励√ユ繝シ繝悶Ν繧剃クク縺斐→豸医☆縺ョ縺ァ縲√ユ繧ケ繝医ョ繝シ繧ソ縺ェ縺ゥ繧ゅ☆縺ケ縺ヲ蜑企勁縺吶k縺薙→縺ォ縺ェ繧狗せ縺ッ隕∵ウィ諢
菴輔b閠縺医★譛ャ逡ェ迺ー蠅縺ァ螳溯。後☆繧九%縺ィ縺ッ豁「繧√※縺上□縺輔>シ√ョ繝シ繧ソ豸医☆謇矩縺ァ縺呻シシ
- migrations繝輔か繝ォ繝縺ォ蜈・縺」縺ヲ縺繧九ヵ繧。繧、繝ォ繧偵契_init__.py縲阪r谿九@縺ヲ縺吶∋縺ヲ蜑企勁
- 菴懈舌&繧後◆繝繝シ繝悶Ν繧貞ィ縺ヲ繝峨Ο繝繝
- 蜀榊コヲmigrate繧貞ョ溯。

縺薙l縺ァ辟。莠九↓縺吶∋縺ヲ縺ョ繝繝シ繝悶Ν縺御ス懈舌&繧後※縺繧後ー縲√お繝ゥ繝シ縺ッ隗」豸医@縺ヲ縺縺セ縺吶
You have multiple authentication backends configured and therefore must provide the backend argument or set the backend attribute on the use
縺薙■繧峨ッ隱崎ィシ繝舌ャ繧ッ繧ィ繝ウ繝峨r諡。蠑オ縺励※縺縺滄圀縺ォ驕ュ驕縺励◆繧ィ繝ゥ繝シ繝。繝繧サ繝シ繧ク縺ァ縺吶 繧ィ繝ゥ繝シ繝。繝繧サ繝シ繧ク繧定ヲ∫エ縺吶k縺ィ
隱崎ィシ繝舌ャ繧ッ繧ィ繝ウ繝峨′隍謨ー逋サ骭イ縺輔l縺ヲ繧九¢縺ゥ縲√←繧御スソ縺縺九o縺九i縺ェ縺縺九i繝舌ャ繧ッ繧ィ繝ウ繝我スソ縺縺ィ縺阪↓蠢縺壽欠螳壹@縺ヲ
縺ィ縺縺諢溘§縺ァ縺呻シ医*縺」縺上jシ

隱崎ィシ繝舌ャ繧ッ繧ィ繝ウ繝峨ョ諡。蠑オ譁ケ豕輔ッ蛻・險倅コ九〒邏ケ莉九@繧医≧縺ィ諤昴>縺セ縺吶′ 霑ス蜉縺励◆隱崎ィシ繝舌ャ繧ッ繧ィ繝ウ繝峨ッ荳玖ィ倥ョ騾壹j險ュ螳壹ヵ繧。繧、繝ォ縺ォ霑ス險倥☆繧九%縺ィ縺ァ蛻ゥ逕ィ縺ァ縺阪∪縺吶
AUTHENTICATION_BACKENDS = [
'django.contrib.auth.backends.ModelBackend',
'user.auth.EmailAuthBackend', # 霑ス蜉
]
險ュ螳壹ヵ繧。繧、繝ォ縺ォ霑ス蜉縺励◆縺ゅ→縺ッ縲√手、謨ー縺ョ隱崎ィシ繝舌ャ繧ッ繧ィ繝ウ繝峨′螳夂セゥ縺輔l縺ヲ縺繧狗憾諷九上↓縺ェ繧九ョ縺ァ 繝ュ繧ー繧、繝ウ蜃ヲ逅縺ェ縺ゥ縺ァ縲∝茜逕ィ縺吶k隱崎ィシ繝舌ャ繧ッ繧ィ繝ウ繝峨ョ謖螳壹′蠢隕√↓縺ェ繧翫∪縺吶
隗」豸域婿豕
繝ュ繧ー繧、繝ウ譎ゅョ蜃ヲ逅繧剃ク玖ィ倥ョ繧医≧縺ォ菫ョ豁」縺励∪縺吶
login(request, user)
login(request, user,backend='user.auth.EmailAuthBackend')
繝ュ繧ー繧、繝ウ蜃ヲ逅蜻シ縺ウ蜃コ縺玲凾縺ョ繝代Λ繝。繝シ繧ソ縺瑚ソス蜉縺輔l縺ヲ縺縺セ縺吶ュ縲 縺薙ョ繧医≧縺ォ縺励※蛻ゥ逕ィ縺吶k隱崎ィシ繝舌ャ繧ッ繧ィ繝ウ繝峨r謖螳壹@縺セ縺吶


