【发布时间】:2017-03-11 09:12:35
【问题描述】:
我试图找出使用重定向时在 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)
所以,现在写,当我添加一个客户并使用redirect(url_for('customer.customer')) 将id 传递给视图客户时,我必须在数据库中再次搜索客户,然后呈现我的模板。我需要帮助确定这是否是正确/好的方法?我知道我不能使用 g 因为重定向意味着一个新请求,因此 g 不会持续存在。
我可以使用 session 但后来我发现我必须做类似的事情
session['customer'] = customer
如果客户是客户模型的一个实例,我将编写一个自定义 JsonEncoder,我将在其中定义如何编码客户实例 (Fixing the class to enable object storing in Flask session)。
那么,使用提供的客户 ID 或将客户对象存储在 session 中(使用自定义 JsonEncoder)再次从数据库中检索客户更好还是有其他更好的方法?
【问题讨论】: