简体   繁体   中英

Django GET request params from POST request

I have a form that you need to fill out using a POST request, but I want to the result to be a redirection to various pages on my site. Sometimes I want the user to be redirected to a profile page, sometimes to a purchase page.

So I put the redirect URI in the GET params of the URL of the form page that POSTs: /form/?redirect_uri=/payments/

The url is correct upon landing on the forms page, with the appropriate redirect_uri. However, when I fill out the form and POST, Django doesn't seem to think there are any params in the GET request.

How can I get those params from the URL out on a POST request?

EDIT:

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)

This form page is loaded by accessing this url:

/form/?redirect_uri=/payments/

Form:

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

In the POST request - ie when you submit the form - the url will be what you specified in the 'action' attribute in the form. If the parameters you require are not there, your view will not get them.

So either update your forms's action attribute to have these parameters or alternatively you can add thin in the form itself (as hidden inputs).

In GET request you will get attributes from url that you see in the browser.

Your form has to be modified as follows:

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

Permit me to also suggest a slight optimization to your view

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)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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