2011-12-15 70 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