คุณอาจจะกำลังประสบปัญหาในการส่งข้อมูลด้วย
redirect url_for ใน
flask python นะครับ ซึ่งคนที่ประสบปัญหานั้นก็เป็นผมเช่นเดียวกัน ซึ่งผมขอเกริ่นก่อนว่าทำไมเราต้องใช้ redirect นั้นจำเป็น และแต่กต่างจาก
render_template อย่างไร แตกต่างกันตรงที่ render_template นั้นจะเป็นการ render ตัวไฟร์ HTML เข้ามาเลยและเมื่อเราส่งข้อมูลเข้าไปด้วยแล้วข้อมูลนั้นเราจะไปรับที่ฝั่งของ html หรือ javascript ได้เลย ซึ่งจะแตกต่างกับ redirect ที่เป็นการใส่ ลิ้งค์ route เข้าไปเพื่อให้มันทำงานใหม่โดยในหน้าเว็บนั้นอาจจะไม่แตกต่างกันมากเพราะจเเปลี่ยนแปลงแค่ ลิ้งค์ แต่ทางหลังบ้านนั้นเราสามารถสั่งให้รันหน้าเว็ฐใหม่หรือเอาข้อมูลใหม่ใส่ใน route ใหม่ได้ ซึ่งบางทีเรานั้นต้องการที่จะส่งข้อมูลต่างๆไปพร้อมกับ redirect url_for แล้วเราต้องการมาใช้งานต่อเราจะต้องส่งอย่างไรและรับอย่างไรกันนะ
ซึ่งจะขอทำการสร้างตัวโครงของ flask ขึ้นมาก่อนนะครับ
โค้ด: เลือกทั้งหมด
rom flask import Flask,render_template,request,redirect,url_for
app=Flask(__name__)
app.config['SECRET_KEY']='secret_key'
app.config["SESSION_PERMANENT"] = False
app.config["SESSION_TYPE"] = "filesystem"
@app.route('/test1')
def test1():
x="helloworld"
return redirect(url_for('test2',x=x))
@app.route('/test2')
def test2():
return render_template('index.html')
if __name__==("__main__"):
app.run()
ซึ่งผมได้ทำการสร้าง route ขึ้น 2 ตัวครับเราจะได้ทำการส่งข้อมูลจาก route นึงไปยัง อีก route นึงได้ครับ ซึ่งข้อมูลที่เราจะส่งไปนั้นคือตัวแปร x ที่มีข้อมูล helloworld อยู่และทำการส่งไปที่ route ของ test2 ซึ่งในโ๕้ดนั้นจะยังไม่มีส่วนของการรับค่านะครับ และจากนั้นก็จะ render_template ไปยัง index.html ครับซึ่งเรา remder_template ไปที่ไหนไม่สำคัญครับเพราะเราจะโฟกัสไปที่การส่งข้อมูลและรับใน redirect
โค้ด: เลือกทั้งหมด
@app.route('/test2')
def test2():
x=request.args['x']
print(x)
return render_template('index.html')
ในโค้ดส่วนดังกล่าวนี้เป็นการรับค่าจาก redirect ซึ่งจะสั่งเกตุได้ว่าการรับค่านั้นจะรับคล้ายๆกับวิธีการรับค่า get ครับซึ่งโดยวิธีนี้เราจะเอาข้อมูลมาจาก route ของ test1 จากนั้นนำมาแสดง
- ผลลัพธ์ของการรับค่า redirect
- ผลลัพธ์ของการรับค่า redirect.png (469 ไบต์) Viewed 797 times
ผลลัพธ์ที่ผมแสดงให้ดูนั้นจะเป็ฯแค่ส่วนของ
print ที่แสดงออกมาทางฝั่ง
python เท่านั้นครับ ซึ่งก็จะเห็นได้ว่าเรานั้นจะส่งค่ามากจาก redirect เพื่อส่งข้อมูลจาก route สู่ route ได้ครับ
อ้างอิง
https://www.delftstack.com/howto/python-flask/flask-redirect-with-parameters/
https://stackoverflow.com/questions/26954122/how-can-i-pass-arguments-into-redirecturl-for-of-flask
https://code-maven.com/slides/python/flask-internal-redirect-parameters