0

私はこのようなログインとクエリ機能を持っています:

def login_backend(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)
        global user_id 
        user_id = request.user.id
        if user is None:
            return HttpResponseRedirect('/login_backend/')
        else:
            return HttpResponseRedirect('/overview/')
    else:
        return render_to_response('login_backend.html', context_instance=RequestContext(request))

def show_files(request):
    b = File.objects.get(id=user_id) #Get the user id from session .delete() to use delete
    return render_to_response('index.html',  {'result': b}, context_instance=RequestContext(request)

このエラーが発生します:

Exception Type: NameError at /overview/
Exception Value: global name 'user_id' is not defined

私は何が間違っているのですか?

4

1 に答える 1

1

Doingglobal user_idはグローバル変数を宣言しません。この変数がグローバルスコープ変数であることをpythonに伝えるだけです。user_idグローバル変数に保存しようとしているのは好きではありません。ビューで使用して、常に現在のユーザー ID にアクセスrequest.user.idします。

ビューのこのコードlog_backendも間違っています。

global user_id 
user_id = request.user.id # user does not exists in the request because user was trying to logged in

必要ないので削除してください。また、関数は提供されたユーザー名とパスワードが正しいことを確認するだけであるためlogin(request, user)、後で行う必要があります。authenticateauthenticate

user = authenticate(username=username1, password=password1)
login(request, user)
于 2013-01-14T06:23:24.817 に答える