我想弄清楚使用重定向時Flask請求之間傳遞數據的最佳方式。下面是我的一些代碼首先,通過請求在Flask中傳遞數據
模式
class Customer(db.Model):
__tablename__ = 'customers'
id = db.Column(db.Integer, primary_key=True)
first_name = db.Column(db.String(80))
last_name = db.Column(db.String(80))
email = db.Column(db.String(120), unique=True)
phone_number = db.Column(db.String(10), unique=True)
address = db.Column(db.Text)
last_order = db.Column(db.Text)
send_email = db.Column(db.Boolean)
def __init__(self, first_name, last_name, email, phone_number, address,
last_order, send_email):
self.first_name = first_name
self.last_name = last_name
self.email = email
self.phone_number = phone_number
self.address = address
self.last_order = last_order
self.send_email = send_email
def __repr__(self):
return '<Customer {} {}>'.format(self.first_name, self.last_name)
意見
blueprint = Blueprint('customer', __name__, url_prefix='/customer')
@blueprint.route('/', methods=('GET', 'POST'))
@login_required
def home():
"""Logged-in user homepage"""
error = None
form = CustomerSearchForm()
if form.validate_on_submit():
phone_number = form.phone_number.data
customer = Customer.query.filter_by(phone_number=phone_number).first()
if customer:
return redirect(url_for('customer.customer', customer_id=customer.id))
else:
error = 'Customer with phone number {} not found'.format(phone_number)
form.phone_number.data = ''
return render_template('customer/index.html', form=form, error=error)
@blueprint.route('/<int:customer_id>', methods=('GET', 'POST'))
@login_required
def customer(customer_id):
"""Get customer by id"""
customer = Customer.query.get(customer_id)
return render_template('customer/customer.html', customer=customer, form=form)
所以,現在寫的,當我添加一個客戶,我通過ID到視圖客戶重定向(url_for('customer.customer')),我必須再次在數據庫中搜索客戶,然後呈現我的模板。我想要幫助確定這是否是正確的/好的方法?我知道我不能使用g,因爲重定向意味着一個新的請求,因此g將不會持續。
我可以使用會議但後來我發現,我必須這樣做
session['customer'] = customer
如果客戶是客戶模型的實例,我會寫一個自定義的JsonEncoder,我將定義如何編碼客戶實例(Fixing the class to enable object storing in Flask session)。
那麼,是不是更好再次使用提供的客戶ID或商店的客戶對象會議從數據庫中獲取客戶(使用定製JsonEncoder)或有另一種更好的方法?
我怎麼會用一個JWT令牌?我想將數據從一個視圖傳遞到另一個視圖(通過重定向) – ueg1990
您可以將其添加到查詢字符串。 HTTP:// XXXX JWT = {} JWT。 – Shuo
好吧,我的意思是我仍然必須編寫一個自定義的JsonEncoder來定義如何編碼我的客戶實例? – ueg1990