Django从POST请求获取请求参数

时间:2016-06-16 03:27:15

标签: python django url request

我有一个表单需要使用POST请求填写,但我希望结果是重定向到我网站上的各个页面。有时我希望将用户重定向到个人资料页面,有时还会重定向到购买页面。

所以我将重定向URI放在POST的表单页面的URL的GET参数中: /形式/?REDIRECT_URI = /付款/

使用相应的redirect_uri登录表单页面时,网址正确无误。但是,当我填写表格和POST时,Django似乎并不认为GET请求中有任何参数。

如何在POST请求中从URL中获取这些参数?

编辑:

def form_view(request):
    if request.method == "POST":
        # Do stuff with form validation here
        redirect_uri = "/home/"
        if "redirect_uri" in request.GET:
            redirect_uri = request.GET['redirect_uri']
            if redirect_uri == request.path:
                # avoid loops
                redirect_uri = "/home/"
        return redirect(redirect_uri)

通过访问此网址加载此表单页面:

/form/?redirect_uri=/payments/

形式:

<form action="/form/" method="POST" class="wizard-form" enctype="application/x-www-form-urlencoded" autocomplete="off">
            {% csrf_token %}
            <fieldset class="form-group">
                <label for="email">Email address</label>
                <input name="email" type="text" class="form-control" id="email" placeholder="Enter email or username" required>
            </fieldset>
            <button type="submit" class="btn btn-primary">Go</button>
        </form>

2 个答案:

答案 0 :(得分:1)

在POST请求中 - 即当您提交表单时 - 该网址将是您在表单中的'action'属性中指定的内容。如果您需要的参数不存在,您的视图将无法获取它们。

因此,要么更新表单的action属性以获取这些参数,要么您可以在表单中添加thin(作为隐藏的输入)。

在GET请求中,您将从浏览器中看到的url获取属性。

答案 1 :(得分:1)

您的表单必须修改如下:

<form action="/form/?redirect_uri={{ request.GET.redirect_url}}"
    method="POST" class="wizard-form"
    enctype="application/x-www-form-urlencoded" autocomplete="off">

请允许我建议对您的观点稍作优化

def form_view(request):
    if request.method == "POST":
        # Do stuff with form validation here
        redirect_uri = request.GET.get('redirect_uri',"/home/")
        if "redirect_uri"  == request.path:
                # avoid loops
                redirect_uri = "/home/"
        return redirect(redirect_uri)