안녕하세요 현재 django 서버를 사용하여
회원가입을 구혀하고 있는데 아무리 봐도 에러를 못잡겠습니다...
도와주시면 정말 감사하겠습니다.
cmd 창에서 django환경을 만든 폴더에서 python manage.py runserver 를 입력하면 서버 실행은 아주 잘됩니다.
현재 웹에서 조건을 만족하고 회원가입을 누르면
django에서 나는 에러는 다음과 같은데
2019-05-24 23:56:25,724 DEBUG member_manager.views test3@gmail.com 12341234a
2019-05-24 23:56:25,735 DEBUG member_manager.views 'AnonymousUser' object has no attribute '_meta'
views.py, models.py, managers.py 간의 문제인데 .. 미치겠습니다.
혹시 연관이 잘못된 부분이 있으면 알려주시면 감사하겠습니다.
views.py 코드입니다.
from django.shortcuts import render
from rest_framework import generics
from django.views.decorators.csrf import csrf_exempt
from django.contrib.auth import login, authenticate
from django.http import JsonResponse
from .models import User
from .managers import UserManager
from .serializers import UserSerializer
import json
import logging
logger = logging.getLogger(__name__)
@csrf_exempt
def signup(request):
try:
body = json.loads(request.body)
email = body['id']
passwd = body['passwd']
logger.debug('{} {}'.format(email, passwd))
new_user = UserManager.create_user(email, passwd)
login(request, new_user, backend='django.contrib.auth.backends.ModelBackend')
return JsonResponse({'result': 'success'})
except Exception as e:
logger.debug(e)
return JsonResponse({'result': 'fail'})
models.py 코드입니다.
from __future__ import unicode_literals
from django.db import models
from django.core.mail import send_mail
from django.contrib.auth.models import PermissionsMixin
from django.contrib.auth.base_user import AbstractBaseUser
from django.utils.translation import ugettext_lazy as _
from .managers import UserManager
class User(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(_('email'), unique=True)
password = models.CharField(max_length=28)
date_joined = models.DateTimeField(_('date joined'), auto_now_add=True)
is_active = models.BooleanField(_('active'), default=True)
is_superuser = models.BooleanField(default=False)
objects = UserManager()
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []
def is_staff(self):
return self.is_superuser
def email_user(self, subject, message, from_email=None, **kwargs):
'''
Sends an email to this User.
'''
send_mail(subject, message, from_email, [self.email], **kwargs)
managers.py 코드입니다.
from django.contrib.auth.base_user import BaseUserManager
from django.contrib.auth import get_user_model
import logging
logger = logging.getLogger(__name__)
class UserManager(BaseUserManager):
use_in_migrations = True
def __init__(self):
super().__init__()
def create_user(self, email, password=None, **extra_fields):
if not email:
raise ValueError('You must input email')
User = get_user_model()
if not (User.objects.filter(email=email).exists()):
user = User.objects.create(email=email)
user.set_password(password)
user.save()
else:
return None
return user
def create_superuser(self, email, password, **extra_fields):
user = self.create_user(
email = email,
password = password,
)
user.is_superuser = True
user.save(using=self._db)
return user
감사합니다.