私は、リダイレクトを使用するときに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)
セッション(カスタムJsonEncoderを使用)に提供された顧客IDまたは顧客オブジェクトを使用してデータベースから顧客を再度取得する方が良いでしょうか、それとも良い方法がありますか?
どのように私は、JWTのトークンを使用します。そして、いくつかの方法がありますか?あるビューから別のビューにデータを渡したい(リダイレクト経由) – ueg1990
これをクエリ文字列に追加できます。 http:// xxxx?jwt = {jwt}。 – Shuo
OK、私はまだ私の顧客インスタンスをエンコードする方法を定義するカスタムJsonEncoderを書く必要があるということですか? – ueg1990