اذهب إلى المحتوى

السؤال

نشر

أحاول أن أتعلم فلاسك Flask بشكل متقدم من خلال قراءة مشاريع بسيطة مفتوحة المصدر، ووجدت الكود التالي في أحد المشاريع:

from flask import Flask, url_for, request
import requests

app = Flask(__name__)

@app.route("/<name>/hello", methods=["POST"])
def hi_person(name):
    return requests.post(url_for("hello", _external=True), data={"name": name})

@app.route("/hello", methods=["POST"])
def hello():
    return 'Hi, ' + request.form["name"]

if __name__ == "__main__":
    app.run(debug=True)

ولكن عندما أحاول أن أقوم بعمل طلب إلى المسار http://localhost:5000/mohssen/hello من خلال أداة curl :

curl -X POST http://localhost:5000/mohssen/hello

يتوقف كل شيء ولا يحدث أي شيء، حتى سطر الأوامر يتوقف ولا تظهر أي نتيجة، قمت بتجربة أدوات أخرى مثل Postman وكانت نفس النتيجة (يظهر الخطأ Could not get response).

المشروع يستخدم Flask 0.12 في بيئة إفتراضية virtualenv

ما سبب هذا الخطأ وكيف أقوم بحل هذه المشكلة؟

Recommended Posts

  • 1
نشر (معدل)

المشكلة تكمن حول الرد الذي يعود بعد تنفيذ requests.post حيث تعيد post كائن من النوع ```requests.models.response``` ,بينما يجب أن يكون الرد النهائي للدالة hi person والتى نخاطبها إما str أي سلسلة نصية او json ,يمكننا اعادة أي منهما ولكن التعديل التالي يعيد string من خلال إضافة .text للرد القادم من post.

from flask import Flask, url_for, request
import requests

app = Flask(__name__)

@app.route("/<name>/hello", methods=["POST", "GET"])#يسمح لك بالتجربة من المتصفح GET هذه ليست ضرورية لكن اضافة
def hi_person(name):
    result = requests.post(url_for("hello", _external=True), data={"name": name})
    return result.text #.text يجب ان يكون الرد اما سلسة نصية أو جسون لهذا أضفنا 

@app.route("/hello", methods=["POST"])
def hello():
    return 'Hi, ' + request.form["name"]

if __name__ == "__main__":
    app.run(debug=True)

أما عن سبب إضافة GET فهو إذا أردت تجربة الطلب من خلال المتصفح , ويمكن إجراء الطلب GET و POST من خلال postman أو curl

GET

curl -X GET http://localhost:5000/ahmed/hello

POST

curl -X POST http://localhost:5000/glal/hello

 

موفق

تم التعديل في بواسطة Mohammed_Emad

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...