-1

我在 Django 中有一个简单的表单 login.html。我从登录表单中获取用户名和密码,并用于在我的 Django 视图中进行验证:

def login_upload(request):
    if request.method == 'POST':
        username = request.POST['username']
        username1 = ''.join(username)
        password = request.POST['password']
        password = ''.join(password)    
        password1 = hashlib.sha1(password).hexdigest()
        user = authenticate(username=username1, password=password1)
        user_id = request.galaxyuser.id
        if len(user) > 0:
            return render_to_response('right.html', {'user_id':user_id}, context_instance=RequestContext(request))
        else:
            return render_to_response('wrong.html', context_instance=RequestContext(request))

    else:
        return render_to_response('login.html', context_instance=RequestContext(request))

我还想获取稍后必须使用的用户 ID。我尝试使用:

user_id = request.galaxyuser.id

但它返回None值。这是我的models.py:

class GalaxyUser(models.Model):
    id = models.IntegerField(primary_key=True)
    create_time = models.DateTimeField(null=True, blank=True)
    update_time = models.DateTimeField(null=True, blank=True)
    email = models.CharField(max_length=765)
    password = models.CharField(max_length=120)
    external = models.IntegerField(null=True, blank=True)
    deleted = models.IntegerField(null=True, blank=True)
    purged = models.IntegerField(null=True, blank=True)
    username = models.CharField(max_length=765, blank=True)
    form_values_id = models.IntegerField(null=True, blank=True)
    disk_usage = models.DecimalField(null=True, max_digits=16, decimal_places=0, blank=True)
    class Meta:
        db_table = u'galaxy_user'

编辑: 我的自定义身份验证功能:

def authenticate(username='username', password='password'):
    return GalaxyUser.objects.filter(username=username, password=password)
4

1 回答 1

1

我不知道request.galaxyuser应该是什么,但给定一个用户对象,id 是该对象的一个​​属性。如果凭据有效,该authenticate函数应该返回一个用户对象。

user = authenticate(username=username1, password=password1)
user_id = request.galaxyuser.id  # what are you doing here?

user_id = user.id  # this is the user ID.

根据您实现自定义User类的方式,此问题可能有不同的答案。我假设它是由authenticate.

更新:

您的示例显示您返回QuerySet(a .filter) ,它是行列表。

您需要返回一个对象以便查找 ID 属性,或者您需要修改视图以解决这种奇怪的行为。Authenticate 应该返回经过身份验证的用户对象,所以我会做前者。

def authenticate(.....):
    try:
        return GalaxyUser.objects.get(username=username, password=password)
    except GalaxyUser.DoesNotExist:
        return None

user = authenticate(...)
user_id = user.id
于 2013-01-14T03:59:22.977 回答