Flask
रूटिंग
खोज…
मूल मार्ग
फ्लास्क में मार्गों को फ्लास्क अनुप्रयोग उदाहरण के route
डेकोरेटर का उपयोग करके परिभाषित किया जा सकता है:
app = Flask(__name__)
@app.route('/')
def index():
return 'Hello Flask'
route
डेकोरेटर एक स्ट्रिंग लेता है जो मिलान करने के लिए URL है। जब इस स्ट्रिंग से मेल खाने वाले URL के लिए एक आवेदन प्राप्त होता है, तो सजाए गए फ़ंक्शन (जिसे व्यू फ़ंक्शन भी कहा जाता है) को आमंत्रित किया जाएगा। तो एक मार्ग के बारे में हमारे पास होगा:
@app.route('/about')
def about():
return 'About page'
यह ध्यान रखना महत्वपूर्ण है कि ये मार्ग नियमित अभिव्यक्ति नहीं हैं, जैसे कि वे Django में हैं।
आप URL खंड मानों को चर में निकालने के लिए चर नियमों को परिभाषित कर सकते हैं:
@app.route('/blog/posts/<post_id>')
def get_blog_post(post_id):
# look up the blog post with id post_id
# return some kind of HTML
यहाँ URL के अंतिम भाग में परिवर्तनशील नियम है। जो कुछ भी मान URL के अंतिम खंड में है दृश्य समारोह (को दे दिया जाएगा get_blog_post
के रूप में) post_id
पैरामीटर। इसलिए /blog/posts/42
लिए एक अनुरोध /blog/posts/42
की आईडी के साथ ब्लॉग पोस्ट को पुनः प्राप्त (या पुनर्प्राप्त करने का प्रयास) करेगा।
URL का पुन: उपयोग करना भी आम है। उदाहरण के लिए, शायद हम /blog/posts
सभी ब्लॉग पोस्ट की एक सूची वापस करना चाहते हैं। तो हम एक ही दृश्य फ़ंक्शन के लिए दो मार्ग हो सकते हैं:
@app.route('/blog/posts')
@app.route('/blog/posts/<post_id>')
def get_blog_post(post_id=None):
# get the post or list of posts
यहां ध्यान दें कि हमें get_blog_post
में post_id
लिए None
का डिफ़ॉल्ट मान None
get_blog_post
। जब पहले मार्ग का मिलान किया जाता है, तो दृश्य फ़ंक्शन को पास करने का कोई मूल्य नहीं होगा।
यह भी ध्यान दें कि डिफ़ॉल्ट रूप से एक चर नियम का प्रकार एक स्ट्रिंग है। हालाँकि, आप कई अलग-अलग प्रकारों को निर्दिष्ट कर सकते हैं जैसे कि चर को उपसर्ग करके int
और float
:
@app.route('/blog/post/<int:post_id>')
फ्लास्क के अंतर्निहित URL-कन्वर्टर्स हैं:
string | Accepts any text without a slash (the default).
int | Accepts integers.
float | Like int but for floating point values.
path | Like string but accepts slashes.
any | Matches one of the items provided
uuid | Accepts UUID strings
क्या हमें अंतिम URL सेगमेंट में एक मान के साथ URL /blog/post/foo
पर जाने की कोशिश करनी चाहिए जिसे पूर्णांक में परिवर्तित नहीं किया जा सकता है, एप्लिकेशन 404 त्रुटि लौटाएगा। यह सही कार्रवाई है क्योंकि अंतिम खंड में /blog/post
और एक स्ट्रिंग के साथ कोई नियम नहीं है।
अंत में, HTTP तरीकों को स्वीकार करने के लिए मार्गों को कॉन्फ़िगर किया जा सकता है। route
डेकोरेटर एक methods
कीवर्ड तर्क लेता है जो इस मार्ग के लिए स्वीकार्य HTTP तरीकों का प्रतिनिधित्व करने वाले स्ट्रिंग की एक सूची है। जैसा कि आपने माना होगा, डिफ़ॉल्ट केवल GET
। यदि हमारे पास एक नया ब्लॉग पोस्ट जोड़ने के लिए एक फॉर्म था और वह GET
अनुरोध के लिए HTML को वापस करना चाहता था और POST
अनुरोध के लिए फॉर्म डेटा पार्स करता है, तो मार्ग कुछ इस तरह दिखाई देगा:
@app.route('/blog/new', methods=['GET', 'POST'])
def new_post():
if request.method == 'GET':
# return the form
elif request.method == 'POST':
# get the data from the form values
request
flask
पैकेज में पाया जाता है। ध्यान दें कि methods
कीवर्ड तर्क का उपयोग करते समय, हमें स्वीकार करने के लिए HTTP विधियों के बारे में स्पष्ट होना चाहिए। यदि हमने केवल POST
सूचीबद्ध किया था, तो मार्ग अब GET
अनुरोधों का जवाब नहीं देगा और 405 त्रुटि लौटाएगा।
कैच-ऑल रूट
एक कैच-ऑल व्यू के लिए उपयोगी हो सकता है जहां आप रास्ते के आधार पर खुद को जटिल तर्क से संभालते हैं। यह उदाहरण दो नियमों का उपयोग करता है: पहला नियम विशेष रूप से पकड़ता है /
और दूसरा नियम अंतर्निहित path
कनवर्टर के साथ मनमाना पथ पकड़ता है। path
कनवर्टर किसी भी स्ट्रिंग (स्लैश सहित) से मेल खाता है फ्लास्क चर-नियम देखें
@app.route('/', defaults={'u_path': ''})
@app.route('/<path:u_path>')
def catch_all(u_path):
print(repr(u_path))
...
c = app.test_client()
c.get('/') # u_path = ''
c.get('/hello') # u_path = 'hello'
c.get('/hello/stack/overflow/') # u_path = 'hello/stack/overflow/'
रूटिंग और HTTP तरीके
डिफ़ॉल्ट रूप से, मार्ग केवल GET
अनुरोधों का जवाब देते हैं। आप की आपूर्ति करके इस व्यवहार को बदल सकते methods
को तर्क route()
डेकोरेटर।
from flask import request
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
do_the_login()
else:
show_the_login_form()
आप उपयोग किए गए HTTP विधि के आधार पर एक ही समापन बिंदु पर विभिन्न कार्यों को भी मैप कर सकते हैं।
@app.route('/endpoint', methods=['GET'])
def get_endpoint():
#respond to GET requests for '/endpoint'
@app.route('/endpoint', methods=['POST', 'PUT', 'DELETE'])
def post_or_put():
#respond to POST, PUT, or DELETE requests for '/endpoint'