我有一个简单的聊天应用程序,在这个应用程序中,我自定义了身份验证后端,使其只使用名称。到目前为止,它正在工作,用户使用Django login()登录。在
现在,我遇到了一个问题,即分配一个出现此错误的用户,并使应用程序的其余部分停止:
ValueError: Cannot assign "<SimpleLazyObject:
<django.contrib.auth.models.AnonymousUser
object at 0x7f7db7b71e80>>": "PChat.user" must be a "User" instance.
视图.py
^{pr2}$模型.py
from django.db import models
from django.db import models
from django.contrib.auth.models import User
class PChat(models.Model):
created = models.DateTimeField(auto_now_add=True)
user = models.ForeignKey(User)
message = models.CharField(max_length=200)
def __unicode__(self):
return self.message
验证_后端.py
from django.contrib.auth.backends import ModelBackend
from django.contrib.auth.models import User
class PasswordlessAuthBackend(ModelBackend):
"""Log in to Django without providing a password."""
def authenticate(self, username=None):
try:
return User.objects.get(username=username)
except User.DoesNotExist:
return None
def get_user(self, user_id):
try:
return User.objects.get(pk=user_id)
except User.DoesNotExist:
return None
好的,您的代码中有几个错误:
1)在p和p中,不建议使用locals()。你必须尽可能避免这种情况。对于传递到上下文字典的数据,您需要显式。在
2)在登录视图中,当用户不是None时,必须调用login函数。[1]
3)最后一个错误出现在Post视图中,您必须首先询问请求.用户是否使用request.user.is_认证()函数。如果用户经过身份验证,则请求.用户是一个普通的用户实例,在另一种情况下,它将是一个匿名用户,它们是不同的东西。PChat模型中的用户期望一个用户而不是一个匿名用户实例。在
[1]https://docs.djangoproject.com/en/1.11/topics/auth/default/#how-to-log-a-user-in
您在排队时遇到问题:
在请求.用户不是用户对象。第一次检查请求.用户是否为实际用户。在
^{pr2}$编辑
相关问题 更多 >
编程相关推荐