在httpresponse重定向中从数据库传递数据

时间:2013-01-21 10:24:22

标签: django forms redirect

django框架的新手,我只是想创建除管理员登录之外的单独登录表单。我需要使用用户名和密码对用户进行身份验证,从数据库中获取该用户的详细信息并将该数据传递给templae(home页面)显示它。

我的代码如下: -

view.py: -

def login_user(request):
user = ''
passw = ''
username1 = ''

if request.POST:
    user = request.POST.get('username')
    passw = request.POST.get('password')
    #password1 = ''
    try:
        userdata = Employee.objects.get(username = user, password = passw)
        user_id = request.session["user_id"] = userdata.id
        employee_details = Employee.objects.get(id=user_id)
        request.session['user_id'] = employee_details.id
        return HttpResponseRedirect('/home/', kwargs={'user_id': employee_details.id}))
    except Employee.DoesNotExist:
        state = "Username or password incorrect !"
        return render_to_response('login.html',
            {'username' : username1,'state' : state},
            context_instance = RequestContext(request))
else:
    state = "Please login here:"
    return render_to_response('login.html' , {'state' : state} ,
         context_instance = RequestContext(request))

我尝试使用kwargs = {'user_id':employee_details.id},但它无法正常工作。重定向后如何将数据传递到主页?

由于

2 个答案:

答案 0 :(得分:0)

您无法使用POST请求重定向用户。请改用GET参数。

在您的情况下,请求的数据已存储在会话中。只是尝试在下次请求时阅读会话。 Django contrib.auth使用user.is_authenticated方法完成工作。

答案 1 :(得分:0)

  

我尝试使用kwargs = {'user_id':employee_details.id},但它无法正常工作。重定向后如何将数据传递到主页?

你可以:

  1. 使用session variables
  2. 使用“获取”变量(传递变量在'/home/?a=1&b=2'等网址中编码,参见urllib.urlencode
  3. 但是你应该使用standard Django user related functions and methods。请参阅“How to log a user in”。 TLDR:

    1. 检查凭据:user = authenticate(username=username, password=password)
    2. 测试用户是否不是None以及您想要的任何其他测试(他是否活跃,有特权等)
    3. 将request.user标记为已通过身份验证:login(request, user)