[英]unable get def function working in python flask
我正在創建一個登錄系統,如果登錄的 session 為假,我想制作一個 function 將用戶重定向到登錄頁面。
from flask import Flask, render_template, redirect, url_for, request, session
import json
from db import database
def login_require():
if session.get('islogin') != True:
return redirect(url_for('login'))
app = Flask(__name__)
app.secret_key = 'secret key for session'
@app.route('/login')
def login():
if session.get('islogin') == True:
return redirect(url_for('index'))
else:
return render_template('login.html')
@app.route('/rishtedar')
def rishtedar():
login_require()
return render_template('rishtedar.html')
在上面的代碼中 function login_require() 不重定向到登錄頁面
def login_require():
if session.get('islogin') != True:
return redirect(url_for('login'))
@app.route('/rishtedar')
def rishtedar():
login_require()
return render_template('rishtedar.html')
login_require()
中的return
將值(在本例中為重定向響應)發送回您調用它的位置,但該行對返回值沒有任何作用。 相反,您的代碼會繼續調用render_template()
並返回響應。
您需要找到一種方法來使用login_require()
的返回值:
@app.route('/rishtedar')
def rishtedar():
required = login_require()
if required:
return required
return render_template('rishtedar.html')
此解決方案按原樣使用您的login_require()
function。 另一種解決方案是將 function 傳遞給login_require()
,它會在成功時返回響應:
def login_require(get_response):
if session.get('islogin'): # Never compare "== True" or "!= True"
return get_response()
return redirect(url_for('login'))
@app.route('/rishtedar')
def rishtedar():
def get_response():
return render_template('rishtedar.html')
return login_require(get_response)
這個版本非常好,因為它開始了你的裝飾器之旅。 我建議您閱讀這些內容,因為它們提供了一種優雅的語法,可以方便地修改函數的行為,而無需大量重復。 一旦你理解了這個概念,你就可以創建一個類似於你已經使用的@app.route()
裝飾器的@login_require
裝飾器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.