我已经设置了基本身份验证,但是在登录功能未给出任何错误的情况下,如果返回某些内容,则会出现错误提示-
{'session_key': ['Session with this Session key already exists.']}
这是代码:
def header_auth(request):
auth_header = request.META['HTTP_AUTHORIZATION']
encoded_credentials = auth_header.split(' ')[1] # Removes "Basic " to isolate credentials
decoded_credentials = base64.b64decode(encoded_credentials).decode("utf-8").split(':')
return decoded_credentials[0], decoded_credentials[1]
def login_view(request):
username, password = header_auth(request)
user = authenticate(request, username=username, password=password)
if user is not None:
try:
login(request, user)
print('after login')
except Exception as e:
print('login error', e)
return HttpResponse('Authorized', status=200)
else:
return HttpResponse('Not Authorized', status=403)
def logout_view(request):
logout(request)
class FyndUser(AbstractUser):
company_id = models.IntegerField(unique=True)
如果我发送了用户对象而不是响应,则我收到用户对象没有属性get的错误。
答案 0 :(得分:0)
发现错误。 我已经为所有模型设置了一个pre_save信号来进行一次full_clean。因此,它会在保存之前对所有模型进行完全清理。 在这里失败-
env/lib/python3.6/site-packages/django/db/models/base.py in full_clean
line 1166 at raise ValidationError(errors)
消除信号有效,但我仍然不知道出了什么问题。
答案 1 :(得分:0)
我在覆盖pre_save
信号以按照建议here执行full_clean
之后遇到了相同的错误。对于那些想要维持信号覆盖的人,您可以限制受影响的模型,以便默认的Django身份验证仍然有效
from django.db.models.signals import pre_save
from django.dispatch import receiver
@receiver(pre_save)
def pre_save_handler(sender, instance, *args, **kwargs):
"""Override signal to validate fields of selected models before saving."""
user_models = ['MyModel1', 'MyModel2', ...]
if sender in user_models:
instance.full_clean()