-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オブジェクトを返すことになっています。

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属性を検索できるように1つのオブジェクトを返すか、この奇妙な動作を説明するためにビューを変更する必要があります。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 に答える