2011-12-15 72 views
0

我已經這樣看過。有效。我是django的新手。你能幫我改進這個代碼嗎?謝謝想改善我的觀點

def getAPI(request): 
    username = request.GET.get('username') 
    password = request.GET.get('password') 
    #TODO Match user and password 
    if username: 
     user = User.objects.get(username__exact=username) 
     is_exist = user.check_password(password) 
     if is_exist == True: 
      api_key = ApiKey.objects.get(id=user.id) 
     else: 
      error_message = 'username or password is invalid.' 
    return render_to_response('details.html',locals(), 
         context_instance=RequestContext(request) 
         ) 

如果用戶名和密碼不存在,我想打印error message。否則,我想打印ApiKey。謝謝

+0

FWIW,你應該永遠* *通過GET發送密碼。你的表單上的方法應該是「post」,然後你可以通過request.POST.get('field')`來訪問這些字段,或者在像API這樣的情況下,客戶端應該是負責將請求作爲POST發送而不是GET。嘗試通過GET請求應該會導致API錯誤。 – 2011-12-15 18:07:41

回答

0

這裏是基本的模板,以驗證用戶的身份:

from django.contrib.auth import authenticate 

def my_view(request): 
    username = request.POST['username'] 
    password = request.POST['password'] 
    user = authenticate(username=username, password=password) 
    if user is not None: 
     if user.is_active: 
      # User is authenticated - return api key 
     else: 
      # Return a 'disabled account' error message 
    else: 
     # Return an 'invalid login' error message. 
1

你的意思是「打印」(在這種情況下只使用python的打印功能)或者你想在響應中返回它?如果是後者,請閱讀django模板並將變量傳遞給render_to_response。

此外,堅持一個密碼作爲GET變量是一個有點壞主意,因爲它會在URL上可見:

http://example.com/whatever?username=me&password=s3cr3t

用戶名/密碼信息一般應通過POST發送從一個表單。但是,也許你對安全性並沒有感到困擾。

+0

我想回復它。 – Kulbir 2011-12-15 15:14:51