Flask অ্যাপ্লিকেশনে Request এবং Response দুটি গুরুত্বপূর্ণ বিষয়। Request ব্যবহৃত হয় ব্যবহারকারীর কাছ থেকে প্রাপ্ত তথ্য (যেমন URL প্যারামিটার, ফর্ম ডেটা, বা হেডার), এবং Response ব্যবহৃত হয় সেই তথ্যের ভিত্তিতে রিটার্ন করা সাড়া (response)। Flask এ Request এবং Response এর ব্যবস্থাপনা অত্যন্ত সহজ এবং নমনীয়।
১. Flask Request Management
Flask-এ request অবজেক্ট ব্যবহার করে HTTP রিকোয়েস্টের তথ্য অ্যাক্সেস করা যায়। এটি ব্যবহারকারীর পক্ষে পাঠানো বিভিন্ন ধরনের ডেটা যেমন URL প্যারামিটার, ফর্ম ডেটা, JSON, হেডার ইত্যাদি ধারণ করে।
Request এর সাধারণ উপাদানসমূহ:
URL প্যারামিটার (Query Parameters)
আপনি URL থেকে কিভাবে প্যারামিটার গ্রহণ করবেন তা দেখানো হয়েছে।উদাহরণ:
@app.route("/user/<username>") def user_profile(username): return f"ব্যবহারকারী নাম: {username}"এখানে, URL
http://127.0.0.1:5000/user/johnএ গেলেusernameএর মানjohnহবে।ফর্ম ডেটা (Form Data)
ফর্মের মাধ্যমে পাঠানো ডেটাrequest.formথেকে নেওয়া হয়। এটি POST রিকোয়েস্টের মাধ্যমে প্রেরিত হয়।উদাহরণ:
from flask import request, render_template @app.route("/login", methods=["GET", "POST"]) def login(): if request.method == "POST": username = request.form["username"] password = request.form["password"] return f"আপনি লগইন করেছেন: {username}" return render_template("login.html")Query Parameters
URL প্যারামিটার থেকে তথ্য পাওয়ার জন্যrequest.argsব্যবহার করা হয়।উদাহরণ:
@app.route("/search") def search(): query = request.args.get("query") # URL এ ?query=term এর মাধ্যমে প্রাপ্ত return f"আপনার অনুসন্ধান শব্দ: {query}"JSON ডেটা
JSON ডেটা POST রিকোয়েস্টের মাধ্যমে পাঠালেrequest.jsonব্যবহার করা হয়।উদাহরণ:
from flask import request @app.route("/api", methods=["POST"]) def api(): data = request.json return f"আপনার পাঠানো JSON ডেটা: {data}"Request Headers
HTTP হেডারের মান অ্যাক্সেস করতেrequest.headersব্যবহার করা হয়।উদাহরণ:
@app.route("/headers") def headers(): user_agent = request.headers.get('User-Agent') return f"আপনার ব্রাউজার: {user_agent}"
২. Flask Response Management
Flask-এ Response অবজেক্টের মাধ্যমে রেসপন্স পরিচালনা করা হয়। রেসপন্সের মধ্যে স্ট্যাটাস কোড, হেডার, কন্টেন্ট (যেমন HTML, JSON, বা প্লেইন টেক্সট) থাকতে পারে।
Response এর উপাদানসমূহ:
প্লেইন টেক্সট রেসপন্স
সাধারণ টেক্সট রেসপন্স দেওয়ার জন্যreturnব্যবহার করা হয়।উদাহরণ:
@app.route("/hello") def hello(): return "স্বাগতম Flask অ্যাপে!"JSON রেসপন্স
JSON রেসপন্স পাঠানোর জন্য Flask-এjsonify()ব্যবহার করা হয়।উদাহরণ:
from flask import jsonify @app.route("/json") def json_example(): return jsonify({"message": "এটি একটি JSON রেসপন্স"})HTML টেমপ্লেট রেন্ডার
Flask-এ HTML টেমপ্লেট রেন্ডার করতেrender_template()ব্যবহার করা হয়।উদাহরণ:
from flask import render_template @app.route("/welcome") def welcome(): return render_template("welcome.html", name="John")এখানে
welcome.htmlফাইলটিtemplatesফোল্ডারে থাকতে হবে।Custom Response Object
Flask-এ আপনি কাস্টম রেসপন্স অবজেক্টও তৈরি করতে পারেন, যাতে স্ট্যাটাস কোড এবং হেডার সেট করা থাকে।উদাহরণ:
from flask import Response @app.route("/custom-response") def custom_response(): response = Response("এটি একটি কাস্টম রেসপন্স") response.status_code = 200 response.headers["X-Custom-Header"] = "Custom Header Value" return response
৩. HTTP Status Codes
Flask-এ আপনি রেসপন্সের সাথে HTTP স্ট্যাটাস কোড যোগ করতে পারেন। স্ট্যাটাস কোড HTTP প্রোটোকলের একটি গুরুত্বপূর্ণ অংশ, যা সার্ভারের সাড়া সম্পর্কে বিস্তারিত তথ্য প্রদান করে।
উদাহরণ:
from flask import jsonify
@app.route("/success")
def success():
return jsonify({"message": "Success!"}), 200
@app.route("/not-found")
def not_found():
return jsonify({"error": "Page not found"}), 404
এখানে:
- 200: সফল রিকোয়েস্টের জন্য HTTP স্ট্যাটাস কোড।
- 404: পেজ না পাওয়ার (Not Found) জন্য HTTP স্ট্যাটাস কোড।
৪. Redirect এবং URL Flask
Flask-এ রিকোয়েস্ট থেকে রেসপন্সের মাধ্যমে ইউজারকে অন্য URL-এ রিডাইরেক্ট করার জন্য redirect() এবং url_for() ব্যবহার করা হয়।
উদাহরণ:
from flask import redirect, url_for
@app.route("/redirect_home")
def redirect_home():
return redirect(url_for("home"))
এখানে:
redirect(): এটি ব্যবহারকারীকে অন্য URL-এ রিডাইরেক্ট করে।url_for(): এটি Flask রাউটের URL ডাইনামিকভাবে তৈরি করে।
৫. Flask Response Cookies
Flask-এ কুকি সেট করতে এবং গ্রহণ করতে response.set_cookie() এবং request.cookies.get() ব্যবহার করা হয়।
কুকি সেট করা:
@app.route("/set_cookie")
def set_cookie():
resp = make_response("কুকি সেট করা হয়েছে!")
resp.set_cookie('username', 'John')
return resp
কুকি গ্রহণ করা:
@app.route("/get_cookie")
def get_cookie():
username = request.cookies.get('username')
return f"কুকি থেকে প্রাপ্ত ব্যবহারকারীর নাম: {username}"
Flask-এ Request এবং Response ব্যবস্থাপনা খুবই শক্তিশালী এবং নমনীয়। Request অবজেক্টের মাধ্যমে আপনি বিভিন্ন ধরনের ইনপুট ডেটা যেমন URL প্যারামিটার, ফর্ম ডেটা, JSON ইত্যাদি অ্যাক্সেস করতে পারেন, এবং Response অবজেক্টের মাধ্যমে আপনি কাস্টম রেসপন্স, JSON, HTML, কুকি, বা HTTP স্ট্যাটাস কোড সহ সাড়া প্রদান করতে পারেন। Flask-এ এই ফিচারগুলি ব্যবহার করে আপনি একটি শক্তিশালী, ডাইনামিক এবং কার্যকরী ওয়েব অ্যাপ্লিকেশন তৈরি করতে পারবেন।
Flask অ্যাপ্লিকেশনে Request এবং Response অবজেক্ট দুটি গুরুত্বপূর্ণ ভূমিকা পালন করে। এগুলি HTTP রিকোয়েস্ট এবং রেসপন্সের সাথে সম্পর্কিত তথ্য ধারণ করে এবং ব্যবস্থাপনা করতে সহায়ক হয়।
১. Request Object
Flask-এ Request Object HTTP রিকোয়েস্টের সব তথ্য ধারণ করে, যেমন রিকোয়েস্টের পদ্ধতি (GET, POST), কন্টেন্ট টাইপ, ফর্ম ডেটা, ইউআরএল প্যারামিটার ইত্যাদি। Flask অ্যাপ্লিকেশনে ইউজার যখন একটি রিকোয়েস্ট পাঠায়, তখন request অবজেক্টটি সেই রিকোয়েস্ট সম্পর্কিত সমস্ত তথ্য সংগ্রহ করে।
Request Object থেকে বিভিন্ন তথ্য আহরণ
from flask import Flask, request
app = Flask(__name__)
@app.route("/", methods=["GET", "POST"])
def home():
if request.method == "POST":
# POST রিকোয়েস্টে পাঠানো ডেটা
name = request.form.get("name")
return f"আপনি {name} পাঠিয়েছেন!"
return '''
<form method="POST">
নাম: <input type="text" name="name">
<input type="submit" value="সাবমিট">
</form>
'''
if __name__ == "__main__":
app.run(debug=True)
এখানে:
request.method: এটি রিকোয়েস্টের HTTP পদ্ধতি (GET বা POST) চেক করতে ব্যবহৃত হয়।request.form: এটি ফর্ম ডেটা সংগ্রহ করতে ব্যবহৃত হয়। POST রিকোয়েস্টে ফর্ম ডেটাrequest.formএর মাধ্যমে অ্যাক্সেস করা যায়।request.args: এটি URL প্যারামিটার বা কোয়েরি স্ট্রিং থেকে ডেটা আহরণ করতে ব্যবহৃত হয়।
Request Object থেকে কিছু গুরুত্বপূর্ণ তথ্য:
request.method: রিকোয়েস্টের HTTP মেথড (GET, POST, PUT, DELETE)।request.args: URL প্যারামিটার (যেমন:/user?name=Johnএর জন্যrequest.args['name']হবে'John')।request.form: POST ফর্ম ডেটা (যেমন: HTML ফর্ম থেকে পাঠানো ডেটা)।request.json: JSON পে-লোড (যদি রিকোয়েস্টে JSON থাকে)।request.headers: HTTP হেডার ইনফরমেশন (যেমন:Content-Type,User-Agent)।request.cookies: রিকোয়েস্টের কুকি তথ্য।
উদাহরণ:
@app.route("/profile")
def profile():
username = request.args.get("username", "Guest") # URL থেকে 'username' প্যারামিটার পাওয়া
return f"স্বাগতম {username}!"
যদি ইউআরএল হয় http://127.0.0.1:5000/profile?username=John, তবে আউটপুট হবে "স্বাগতম John!"।
২. Response Object
Flask-এ Response Object HTTP রেসপন্সের তথ্য ধারণ করে, যেমন কন্টেন্ট (HTML, JSON ইত্যাদি), স্ট্যাটাস কোড, এবং হেডার। Flask অ্যাপ্লিকেশন HTTP রেসপন্স তৈরি করার জন্য response অবজেক্ট ব্যবহার করে।
Response Object তৈরি করা
from flask import Flask, Response
app = Flask(__name__)
@app.route("/text")
def text_response():
return Response("এটি একটি কাস্টম টেক্সট রেসপন্স।", status=200, mimetype="text/plain")
if __name__ == "__main__":
app.run(debug=True)
এখানে:
Responseক্লাসের মাধ্যমে একটি কাস্টম রেসপন্স তৈরি করা হয়েছে, যেখানে রেসপন্সের কনটেন্ট, স্ট্যাটাস কোড, এবং MIME টাইপ নির্ধারণ করা হয়েছে।
Response Object এর সাথে কাজ করা
Response(status=200, mimetype='text/html'): রেসপন্সের স্ট্যাটাস কোড এবং MIME টাইপ সেট করা।response.data: রেসপন্সের কনটেন্টের মূল ডেটা (অর্থাৎ রেসপন্সের পে-লোড)।response.headers: রেসপন্সের হেডার।
উদাহরণ:
@app.route("/json")
def json_response():
response_data = {"message": "এটি একটি JSON রেসপন্স"}
return Response(
response=json.dumps(response_data), # JSON ডেটা
status=200, # স্ট্যাটাস কোড
mimetype="application/json" # MIME টাইপ
)
এখানে, Flask JSON ডেটা রিটার্ন করছে application/json MIME টাইপসহ।
৩. Flask Default Response
Flask-এ আপনি সাধারণভাবে return স্টেটমেন্টের মাধ্যমে রেসপন্স প্রদান করতে পারেন। Flask আপনার রিটার্ন করা ডেটা থেকে একটি Response Object তৈরি করে। উদাহরণস্বরূপ:
@app.route("/welcome")
def welcome():
return "স্বাগতম আমাদের Flask অ্যাপে!"
এটি স্বয়ংক্রিয়ভাবে একটি 200 OK স্ট্যাটাস কোড সহ একটি text/html MIME টাইপের রেসপন্স তৈরি করবে।
৪. Redirect এবং URL Building with Response
Flask-এ আপনি রিডাইরেকশনও করতে পারেন। redirect() ফাংশন এবং url_for() ফাংশন ব্যবহার করে আপনি রিডাইরেক্ট করতে পারেন।
উদাহরণ:
from flask import redirect, url_for
@app.route("/login")
def login():
return redirect(url_for('home')) # রিডাইরেক্ট হোম পেজে
@app.route("/")
def home():
return "স্বাগতম হোমপেজে!"
এখানে:
redirect(): একটি নতুন URL এ রিডাইরেক্ট করে।url_for('home'):homeরাউটের জন্য সঠিক URL তৈরি করে।
৫. Custom Headers এবং Cookies
Flask Response Object এ কাস্টম হেডার এবং কুকি যোগ করতে পারেন।
কাস্টম হেডার:
@app.route("/custom-header")
def custom_header():
response = Response("এটি কাস্টম হেডার সহ রেসপন্স।")
response.headers["X-Custom-Header"] = "কাস্টম মান"
return response
কুকি সেট করা:
@app.route("/set-cookie")
def set_cookie():
response = Response("কুকি সেট করা হয়েছে!")
response.set_cookie("username", "john_doe")
return response
কুকি গ্রহণ করা:
@app.route("/get-cookie")
def get_cookie():
username = request.cookies.get("username")
return f"আপনার কুকি হলো: {username}"
Flask-এ Request এবং Response অবজেক্ট ব্যবহার করা খুবই গুরুত্বপূর্ণ, কারণ এগুলি HTTP রিকোয়েস্ট এবং রেসপন্স সম্পর্কিত সমস্ত তথ্য ধারণ করে এবং অ্যাপ্লিকেশনটির কার্যকারিতা নিয়ন্ত্রণ করে। Flask এর Request Object রিকোয়েস্টের সমস্ত তথ্য সরবরাহ করে, আর Response Object ব্যবহার করে আপনি কাস্টম রেসপন্স তৈরি এবং রিটার্ন করতে পারেন।
Flask-এ HTTP Methods ব্যবহৃত হয় ক্লায়েন্ট (ব্রাউজার বা অন্য অ্যাপ্লিকেশন) থেকে সার্ভারে রিকোয়েস্ট পাঠানোর জন্য। Flask অ্যাপ্লিকেশনে সাধারণত GET, POST, PUT, এবং DELETE মেথডগুলো ব্যবহৃত হয়। এই মেথডগুলো সাধারণভাবে RESTful API এবং ওয়েব ফর্মের মাধ্যমে ডেটা প্রক্রিয়াকরণের জন্য ব্যবহৃত হয়।
১. GET Method
GET মেথড সাধারণত তথ্য রিকোয়েস্ট করতে ব্যবহৃত হয়। এটি শুধুমাত্র ডেটা পড়ে (read) এবং সার্ভারে কোন পরিবর্তন ঘটায় না। GET রিকোয়েস্ট সাধারণত URL থেকে পাঠানো হয় এবং এটি URL-এ ডেটা পাস করতে পারে (query string এর মাধ্যমে)।
উদাহরণ:
@app.route("/user/<username>", methods=["GET"])
def get_user_profile(username):
return f"স্বাগতম {username}!"
এখানে:
- GET মেথড ব্যবহৃত হয়েছে, এবং
usernameপ্যারামিটার URL থেকে প্রাপ্ত হচ্ছে।
GET মেথড সাধারণত ব্যবহারকারীর প্রোফাইল বা অন্যান্য ডেটা দেখানোর জন্য ব্যবহৃত হয়।
GET Request Example:
URL: http://127.0.0.1:5000/user/john
এটি রেসপন্সে "স্বাগতম john!" দেখাবে।
২. POST Method
POST মেথড সাধারণত ডেটা সার্ভারে পাঠানোর জন্য ব্যবহৃত হয়। এটি ফর্ম ডেটা, JSON বা অন্য কোনও ধরনের ডেটা পাঠাতে ব্যবহৃত হয়। POST মেথড সার্ভারে ডেটা পরিবর্তন করতে পারে এবং এটি GET এর তুলনায় নিরাপদ বলে মনে করা হয় কারণ ডেটা URL-এ না গিয়ে বডিতে পাঠানো হয়।
উদাহরণ:
from flask import request
@app.route("/login", methods=["POST"])
def login():
username = request.form["username"]
password = request.form["password"]
return f"লগইন সফল, {username}!"
এখানে:
- POST মেথড ব্যবহার করা হয়েছে।
request.formথেকে ফর্ম ডেটা গ্রহণ করা হচ্ছে।
POST মেথড সাধারণত লগইন ফর্ম, রেজিস্ট্রেশন ফর্ম বা JSON ডেটা পাঠানোর জন্য ব্যবহৃত হয়।
POST Request Example:
ফর্মে username এবং password পাঠাতে হলে:
<form method="POST" action="/login">
<input type="text" name="username">
<input type="password" name="password">
<button type="submit">Login</button>
</form>
এটি সার্ভারে POST রিকোয়েস্ট পাঠাবে।
৩. PUT Method
PUT মেথড ব্যবহৃত হয় কোনো সম্পদ বা ডেটা সম্পূর্ণরূপে আপডেট করতে। সাধারণত PUT মেথড দিয়ে কোনো নির্দিষ্ট রিসোর্সের তথ্য সম্পূর্ণভাবে পরিবর্তন করা হয়।
উদাহরণ:
@app.route("/update_profile/<int:id>", methods=["PUT"])
def update_profile(id):
# ডেটা প্রক্রিয়া করুন
return f"প্রোফাইল {id} সফলভাবে আপডেট হয়েছে।"
এখানে:
- PUT মেথড ব্যবহার করা হয়েছে, এবং id প্যারামিটার URL থেকে নেওয়া হয়েছে।
- এই রাউটে PUT রিকোয়েস্ট ব্যবহার করে একটি প্রোফাইল আপডেট করা হচ্ছে।
PUT Request Example:
PUT রিকোয়েস্ট সাধারণত API এর মাধ্যমে পাঠানো হয় যেখানে ক্লায়েন্টে একটি JSON ডেটা পাঠানো হয়।
curl -X PUT -H "Content-Type: application/json" -d '{"name": "new_name"}' http://127.0.0.1:5000/update_profile/1
এটি id=1 প্রোফাইলের নাম পরিবর্তন করবে।
৪. DELETE Method
DELETE মেথড ব্যবহৃত হয় কোনো সম্পদ বা ডেটা মুছে ফেলার জন্য। এটি সাধারণত সম্পূর্ণ ডেটা বা একটি নির্দিষ্ট রিসোর্স মুছে ফেলতে ব্যবহৃত হয়।
উদাহরণ:
@app.route("/delete_user/<int:id>", methods=["DELETE"])
def delete_user(id):
# ডেটা মুছে ফেলার কোড
return f"ব্যবহারকারী {id} সফলভাবে মুছে ফেলা হয়েছে।"
এখানে:
- DELETE মেথড ব্যবহার করা হয়েছে, এবং id প্যারামিটার URL থেকে নেওয়া হয়েছে।
- এই রাউটে DELETE রিকোয়েস্ট ব্যবহার করে একটি ব্যবহারকারী মুছে ফেলা হচ্ছে।
DELETE Request Example:
DELETE রিকোয়েস্ট পাঠাতে:
curl -X DELETE http://127.0.0.1:5000/delete_user/1
এটি id=1 ব্যবহারকারীকে মুছে ফেলবে।
৫. Flask HTTP Methods Summary
| HTTP Method | ব্যবহার | পৃথক বৈশিষ্ট্য |
|---|---|---|
| GET | তথ্য পাওয়ার জন্য (retrieve) | ডেটা পড়া, কোনো পরিবর্তন না করা |
| POST | নতুন তথ্য তৈরি করা (submit data) | নতুন ডেটা সার্ভারে পাঠানো, ফর্ম ডেটা বা JSON |
| PUT | ডেটা সম্পূর্ণভাবে আপডেট করা | একটি সম্পূর্ণ রিসোর্স বা ডেটা সম্পূর্ণভাবে আপডেট করা |
| DELETE | ডেটা মুছে ফেলা | একটি রিসোর্স বা ডেটা মুছে ফেলা |
৬. Flask-এ HTTP Methods পরিচালনা
Flask-এ একাধিক HTTP মেথড পরিচালনা করতে methods প্যারামিটার ব্যবহার করা হয়। আপনি চাইলে একাধিক মেথড একসাথে ব্যবহার করতে পারেন।
উদাহরণ:
@app.route("/update", methods=["GET", "POST"])
def update():
if request.method == "GET":
return "GET রিকোয়েস্ট"
if request.method == "POST":
return "POST রিকোয়েস্ট"
এখানে:
methods=["GET", "POST"]দ্বারা GET এবং POST উভয় রিকোয়েস্ট পরিচালনা করা হয়েছে।
Flask-এ HTTP Methods ব্যবহারের মাধ্যমে আপনি অ্যাপ্লিকেশনের কার্যকারিতা এবং ডেটা পরিচালনা সহজে করতে পারেন। GET, POST, PUT, এবং DELETE মেথডগুলি RESTful API এবং ওয়েব ফর্মে ডেটা সংগ্রহ এবং প্রক্রিয়াকরণের জন্য প্রধান ভূমিকা পালন করে। Flask এর সিম্পল রাউটিং সিস্টেমের মাধ্যমে এই HTTP মেথডগুলো কার্যকরভাবে ব্যবহার করা সম্ভব।
Flask-এ Query Parameters এবং Form Data হ্যান্ডলিং একটি গুরুত্বপূর্ণ বিষয়, যার মাধ্যমে আপনি HTTP রিকোয়েস্ট থেকে ডেটা গ্রহণ ও প্রক্রিয়া করতে পারেন। Flask-এ এই ডেটা সহজেই এক্সেস করা সম্ভব এবং এটি ডাইনামিক ওয়েব অ্যাপ্লিকেশন তৈরি করতে সাহায্য করে।
১. Query Parameters হ্যান্ডলিং
Query Parameters হলো URL এর অংশ, যা ? দিয়ে শুরু হয় এবং একটি বা একাধিক কিপার-ভ্যালু পেয়ার (key-value pair) হিসেবে থাকে। উদাহরণস্বরূপ: http://example.com/search?query=flask&sort=desc
Query Parameters এক্সেস করার জন্য Flask-এ request.args ব্যবহার করা হয়।
উদাহরণ:
from flask import Flask, request
app = Flask(__name__)
@app.route("/search")
def search():
query = request.args.get('query') # 'query' প্যারামিটার থেকে মান নেয়
sort = request.args.get('sort', 'asc') # 'sort' প্যারামিটার থেকে মান নেয়, ডিফল্ট 'asc'
return f"আপনি সার্চ করেছেন: {query}, সোর্ট অর্ডার: {sort}"
if __name__ == "__main__":
app.run(debug=True)
এখানে:
request.args.get('query'): এটি URL-এরqueryপ্যারামিটার থেকে মান নিয়ে আসে।request.args.get('sort', 'asc'): এটিsortপ্যারামিটার থেকে মান নেয়, এবং যদি সেটি না থাকে তবে ডিফল্ট মান'asc'প্রদান করে।
URL উদাহরণ:
http://127.0.0.1:5000/search?query=flask&sort=desc- আউটপুট: "আপনি সার্চ করেছেন: flask, সোর্ট অর্ডার: desc"
http://127.0.0.1:5000/search?query=python- আউটপুট: "আপনি সার্চ করেছেন: python, সোর্ট অর্ডার: asc"
২. Form Data হ্যান্ডলিং
Form Data হলো সেই ডেটা যা HTML ফর্মের মাধ্যমে সাবমিট করা হয়। Flask-এ Form Data এক্সেস করার জন্য request.form ব্যবহার করা হয়। এটি সাধারণত POST অথবা PUT HTTP মেথডের মাধ্যমে প্রেরিত হয়।
উদাহরণ:
from flask import Flask, request, render_template_string
app = Flask(__name__)
@app.route("/submit", methods=["GET", "POST"])
def submit_form():
if request.method == "POST":
username = request.form["username"] # ফর্ম থেকে 'username' প্যারামিটার এক্সেস
password = request.form["password"] # ফর্ম থেকে 'password' প্যারামিটার এক্সেস
return f"আপনার নাম: {username}, পাসওয়ার্ড: {password}"
return '''
<form method="post">
নাম: <input type="text" name="username"><br>
পাসওয়ার্ড: <input type="password" name="password"><br>
<input type="submit" value="সাবমিট">
</form>
'''
if __name__ == "__main__":
app.run(debug=True)
এখানে:
request.form["username"]: এটি HTML ফর্ম থেকেusernameফিল্ডের মান নিয়ে আসে।request.form["password"]: এটি HTML ফর্ম থেকেpasswordফিল্ডের মান নিয়ে আসে।
ব্রাউজার রিকোয়েস্ট:
- প্রথমে
/submitপেজে যান, যেখানে একটি ফর্ম থাকবে। - ফর্মে কিছু ডেটা পূরণ করুন এবং সাবমিট করুন।
- তারপর, আপনি "আপনার নাম: [username], পাসওয়ার্ড: [password]" আউটপুট দেখতে পাবেন, যেখানে [username] এবং [password] ফর্মে প্রদান করা মান।
৩. Query Parameters এবং Form Data একসাথে ব্যবহার
আপনি একই রাউটে Query Parameters এবং Form Data একসাথে ব্যবহার করতে পারেন। Flask দুটি ভিন্ন ধরনের রিকোয়েস্ট থেকে ডেটা সংগ্রহ করার জন্য প্রস্তুত।
উদাহরণ:
from flask import Flask, request
app = Flask(__name__)
@app.route("/profile", methods=["GET", "POST"])
def profile():
if request.method == "POST":
name = request.form["name"]
age = request.form["age"]
return f"আপনার নাম: {name}, বয়স: {age}"
user_id = request.args.get("user_id", "অজানা") # Query প্যারামিটার থেকে user_id
return f"আপনার ইউজার আইডি: {user_id}"
if __name__ == "__main__":
app.run(debug=True)
এখানে:
request.args.get("user_id"): Query প্যারামিটার থেকেuser_idএক্সেস করা হচ্ছে।request.form["name"]: POST রিকোয়েস্ট থেকে Form Data এক্সেস করা হচ্ছে।
উদাহরণ URL:
http://127.0.0.1:5000/profile?user_id=1234- আউটপুট: "আপনার ইউজার আইডি: 1234"
ফর্ম সাবমিট:
- ফর্ম সাবমিট করলে:
- আউটপুট: "আপনার নাম: [name], বয়স: [age]"
৪. File Upload Handling
Flask-এ ফাইল আপলোডের জন্য request.files ব্যবহার করা হয়। আপনি একটি ফর্ম ব্যবহার করে ফাইল আপলোড করতে পারেন এবং সেই ফাইলটি Flask-এ প্রক্রিয়া করতে পারেন।
উদাহরণ:
from flask import Flask, request
app = Flask(__name__)
@app.route("/upload", methods=["GET", "POST"])
def upload_file():
if request.method == "POST":
file = request.files["file"] # ফাইল ফর্ম থেকে 'file' প্যারামিটার এক্সেস
file.save(f"./uploads/{file.filename}") # ফাইল সেভ করা
return f"ফাইল {file.filename} সেভ করা হয়েছে"
return '''
<form method="post" enctype="multipart/form-data">
ফাইল নির্বাচন করুন: <input type="file" name="file"><br>
<input type="submit" value="আপলোড">
</form>
'''
if __name__ == "__main__":
app.run(debug=True)
এখানে:
request.files["file"]: ফর্ম থেকে আপলোড করা ফাইল এক্সেস করা হয়।file.save(): ফাইল সিস্টেমে সেভ করা হয়।
Flask-এ Query Parameters এবং Form Data হ্যান্ডলিং অত্যন্ত সহজ এবং সরল। Query Parameters URL এর অংশ হিসেবে প্যারামিটার গ্রহণ করে, আর Form Data সাধারণত ফর্ম সাবমিট করার সময় ব্যবহৃত হয়। Flask-এ এই ডেটা এক্সেস করা এবং প্রক্রিয়া করা সহজ, এবং এটি ডাইনামিক ওয়েব অ্যাপ্লিকেশন তৈরিতে সাহায্য করে। File Upload Handling এবং GET/POST রিকোয়েস্টের মাধ্যমে ডেটা সংগ্রহের জন্য Flask শক্তিশালী ফিচার সরবরাহ করে।
Flask অ্যাপ্লিকেশনে JSON রেসপন্স তৈরি করা খুবই সহজ। Flask jsonify() ফাংশন ব্যবহার করে JSON ডেটা রিটার্ন করতে পারে, যা অ্যাপ্লিকেশনে API তৈরি করার সময় প্রয়োজনীয় হয়ে ওঠে। JSON (JavaScript Object Notation) একটি সাধারণ ডেটা বিন্যাস যা সিস্টেমের মধ্যে ডেটা বিনিময়ের জন্য ব্যবহার করা হয়, বিশেষ করে ওয়েব অ্যাপ্লিকেশন এবং মোবাইল অ্যাপ্লিকেশনগুলোর মধ্যে।
Flask-এ JSON Response তৈরি করার পদ্ধতি
১. jsonify() ফাংশন ব্যবহার
Flask-এ jsonify() ফাংশন ব্যবহার করে আপনি JSON রেসপন্স তৈরি করতে পারেন। এটি একটি ডিকশনারি বা লিস্টের ডেটা নিয়ে JSON ফরম্যাটে রেসপন্স ফেরত দেয়।
উদাহরণ:
from flask import Flask, jsonify
app = Flask(__name__)
@app.route("/api/data")
def get_data():
data = {
"name": "John",
"age": 30,
"city": "New York"
}
return jsonify(data)
if __name__ == "__main__":
app.run(debug=True)
এখানে:
jsonify(data): এটিdataডিকশনারিকে JSON ফরম্যাটে কনভার্ট করে এবং রেসপন্স হিসেবে পাঠায়।- ব্রাউজারে
http://127.0.0.1:5000/api/dataURL খুললে আপনি এই JSON রেসপন্স দেখতে পাবেন।
আউটপুট:
{
"name": "John",
"age": 30,
"city": "New York"
}
২. HTTP Status Code সহ JSON Response
Flask-এ JSON রেসপন্সের সাথে HTTP স্ট্যাটাস কোড অন্তর্ভুক্ত করা যায়, যা API রেসপন্সের সঠিক অবস্থা জানান দেয়।
উদাহরণ:
from flask import Flask, jsonify
app = Flask(__name__)
@app.route("/api/success")
def success():
data = {
"message": "Success!"
}
return jsonify(data), 200 # 200 HTTP status code
@app.route("/api/error")
def error():
error_data = {
"error": "Something went wrong!"
}
return jsonify(error_data), 400 # 400 HTTP status code
if __name__ == "__main__":
app.run(debug=True)
এখানে:
200: সফল রেসপন্সের জন্য স্ট্যাটাস কোড।400: ব্যর্থ রেসপন্সের জন্য স্ট্যাটাস কোড।- প্রতিটি রেসপন্সের সাথে JSON ডেটা এবং স্ট্যাটাস কোড ফেরত দেওয়া হয়।
আউটপুট:
http://127.0.0.1:5000/api/success:
{ "message": "Success!" }স্ট্যাটাস কোড: 200 (OK)
http://127.0.0.1:5000/api/error:
{ "error": "Something went wrong!" }স্ট্যাটাস কোড: 400 (Bad Request)
৩. JSON Response থেকে ডেটা এক্সট্র্যাক্ট করা
Flask-এ আপনি JSON ডেটা পেতে বা প্রেরণ করতে request.get_json() ব্যবহার করতে পারেন। এটি ক্লায়েন্ট থেকে প্রাপ্ত JSON ডেটাকে Python ডিকশনারি হিসেবে কনভার্ট করে।
উদাহরণ:
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route("/api/receive", methods=["POST"])
def receive_data():
data = request.get_json() # ক্লায়েন্ট থেকে JSON ডেটা গ্রহণ
name = data.get("name")
age = data.get("age")
response = {
"message": f"Received data: Name = {name}, Age = {age}"
}
return jsonify(response), 200
if __name__ == "__main__":
app.run(debug=True)
এখানে:
request.get_json(): এটি ক্লায়েন্ট থেকে প্রাপ্ত JSON ডেটা গ্রহণ করে এবং Python ডিকশনারিতে রূপান্তরিত করে।- POST রিকোয়েস্ট এ JSON ডেটা পাঠাতে হবে।
API রিকোয়েস্ট পাঠানোর উদাহরণ (Postman বা cURL দিয়ে):
{
"name": "Alice",
"age": 25
}
আউটপুট:
{
"message": "Received data: Name = Alice, Age = 25"
}
৪. Complex JSON Response
Flask-এ আপনি আরও জটিল JSON রেসপন্সও তৈরি করতে পারেন, যেখানে নেস্টেড ডেটা এবং লিস্ট থাকতে পারে।
উদাহরণ:
from flask import Flask, jsonify
app = Flask(__name__)
@app.route("/api/complex")
def complex_response():
data = {
"user": {
"name": "John Doe",
"age": 30,
"email": "john.doe@example.com"
},
"posts": [
{"title": "Post 1", "content": "This is the first post."},
{"title": "Post 2", "content": "This is the second post."}
]
}
return jsonify(data)
if __name__ == "__main__":
app.run(debug=True)
আউটপুট:
{
"user": {
"name": "John Doe",
"age": 30,
"email": "john.doe@example.com"
},
"posts": [
{
"title": "Post 1",
"content": "This is the first post."
},
{
"title": "Post 2",
"content": "This is the second post."
}
]
}
এখানে:
"user"একটি ডিকশনারি।"posts"একটি লিস্ট যার মধ্যে ডিকশনারি রয়েছে।
৫. Custom Error Handling with JSON
Flask-এ কাস্টম ত্রুটি (error) তৈরি করার জন্য errorhandler() ব্যবহার করা যায়, যেখানে JSON রেসপন্স ফেরত দেওয়া হয়।
উদাহরণ:
from flask import Flask, jsonify
app = Flask(__name__)
@app.errorhandler(404)
def not_found(error):
return jsonify({"error": "Page not found"}), 404
@app.errorhandler(500)
def internal_error(error):
return jsonify({"error": "Internal server error"}), 500
if __name__ == "__main__":
app.run(debug=True)
এখানে:
@app.errorhandler(404): এটি 404 ত্রুটি (পেজ না পাওয়া) হলে JSON রেসপন্স প্রদান করবে।@app.errorhandler(500): এটি 500 ত্রুটি (সার্ভার সমস্যা) হলে JSON রেসপন্স প্রদান করবে।
আউটপুট:
404 ত্রুটি:
{ "error": "Page not found" }500 ত্রুটি:
{ "error": "Internal server error" }
Flask-এ JSON রেসপন্স তৈরি করা খুবই সহজ এবং শক্তিশালী। আপনি jsonify() ব্যবহার করে ডেটা JSON ফরম্যাটে রিটার্ন করতে পারেন, এবং HTTP Status Codes সহ সঠিক রেসপন্স প্রদান করতে পারেন। JSON API তৈরি করার সময় Flask আপনাকে আরও শক্তিশালী ও নমনীয় কাস্টম রেসপন্স তৈরি করার সুবিধা দেয়।
Flask-এ Custom Headers এবং Status Code Management ব্যবহার করে আপনি HTTP রেসপন্সের সাথে কাস্টম তথ্য (যেমন হেডার এবং স্ট্যাটাস কোড) যুক্ত করতে পারেন। এটি বিশেষত API তৈরি করার সময় খুবই গুরুত্বপূর্ণ, কারণ এটি ক্লায়েন্ট এবং সার্ভারের মধ্যে তথ্য আদান-প্রদানকে আরও সুসংগঠিত এবং স্পষ্ট করে তোলে।
১. Custom Headers ব্যবহার করা
Custom Headers হল কাস্টম তথ্য যা HTTP রেসপন্সের অংশ হিসেবে ক্লায়েন্টকে পাঠানো হয়। আপনি Flask রেসপন্সে কাস্টম হেডার যোগ করতে পারেন এবং এই তথ্য ব্যবহারকারীর কাছে পাঠাতে পারেন।
উদাহরণ:
from flask import Flask, jsonify
app = Flask(__name__)
@app.route("/custom-header")
def custom_header():
response = jsonify({"message": "Custom header added!"})
response.headers["X-Custom-Header"] = "This is a custom header"
return response
if __name__ == "__main__":
app.run(debug=True)
এখানে:
response.headers["X-Custom-Header"]: এটি একটি কাস্টম হেডারX-Custom-Headerতৈরি করছে, যেটি রেসপন্সের সাথে পাঠানো হবে।jsonify: এটি একটি JSON রেসপন্স তৈরি করছে।
যখন আপনি http://127.0.0.1:5000/custom-header URL এ যাবেন, আপনি রেসপন্সে X-Custom-Header নামে একটি কাস্টম হেডার দেখতে পাবেন।
রেসপন্স উদাহরণ:
HTTP/1.0 200 OK
Content-Type: application/json
X-Custom-Header: This is a custom header
Content-Length: 34
২. HTTP Status Code Management
Flask-এ HTTP Status Code ম্যানেজ করতে আপনাকে রেসপন্সের স্ট্যাটাস কোড নির্ধারণ করতে হয়। এটি ক্লায়েন্টকে জানায় যে তাদের রিকোয়েস্টটি সফল ছিল, অথবা কোন সমস্যা ছিল এবং কি ধরণের সমস্যা ছিল।
স্ট্যাটাস কোড উদাহরণ:
- 200 OK: রিকোয়েস্ট সফলভাবে সম্পন্ন হয়েছে।
- 404 Not Found: অনুরোধকৃত রিসোর্স পাওয়া যায়নি।
- 500 Internal Server Error: সার্ভারের ভিতরে কোন ত্রুটি ঘটেছে।
উদাহরণ: Status Code সহ রেসপন্স ফেরত দেওয়া
from flask import Flask, jsonify
app = Flask(__name__)
@app.route("/success")
def success():
return jsonify({"message": "Request was successful!"}), 200
@app.route("/not-found")
def not_found():
return jsonify({"error": "Resource not found!"}), 404
@app.route("/error")
def error():
return jsonify({"error": "Internal server error!"}), 500
if __name__ == "__main__":
app.run(debug=True)
এখানে:
200: সঠিক রিকোয়েস্টের জন্য সফল স্ট্যাটাস কোড।404: রিসোর্স পাওয়া না গেলে (পেজ না পাওয়া) 404 স্ট্যাটাস কোড।500: সার্ভার-ভিত্তিক ত্রুটির জন্য 500 স্ট্যাটাস কোড।
যখন আপনি এই রাউটগুলো ব্রাউজারে বা API ক্লায়েন্টে পরীক্ষা করবেন, আপনি সঠিক স্ট্যাটাস কোড সহ রেসপন্স পাবেন।
রেসপন্স উদাহরণ:
/successURL (200 OK):HTTP/1.0 200 OK Content-Type: application/json Content-Length: 39 { "message": "Request was successful!" }/not-foundURL (404 Not Found):HTTP/1.0 404 NOT FOUND Content-Type: application/json Content-Length: 39 { "error": "Resource not found!" }/errorURL (500 Internal Server Error):HTTP/1.0 500 INTERNAL SERVER ERROR Content-Type: application/json Content-Length: 44 { "error": "Internal server error!" }
৩. Custom Status Code এবং Headers একই রেসপন্সে ব্যবহার করা
Flask-এ আপনি Custom Headers এবং Custom Status Code একসাথে ব্যবহার করতে পারেন। এটি বিশেষত API রেসপন্সগুলিতে কাজের সময় প্রয়োজনীয়। যেমন, আপনি রেসপন্সের সঙ্গে কাস্টম হেডার এবং স্ট্যাটাস কোড একযোগে পাঠাতে পারেন।
উদাহরণ:
from flask import Flask, jsonify
app = Flask(__name__)
@app.route("/custom-response")
def custom_response():
response = jsonify({"message": "Custom status and headers"})
response.headers["X-Custom-Header"] = "Custom header value"
return response, 201 # 201 Created status code
if __name__ == "__main__":
app.run(debug=True)
এখানে:
201 Created: এই স্ট্যাটাস কোডটি নতুন রিসোর্স সঠিকভাবে তৈরি হলে ব্যবহার হয় (যেমন, নতুন ডাটাবেস এন্ট্রি তৈরি হলে)।X-Custom-Header: কাস্টম হেডার যুক্ত করা হয়েছে।
রেসপন্স উদাহরণ:
HTTP/1.0 201 CREATED
Content-Type: application/json
X-Custom-Header: Custom header value
Content-Length: 38
{
"message": "Custom status and headers"
}
৪. Flask Response Object
Flask আপনাকে Response অবজেক্ট সরবরাহ করে, যা আপনি কাস্টম হেডার, কাস্টম স্ট্যাটাস কোড এবং অন্যান্য কাস্টম রেসপন্স ভ্যালু সেট করতে ব্যবহার করতে পারেন।
from flask import Flask, Response
app = Flask(__name__)
@app.route("/custom-response-object")
def custom_response_object():
response = Response(
'{"message": "This is a custom response object"}',
status=200,
mimetype='application/json'
)
response.headers['X-Response-Source'] = 'Flask'
return response
if __name__ == "__main__":
app.run(debug=True)
এখানে:
Response: এটি কাস্টম রেসপন্স অবজেক্ট তৈরি করেছে, যেখানে কনটেন্ট, স্ট্যাটাস কোড এবং MIME টাইপ নির্ধারণ করা হয়েছে।X-Response-Source: একটি কাস্টম হেডার।
রেসপন্স উদাহরণ:
HTTP/1.0 200 OK
Content-Type: application/json
X-Response-Source: Flask
Content-Length: 56
{
"message": "This is a custom response object"
}
Flask-এ Custom Headers এবং Status Code Management ব্যবহার করে আপনি কাস্টম HTTP রেসপন্স তৈরি করতে পারেন, যা আপনার অ্যাপ্লিকেশন এবং API-কে আরও শক্তিশালী এবং নমনীয় করে তোলে। এই ফিচারগুলি API ডেভেলপমেন্টে গুরুত্বপূর্ণ, কারণ এগুলি ক্লায়েন্ট এবং সার্ভারের মধ্যে আরও স্পষ্ট এবং কার্যকরী যোগাযোগ নিশ্চিত করে।
Read more