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