繁体   English   中英

POST请求中的Django GET请求参数

[英]Django GET request params from POST request

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

因此,我将重定向URI放在POST表单页的URL的GET参数中:/ form /?redirect_uri = / payments /

使用适当的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>

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

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

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

您的表格必须进行如下修改:

<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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM