2013-03-18 15 views
20

Pracuję z kolbą. Jestem w sytuacji, w której muszę przekierować żądanie postu do innego adresu URL zachowującego metodę żądania, tj. Metodę "POST". Kiedy przekierowałem żądanie "GET" do innego adresu URL, który akceptuje "Żądanie", metoda żądania jest w porządku. Oto przykładowy kod, z którym próbuję wyżej ..Utwórz żądanie POST podczas przekierowywania w kolbie

@app.route('/start',methods=['POST']) 
def start(): 
    flask.redirect(flask.url_for('operation')) 

@app.route('/operation',methods=['POST']) 
def operation(): 
    return "My Response" 

chcę zrobić „post” żądanie „/ start” URL, które wewnętrznie też broni „post” wniosek do „/ operacja” url.Jeśli zmienię kod na taki, jak ten,

@app.route('/operation',methods=['GET']) 
def operation(): 
    return "My Response" 

kod działa poprawnie w przypadku żądania "GET". Ale chcę też móc wysyłać żądania POST.

Odpowiedz

53

Funkcja redirect przewidziane w Flask wysyła kod 302 statusu do klienta domyślnie i jak wymieniono na Wikipedia:

Wiele przeglądarek internetowych realizowanego ten kod w sposób, który naruszył ten standard, zmieniającym się Żądaj nowego typu żądania do GET, niezależnie od typu zastosowanego w oryginalnym żądaniu (np. POST). [1] Z tego powodu HTTP/1.1 (RFC 2616) dodał nowe kody statusu 303 i 307, aby rozróżnić dwa zachowania, z 303 nakazując zmianę typu żądania na GET, i 307 zachowując typ żądania jako pierwotnie wysłane.

Wysyłając kod stanu 307 zamiast 302, należy poinformować przeglądarkę, aby zachowała zastosowaną metodę HTTP, a tym samym zachowywać się tak, jak się spodziewasz. Twój telefon do redirect będzie wyglądał następująco:

flask.redirect(flask.url_for('operation'), code=307) 
+1

Dzięki za dokładną sugestię! (łuk) nadal błagam o sugestię źródła, w którym mogę nauczyć się kolby w głębokim. Chcę się nauczyć takich rzeczy związanych z "kodem". Myślę, że te rzeczy są kluczowe. Jeszcze raz dziękuję :) – ln2khanal

+1

Cóż, w tym konkretnym momencie, myślę, że żaden dokument nie mógł ci pomóc, chociaż patrząc na sygnaturę funkcji "przekierowania", widząc, że wysyła ona 302 kody, mógłbyś postawić cię na drodze. W przeciwnym razie, jeśli chodzi o API 'Flask''s, nie ma nic lepszego niż oficjalna [dokumentacja] (http://flask.pocoo.org/docs/). Z drugiej strony, jeśli chcesz bardziej szczegółowych przykładów, możesz zajrzeć do [The Flask Mega-Tutorial] (http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-parti- hello-world), które pokazują, jak wykonywać wiele zadań w świecie rzeczywistym. – MatToufoutu

+0

Jeśli wysyłasz dane do swojej prośby o wpis, która również musi zostać przekierowana na tę inną stronę, pamiętaj, aby uzyskać do niej dostęp w funkcji nowego widoku, używając "request.form [" "] 'gdzie właściwość jest nazwą dane, które wysyłasz, takie jak "nazwa użytkownika". – OzzyTheGiant