raek
2k
2019-05-25 00:25:26 작성 2019-05-25 00:37:24 수정됨
2
141

django 서버 _meta 에러 에러 질문이요


안녕하세요 현재 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


감사합니다.

0
0
  • 답변 2

  • 7i
    1k
    2019-05-25 12:09:04
    에러 좀 더 전체적으로 보여주시면 좋을듯 합니다.
    0
  • raek
    2k
    2019-05-25 12:54:40 작성 2019-05-25 12:55:14 수정됨

    7i 

    Django version 2.2.1, using settings 'vip_ml_server.settings'

    Starting development server at http://127.0.0.1:8000/

    Quit the server with CTRL-BREAK.

    2019-05-25 12:50:36,465 DEBUG member_manager.views test7@gmail.com 12341234a

    2019-05-25 12:50:36,489 DEBUG member_manager.views 'AnonymousUser' object has no attribute '_meta'

    [25/May/2019 12:50:36] "POST /api/signup HTTP/1.1" 200 18


    이게 전부네요

    구글링 해보니까 음 왠지

    AnonymousUser 라고 나온거 보면

    AbstractUser클래스 의

    • .is_anonymous : 로그아웃 여부 (속성)

    을 설정안해서 그런가요?


    참고로 저는

    class AbstractUser(AbstractBaseUser, PermissionsMixin):

    가 아니라 

    class User(AbstractBaseUser, PermissionsMixin):

    로 클래스를 입력했습니다.

    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.