Django 无法使用电子邮件登录

时间:2021-07-01 17:59:58

标签: python django backend

我正在尝试使用电子邮件而不是用户名登录。我不知道我在这里做错了什么。我从使用 AbstractUser 的 models.py 中的 Player 实例中过滤了 DB。

import requests
from django.shortcuts import render, redirect
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth import authenticate, login, logout
from django.contrib import messages
from django.views.decorators.csrf import csrf_exempt
from django.views.decorators.csrf import csrf_exempt
from .forms import PlayerCreationForm
from .models import Player

# REGISTER VIEW
def register_view(request):
    if request.method != 'POST':
        form = PlayerCreationForm()
        
    else:
        form = PlayerCreationForm(request.POST)
        if form.is_valid():
            form.save()
            requests.post('http://127.0.0.1:5000/credentials', json={'email': form.cleaned_data['email'], 'username': form.cleaned_data['username'], 
            'password': form.cleaned_data['password2']})
            return redirect('/login')

    context = {'form': form}

    return render(request, "register.html", context)

# LOGIN VIEW
def login_view(request):
    if request.user.is_authenticated:
        return redirect('/')
        
    if request.method == 'POST':
        email = request.POST.get('email')
        password = request.POST.get('password')
        user = Player.objects.filter(email=email, password=password)

        if user is not None:
            login(request, user)
            return redirect('/')
        
        else:
            messages.info(request, 'Incorrect email or password')

    return render(request, 'login.html')

# LOGOUT VIEW
def logout_view(request):
    logout(request)
    return redirect('/')
    
# HOMEVIEW
def home_view(request):
    return render(request, "base.html")

我得到了错误

Internal Server Error: /login/
Traceback (most recent call last):
  File "/home/stevek/.local/lib/python3.9/site-packages/django/core/handlers/exception.py", line 47, in inner
    response = get_response(request)
  File "/home/stevek/.local/lib/python3.9/site-packages/django/core/handlers/base.py", line 181, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/home/stevek/Projects/Python/CRAFTMINE/web/accounts/views.py", line 39, in login_view
    login(request, user)
  File "/home/stevek/.local/lib/python3.9/site-packages/django/contrib/auth/__init__.py", line 129, in login
    request.session[SESSION_KEY] = user._meta.pk.value_to_string(user)
AttributeError: 'QuerySet' object has no attribute '_meta'

我不能使用认证功能,因为它默认只支持用户名和密码。

0 个答案:

没有答案
相关问题