質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Q&A

0回答

437閲覧

Djnago authenticate()でNoneが常に返される

shmpmrkw

総合スコア4

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

0グッド

0クリップ

投稿2019/12/04 14:21

編集2019/12/05 23:38

前提・実現したいこと

djangoで新規ユーザー登録を実装しています。
新規登録後に、ログインを行いトップ画面に遷移させたいのですが、下記のエラーがでてしまいます。

発生している問題・エラーメッセージ

django

1AttributeError at /signup/ 2'AnonymousUser' object has no attribute '_meta'

該当のソースコード

view.pyはこれです。

python3

1def signup(request): 2 if request.method == 'POST': 3 form = UserCreationForm(request.POST) 4 if form.is_valid(): 5 form.save() 6 username = form.cleaned_data['username'] 7 password = form.cleaned_data['password1'] 8 user = authenticate(username=username, password=password)# フォームの入力値で認証できればユーザーオブジェクト、できなければNoneを返す 9 login(request, user, backend='django.contrib.auth.backends.ModelBackend') 10 return redirect('polls:index') 11 12 else: 13 form = UserCreationForm() 14 return render(request, 'polls/signup.html', {'form': form})

form.py

python3

1 2class UserCreationForm(forms.ModelForm): 3 password1 = forms.CharField(label='Password', widget=forms.PasswordInput) 4 password2 = forms.CharField( 5 label='Password confirmation', widget=forms.PasswordInput) 6 7 class Meta: 8 model = User 9 fields = ('email', 'username') 10 11 def clean_password2(self): 12 password1 = self.cleaned_data.get("password1") 13 password2 = self.cleaned_data.get("password2") 14 if password1 and password2 and password1 != password2: 15 raise forms.ValidationError("Passwords don't match") 16 return password2 17 18 def save(self, commit=True): 19 user = super().save(commit=False) 20 user.set_password(self.cleaned_data["password1"]) 21 if commit: 22 user.save() 23 return user 24 25 26class UserChangeForm(forms.ModelForm): 27 password = ReadOnlyPasswordHashField() 28 29 class Meta: 30 model = User 31 fields = ('email', 'password', 'username','profile','prof_img','cover_img') 32 33 def clean_password(self): 34 return self.initial["password"]

model.py

python3

1class UserManager(BaseUserManager): 2 def create_user(self, username, email, password=None): 3 if not username: 4 raise ValueError('Users must have an username') 5 6 user = self.model( 7 username=username, 8 email=self.normalize_email(email), 9 ) 10 11 user.set_password(password) 12 user.save(using=self._db) 13 return user 14 15 def create_superuser(self, username, email, password): 16 user = self.create_user( 17 username=username, 18 email=self.normalize_email(email), 19 password=password, 20 ) 21 user.is_admin = True 22 user.is_staff = True 23 user.is_superuser = True 24 user.save(using=self._db) 25 return user 26 27 28class User(AbstractBaseUser): 29 username_validator = UnicodeUsernameValidator() 30 username = models.CharField( 31 _('username'), 32 max_length=150, 33 unique=True, 34 help_text=_('Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.'), 35 validators=[username_validator], 36 error_messages={ 37 'unique': _("A user with that username already exists."), 38 }, 39 ) 40 email = models.EmailField( 41 verbose_name='email', 42 max_length=255, 43 unique=True, 44 ) 45 profile = models.CharField(max_length=200, blank=True) 46 prof_img = models.ImageField(upload_to='prof_img',verbose_name='プロフィール画像',blank=True) 47 cover_img = models.ImageField(upload_to='cover_img',verbose_name='背景画像',blank=True) 48 49 is_active = models.BooleanField(default=True) 50 is_admin = models.BooleanField(default=False) 51 date_joined = models.DateTimeField(_('date joined'), default=timezone.now) 52 53 objects = UserManager() 54 55 EMAIL_FIELD = 'email' 56 USERNAME_FIELD = 'username' 57 REQUIRED_FIELDS = [] 58 59 def __str__(self): 60 return self.username 61 62 def has_perm(self, perm, obj=None): 63 return True 64 65 def has_module_perms(self, app_label): 66 return True 67 68 @property 69 def is_staff(self): 70 return self.is_admin 71

試したこと

うまく動作していない場所としては、Viewの
user = authenticate(username=username, password=password)
で、Noneがかえされているのが原因だとは、特定できたのですが、なぜNONEで返されるのかが理解できていません。
なお、ユーザーネーム、パスワードは正常に登録されていることは確認できています。

他に足りない情報がございましたらご指摘くださいますようお願いいたします。

補足情報(FW/ツールのバージョンなど)

Django==2.1.5

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問