无法在Djang中分配用户

2024-04-23 09:29:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个简单的聊天应用程序,在这个应用程序中,我自定义了身份验证后端,使其只使用名称。到目前为止,它正在工作,用户使用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     

Tags: djangofrompyimportselfnoneauth应用程序
2条回答

好的,您的代码中有几个错误:

1)在pp中,不建议使用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

您在排队时遇到问题:

c = PChat(user=request.user, message=msg)

在请求.用户不是用户对象。第一次检查请求.用户是否为实际用户。在

^{pr2}$

编辑

def Post(request): 
    if request.method == "POST":
        msg = request.POST.get('param1')
        if request.user.is_authenticated():
           c = PChat(user=request.user,         message=msg) 
          c.save() 
          return JsonResponse({ 'msg': msg, 'user': c.request.user }) 
    return HttpResponse("Account None")

相关问题 更多 >