ফ্লাস্ক রাউটিং কীভাবে কাজ করে
ফ্লাস্কের পুরো ধারণাটি (এবং অন্তর্নিহিত ওয়ার্কজেগ লাইব্রেরি) ইউআরএল পাথগুলি এমন কিছু যুক্তিতে ম্যাপ করা যা আপনি চালাবেন (সাধারণত, "ফাংশন দেখুন")। আপনার মূল দৃষ্টিভঙ্গি এরূপ সংজ্ঞায়িত করা হয়েছে:
@app.route('/greeting/<name>')
def give_greeting(name):
return 'Hello, {0}!'.format(name)
মনে রাখবেন যে ফাংশনটি আপনি (add_url_rule) উল্লেখ করেছেন কেবলমাত্র ডেকরেটার স্বরলিপি ব্যবহার না করে একই লক্ষ্য অর্জন করে। অতএব, নিম্নলিখিতগুলি একই:
# No "route" decorator here. We will add routing using a different method below.
def give_greeting(name):
return 'Hello, {0}!'.format(name)
app.add_url_rule('/greeting/<name>', 'give_greeting', give_greeting)
ধরা যাক আপনার ওয়েবসাইটটি 'www.example.org' এ অবস্থিত এবং উপরের দৃশ্যটি ব্যবহার করে। ব্যবহারকারী তাদের ব্রাউজারে নিম্নলিখিত URL টি প্রবেশ করে:
http://www.example.org/greeting/Mark
ফ্লাস্কের কাজ হ'ল এই ইউআরএলটি নেওয়া, ব্যবহারকারী কী করতে চায় তা নির্ধারণ এবং পরিচালনা করার জন্য এটি আপনার বহু অজগর ফাংশনগুলির মধ্যে একটিতে প্রেরণ করা। এটি পথ নেয় :
/greeting/Mark
... এবং এটি রুটের তালিকার সাথে মেলে। আমাদের ক্ষেত্রে, give_greeting
ফাংশনে যাওয়ার জন্য আমরা এই পথটি সংজ্ঞায়িত করেছি ।
তবে, ভিউ তৈরির বিষয়ে আপনি যেভাবে যেতে পারেন এটি আসলে আপনার কাছ থেকে কিছু অতিরিক্ত তথ্য এড়িয়ে যায় ab পর্দার আড়ালে, ফ্লাস্ক ইউআরএল থেকে ভিউ ফাংশনটিতে সরাসরি এই লিপটি করেনি যা এই অনুরোধটি পরিচালনা করতে পারে। এটি কেবল বলে না ...
URL (http://www.example.org/greeting/Mark) should be handled by View Function (the function "give_greeting")
প্রকৃতপক্ষে, এটির আরও একটি পদক্ষেপ রয়েছে, যেখানে এটি URL টি একটি শেষ পয়েন্টে মানচিত্র করে:
URL (http://www.example.org/greeting/Mark) should be handled by Endpoint "give_greeting".
Requests to Endpoint "give_greeting" should be handled by View Function "give_greeting"
মূলত, "এন্ডপয়েন্ট" হ'ল একটি শনাক্তকারী যা আপনার কোডের কোন যৌক্তিক ইউনিটের অনুরোধটি পরিচালনা করতে হবে তা নির্ধারণে ব্যবহৃত হয় । সাধারণত, একটি শেষ পয়েন্ট হ'ল ফাংশনটির নাম। তবে, আপনি আসলে শেষের অবস্থানটি পরিবর্তন করতে পারেন, যেমন নীচের উদাহরণে করা হয়েছে।
@app.route('/greeting/<name>', endpoint='say_hello')
def give_greeting(name):
return 'Hello, {0}!'.format(name)
এখন, যখন ফ্লাস্ক অনুরোধটি প্রস্থান করবে, যুক্তিটি এই রকম দেখাচ্ছে:
URL (http://www.example.org/greeting/Mark) should be handled by Endpoint "say_hello".
Endpoint "say_hello" should be handled by View Function "give_greeting"
আপনি কীভাবে শেষ পয়েন্টটি ব্যবহার করেন
শেষ পয়েন্টটি সাধারণত "বিপরীত অনুসন্ধান" এর জন্য ব্যবহৃত হয়। উদাহরণস্বরূপ, আপনার ফ্লাস্ক অ্যাপ্লিকেশনটির একটি দৃশ্যে, আপনি অন্য ভিউটি উল্লেখ করতে চান (সম্ভবত আপনি যখন সাইটের এক অঞ্চল থেকে অন্য অঞ্চলে সংযোগ করছেন)। হার্ড-কোডের URL টির পরিবর্তে আপনি ব্যবহার করতে পারেন url_for()
। নিম্নলিখিতটি ধরে নিন
@app.route('/')
def index():
print url_for('give_greeting', name='Mark') # This will print '/greeting/Mark'
@app.route('/greeting/<name>')
def give_greeting(name):
return 'Hello, {0}!'.format(name)
এটি সুবিধাজনক, এখন যেমন আমরা সেই সংস্থানটি উল্লেখ করি সেখানে লাইনটি পরিবর্তন করার প্রয়োজন ছাড়াই আমাদের অ্যাপ্লিকেশনগুলির URL গুলি পরিবর্তন করতে পারি।
কেন সবসময় ভিউ ফাংশনটির নাম ব্যবহার করবেন না?
একটি প্রশ্ন আসতে পারে যা নিম্নলিখিতটি হ'ল: "আমাদের এই অতিরিক্ত স্তরটির প্রয়োজন কেন?" কেন একটি শেষ বিন্দুতে কোনও পাথ মানচিত্র, তারপরে একটি দর্শন ফাংশনটির একটি শেষ পয়েন্ট? কেন কেবল সেই মাঝের পদক্ষেপটি এড়িয়ে যাবেন না?
কারণ এটি এইভাবে আরও শক্তিশালী। উদাহরণস্বরূপ, ফ্লাস্ক ব্লুপ্রিন্টগুলি আপনাকে আপনার অ্যাপ্লিকেশনটিকে বিভিন্ন অংশে বিভক্ত করার অনুমতি দেয়। আমার "অ্যাডমিন" নামক একটি ব্লুপ্রিন্টে আমার অ্যাডমিন-পাশের সমস্ত সংস্থান থাকতে পারে এবং "ব্যবহারকারী" নামক একটি এন্ডপয়েন্টে আমার ব্যবহারকারী-স্তরের সমস্ত সংস্থান থাকতে পারে।
ব্লুপ্রিন্টগুলি আপনাকে এটিকে नेम স্পেসে আলাদা করতে দেয়। উদাহরণ স্বরূপ...
main.py:
from flask import Flask, Blueprint
from admin import admin
from user import user
app = Flask(__name__)
app.register_blueprint(admin, url_prefix='admin')
app.register_blueprint(user, url_prefix='user')
admin.py:
admin = Blueprint('admin', __name__)
@admin.route('/greeting')
def greeting():
return 'Hello, administrative user!'
user.py:
user = Blueprint('user', __name__)
@user.route('/greeting')
def greeting():
return 'Hello, lowly normal user!'
নোট করুন যে উভয় ব্লুপ্রিন্টগুলিতে, '/ গ্রিটিং' রুটটি "শুভেচ্ছা" বলে একটি ফাংশন। আমি যদি অ্যাডমিনকে "গ্রিটিং" ফাংশনটি উল্লেখ করতে চাইতাম, তবে আমি কেবল "গ্রিটিং" বলতে পারি না কারণ সেখানে একটি ব্যবহারকারী "গ্রিটিং" ফাংশন রয়েছে। এন্ডপয়েন্টগুলি প্রান্তের অংশ হিসাবে ব্লুপ্রিন্টের নাম নির্দিষ্ট করে আপনাকে এক ধরণের নেমস্পেসিংয়ের অনুমতি দেয়। সুতরাং, আমি নিম্নলিখিতগুলি করতে পারি ...
print url_for('admin.greeting') # Prints '/admin/greeting'
print url_for('user.greeting') # Prints '/user/greeting'
url_for
কেমন? আমি ত্রুটিটি পেয়েছিCould not build url for endpoint ''