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