如何从Django中的表单或数据库中获取用户标识?

时间:2013-01-14 03:52:33

标签: django

我在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)

1 个答案:

答案 0 :(得分:1)

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

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