【问题标题】:pass data from database in httpresponse redirect在 httpresponse 重定向中从数据库传递数据
【发布时间】:2013-01-04 09:17:02
【问题描述】:

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

我的代码如下:-

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} 但它不起作用。重定向后如何将数据传递到主页?

谢谢

【问题讨论】:

    标签: django forms redirect


    【解决方案1】:

    您不能使用POST 请求重定向用户。请改用GET 参数。

    在您的情况下,请求的数据已经存储在会话中。只需尝试在下一个请求时从会话中读取。 Django contrib.auth 使用user.is_authenticated 方法来完成这项工作。

    【讨论】:

      【解决方案2】:

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

      你可以:

      1. 使用session variables
      2. 使用“get”变量(传递在 URL 中编码的变量,如 '/home/?a=1&b=2',参见 urllib.urlencode

      但是您应该使用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)

      【讨论】:

      • 实际上将这些用户存储在单独的数据库表中。不在 django 默认用户表中。我自己创建了一个表作为“portales_employee”并将员工的所有详细信息存储在该表中,即,用户名密码,地址,电话号码:等等。所以我认为在这种情况下我们不能使用身份验证功能。我们必须像我在我的代码中所做的那样手动进行身份验证,即通过比较用户名和密码。(请接受我的如果我错了,请道歉)。
      • 看,验证后我需要将员工的所有其他详细信息(例如地址、电话号码:等)传递到主页。所以就像你说的,我应该将这些详细信息与 URL 一起传递,比如/home/?address=""&phone=""..?有没有像codeigniter这样的简单方法,比如将所有员工详细信息传递给数组或其他东西?这样我就可以在主页中迭代数组?
      • 当我试图重新发明轮子并进行自己的身份验证而不是使用 Django 的内置时,我真的很后悔,但是您可以在会话中传递整个用户对象,也可以传递用户 ID(在会话中或 URL)并检索视图中的其他信息(或者更好,使用自定义中间件)。
      • 您的意思是我们可以在模板中检索用户对象吗? (home.html)。
      猜你喜欢
      • 2020-09-29
      • 1970-01-01
      • 2015-05-19
      • 1970-01-01
      • 1970-01-01
      • 2011-03-22
      • 1970-01-01
      • 2016-06-25
      • 2018-02-20
      相关资源
      最近更新 更多