2015-03-08 15 views
6

Tôi muốn phát hiện nếu một phiên [ 'logged_in'] then chốt tồn tại, có nghĩa là người sử dụng tôi đã đăng nhậpLàm thế nào tôi có thể phát hiện xem một biến tồn tại trong phiên Flask?

Ví dụ:.

if (session['logged_in'] != None): 
    if session['logged_in'] == True: 
     return redirect(url_for('hello')) 

Tuy nhiên, nếu phím 'logged_in' doesnt tồn tại nó do đó tạo ra một lỗi. Là một đối tượng phiên làm việc giống như một từ điển, tôi nghĩ rằng tôi có thể sử dụng phương thức had_key(), nhưng điều này dường như không hoạt động. Có cách nào dễ dàng để phát hiện xem phiên có chứa dữ liệu mà không tạo ra lỗi không?

+0

Có nhiều cách tốt hơn để kiểm tra xem người dùng có đăng nhập ... Đó có phải là trường hợp sử dụng thực tế của bạn không? – rnevius

Trả lời

3

Bạn có thể sử dụng một cái gì đó như thế này để kiểm tra xem một chìa khóa tồn tại trong phiên dict:

if session.get('logged_in'): 
    if session['logged_in'] == True: 
     return redirect(url_for('hello')) 
1

Như @rnevius mentioned, nếu vấn đề cơ bản bạn đang cố gắng để giải quyết được thử nghiệm để xem nếu người dùng hiện đang đăng nhập sau đó bạn có thể sử dụng một số số built-in Flask functionality tốt hơn.

Nếu bạn đang cố gắng để tìm hiểu xem một phím nào đó (logged_in) tồn tại trong các đối tượng session, bạn có thể điều trị các đối tượng session như thể nó là một cuốn từ điển và chỉ cần sử dụng cú pháp sau:

if session.get('logged_in') is not None: 
    # Here we know that a logged_in key is present in the session object. 
    # Now we can safely check it's value 
    if session['logged_in'] == True: 
     return redirect(url_for('hello')) 
+0

Vì vậy, phương thức get() không tạo ra lỗi, xuất sắc, cảm ơn nhiều :) –

+0

@brad Bạn đúng. Tuy nhiên nó không thực sự là nó không tạo ra lỗi - nếu khóa không tồn tại, 'get' sẽ trả về một giá trị mặc định:' None' – Lix

5

Nói chung, việc truy cập các mục phiên cũng đơn giản như sử dụng từ điển.

Bạn có thể sử dụng has_key() (không có phương pháp had_key()), nhưng tốt hơn nên sử dụng in hoặc get(). Một ví dụ ứng dụng bình rằng truy cập các phiên:

from flask import Flask, session, request, redirect, url_for 

app = Flask(__name__) 

@app.route('/') 
def index(): 
    if session.get('logged_in') == True: 
     return 'You are logged in' 
    return 'You are not logged in' 

@app.route('/login') 
def login(): 
    session['logged_in'] = True 
    return redirect(url_for('index')) 

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

if __name__ == '__main__': 
    app.secret_key = 'ssssshhhhh' 
    app.run() 
1
if session.get('logged_in') is not None: 
    # do something for logged in user 
    return render_template('success.html') 
else: 
    # do something for non-logged in user 
    return render_template('index.html') 

Cho rằng một thử, cần làm việc.

Xin lỗi vì câu trả lời muộn màng, nhưng đã phải vật lộn với chính những điều tương tự và đây là công thức cơ bản.

Trong trường hợp của tôi, tôi có một bảng users trong cơ sở dữ liệu mysql, khi người dùng đăng nhập hoặc tạo tài khoản, biến số session được tạo và đặt thành người dùng đó id.

Nếu người dùng này hiện điều hướng đến gốc ('/'), biến số session được phát hiện và success.html được phân phối.

Nếu không tìm thấy giá trị nào cho session['logged_in'], hơn index.html được phục vụ, nơi họ có thể tạo tài khoản hoặc đăng nhập.

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