2012-12-13 14 views
8

Mam bardzo prosty program python za pomocą Flask pokazanej poniżej. Obsługuje logowanie z wyskakującym okienkiem i wylogowaniem. Problem polega na tym, że adres URL w przeglądarce nie jest aktualizowany przez wywołanie przekierowania (url_for()).Url w przeglądarce nie jest aktualizowany po wywołaniu przekierowania (url_for ('xxx')) w Flasku z jQuery mobile

@app.route('/') 
def index(): 
    if not 'username' in session: 
     # contains a button showing a login popup form with action set to '/login' 
     return render_template('welcome.html') 
    else: 
     # contains a logout button with a href to '/logout' 
     return render_template('webapp.html') 


@app.route('/login', methods=['POST']) 
def login(): 
    session['username'] = request.form['username'] 
    return redirect(url_for('index')) 


@app.route('/logout') 
def logout(): 
    session.pop('username', None) 
    return redirect(url_for('index')) 

Podczas uzyskiwania dostępu do "/" wyświetlana jest strona powitalna. Po kliknięciu przycisku pojawia się okno logowania, a jego akcja formularza przekierowuje do "/ login". Działa to i wywoływana jest funkcja login(). Przekierowanie również, ale przeglądarka nie aktualizuje wyświetlanego adresu URL.

Strona internetowa jest wyświetlana z adresem URL/logon. Kiedy klikam przeładowanie, pojawia się błąd, ponieważ próbuje przeładować/zalogować, podczas gdy powinien przeładować "/" tam, gdzie został przekierowany.

To samo dzieje się z/wylogowaniem. Po wyświetleniu strony webapp i kliknięciu przycisku wylogowania, ładowana jest strona/logout, która wykonuje funkcję logout() i przekierowuje do indeksu. Ale URL pozostawia się do wylogowania.

Jeśli ponownie załaduję stronę, to się to uda, ponieważ/logout akceptuje metodę GET, a następnie adres URL jest aktualizowany do/jak powinien być na pierwszym miejscu.

Mam wrażenie, że jest to problem z urządzeniem mobilnym jQuery, ale nie można go znaleźć. Z punktu widzenia Pythona i Flask pasuje do wszystkich przykładów logowania, które mogłem znaleźć.

Odpowiedz

9

W końcu rozwiązał to po skończeniu pisania pytania.

Problem jest spowodowany przez jQuery mobile i brakujący atrybut url danych.

Po dodaniu atrybutu url danych w dziale strony adres URL w przeglądarce jest aktualizowany i wszystko działa poprawnie.

<div data-role="page" id="welcome" data-url="{{ url_for('index') }}"> 
+0

To jest ten - właśnie kopałem dookoła jakiegoś starego kodu, który próbowałem znaleźć dla ciebie ... :) No cóż! –

Powiązane problemy