是否有必要在Django中实例化新的HttpRequest对象?

时间:2017-02-21 17:35:24

标签: django django-views

我有一个对用户进行身份验证的视图。如果用户已通过身份验证,则程序应使用请求和用户作为参数调用另一个视图。

    def home(request):
        if request.method == "POST":
            username = request.POST.get('username')
            password = request.POST.get('password')
            user = authenticate(username=username, password=password)

            if user is not None:
                return index(request, user)
            else:
                 context = {'error_message': "That username and password don't exist in our system."}
                 return render(request, 'list/home.html', context)

因此,当调用index时,请求与请求发送到主视图的实例相同,对吧?我担心的是,当它应该是GET请求时,请求仍然是POST请求。

这是一种误解吗?我应该创建一个新的请求对象并将其发送到索引吗?

感谢。

2 个答案:

答案 0 :(得分:2)

您应该使用redirect方法

if user is not None:
    return redirect(reverse('index'))

答案 1 :(得分:0)

来自优秀的"What technical details should a programmer of a web application consider before making the site public?"

  如果POST成功,

在POST后重定向,以防止刷新再次提交。

所以你是对的,你需要重定向以确保没有提交上一个表格。但除此之外,你不应该认为视图是可直接链接的,而是进入思维模式,即视图是你发出请求时得到的。正如afilardo建议的那样,你应该重定向。

return redirect('index')