2012-12-13 23 views
8

Tôi có một chương trình python rất đơn giản bằng cách sử dụng Flask được hiển thị bên dưới. Nó xử lý một đăng nhập với một popup và đăng xuất. Vấn đề là url trong trình duyệt không được cập nhật bởi cuộc gọi chuyển hướng (url_for()).Url trong trình duyệt không được cập nhật sau khi cuộc gọi chuyển hướng (url_for ('xxx')) trong Flask với 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')) 

Khi truy cập '/' trang chào mừng được hiển thị. Khi tôi nhấp vào nút, cửa sổ bật lên đăng nhập được hiển thị và hành động biểu mẫu của nó chuyển hướng đến '/ đăng nhập'. Hàm này hoạt động và hàm login() được gọi và được thi hành. Chuyển hướng là tốt, nhưng trình duyệt không cập nhật url được hiển thị.

Vì vậy, trang webapp được hiển thị bằng url/logon. Khi tôi bấm tải lại, tôi nhận được một lỗi vì nó cố gắng tải lại/đăng nhập trong khi nó nên tải lại '/' nơi nó đã được chuyển hướng.

Điều tương tự cũng xảy ra với/đăng xuất. Khi trang webapp được hiển thị và tôi nhấp vào nút đăng xuất, trang/đăng xuất được tải thực thi hàm đăng xuất() và chuyển hướng đến chỉ mục. Nhưng url còn lại để đăng xuất.

Nếu sau đó tôi tải lại trang, nó thành công vì/đăng xuất chấp nhận phương thức GET và sau đó url được cập nhật thành/vì nó phải ở vị trí đầu tiên.

Tôi có ấn tượng đó là vấn đề di động jQuery, nhưng không thể tìm ra vấn đề. Từ quan điểm của python và Flask, nó phù hợp với tất cả các ví dụ đăng nhập mà tôi có thể tìm thấy.

Trả lời

9

Cuối cùng đã giải quyết nó sau khi hoàn thành việc viết câu hỏi.

Sự cố do jQuery di động và thuộc tính url dữ liệu bị thiếu gây ra.

Bằng cách thêm thuộc tính url dữ liệu trong trang div, url trong trình duyệt được cập nhật và mọi thứ hoạt động tốt.

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

Đó là một - chỉ đang đào xung quanh một số mã cũ mà tôi đã cố gắng tìm nó cho ya ... :) Oh well! –

Các vấn đề liên quan