我正在尝试使用电子邮件而不是用户名登录。我不知道我在这里做错了什么。我从使用 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'
我不能使用认证功能,因为它默认只支持用户名和密码。