2011-11-09 13 views
9

पर यूआरएल नियम जोड़ें मैं एक ऐप लिख रहा हूं जिसमें उपयोगकर्ता जानकारी स्टोर करने में सक्षम होंगे कि वे एक आरईएसटी इंटरफ़ेस निर्दिष्ट कर सकते हैं। आईई, /<username>/rest/products पर उत्पादों की एक सूची स्टोर करें। चूंकि यूआरएल स्पष्ट रूप से हाथ से पहले ज्ञात नहीं हैं, इसलिए मैं फ्लास्क में गतिशील यूआरएल निर्माण को लागू करने का सबसे अच्छा तरीका सोचने की कोशिश कर रहा था। मैंने जिस तरह से सोचा था, वह कैच-ऑल नियम लिखना होगा, और वहां से यूआरएल रूट करना होगा। लेकिन फिर जब मैं फ्लास्क में पहले से ही अंतर्निहित हूं तो मैं मूल रूप से यूआरएल रूटिंग क्षमताओं को डुप्लिकेट कर रहा हूं। इसलिए, मैं सोच रहा था कि .add_url_rule() (docs here, थोड़ा नीचे स्क्रॉल करें) का उपयोग करने के लिए उन्हें सीधे ऐप से अटैच करने का बुरा विचार होगा। क्या कोई विशिष्ट कारण नहीं किया जाना चाहिए?गतिशील रूप से फ्लास्क ऐप

उत्तर

12

हर बार जब आप add_url_rule() निष्पादित करते हैं तो आंतरिक रूटिंग URL मानचित्र को रीमेप्स करता है। यह न तो थ्रेडसेफ और न ही तेज़ है। मैं अभी समझ में नहीं आता कि आपको ईमानदार होने के लिए उपयोगकर्ता विशिष्ट यूआरएल नियमों की आवश्यकता क्यों है। यह थोड़े लगता है जैसे आप वास्तव में उपयोगकर्ता विशिष्ट अनुप्रयोगों को आरोहित करना चाहते हैं?

हो सकता है कि यह उपयोगी है: http://flask.pocoo.org/docs/patterns/appdispatch/

+0

मेरे पास एक ही आवश्यकता है यानी मैं अपनी 'register_resource' विधि का उपयोग करके [ईव] (http://python-eve.org) के साथ बनाए गए एपीआई में गतिशील रूप से नए अंतराल जोड़ने का एक तरीका ढूंढ रहा हूं, जो ' आंतरिक रूप से add_url_rule'। ध्यान दें कि यह प्रत्येक अनुरोध के लिए नहीं होगा, केवल एक हुक द्वारा ट्रिगर किया जाता है जब एक विशिष्ट अंतराल पर 'POST' प्राप्त होता है, इसलिए प्रदर्शन एक मुद्दा नहीं होना चाहिए। – kynan

+0

बिल्कुल वही आवश्यकता है। एपी, जब भी कुछ मार्ग पर एक पुट अनुरोध होता है तो उसे एक नया मार्ग जोड़ने और हटाने की आवश्यकता होती है। मेरे मामले में मैं फ्लास्क-आराम से उपयोग कर रहा हूं, लेकिन मूल रूप से वही है। – cllamach

+0

ऐसा लगता है कि अगर मैं थ्रेडिंग.लॉक का उपयोग करता हूं, तो मैं पहले_request में ऐसा कर सकता हूं, हालांकि, मुझे यकीन नहीं है कि निम्न त्रुटि होने के लिए url_ के साथ समस्याओं को कैसे रोकें: ValueError: सॉर्ट ERROR के दौरान संशोधित सूची: ऐप: आंतरिक सर्वर त्रुटि, सूची संशोधित क्रम के दौरान – pip

0

मैं अपने आवेदन जहां दिए गए SOMEID के लिए प्रत्येक समाप्ति बिंदु /<SOMEID>/rest/other एक अलग समारोह घिरा किया जाना चाहिए के लिए इसी तरह की आवश्यकता पड़ा है। इसे प्राप्त करने का एक तरीका एक लुकअप शब्दकोश रखना है जहां मान फ़ंक्शन हैं जो विशिष्ट SOMEID को संभालते हैं। इस ख्याल तुम सच में "गतिशील" Url नियम जोड़ने के लिए की जरूरत नहीं है के लिए

func_look_up_dict = {...} 
@app.route('<SOMEID>/rest/other', methods=['GET']) 
def multiple_func_router_endpoint(SOMEID): 
    if SOMEID in func_look_up_dict.keys(): 
     return jsonify({'result' = func_look_up_dict[SOMEID]()}), 200 
    else: 
     return jsonify({'result'='unknown', 'reason'='invalid id in url'}), 404 

इसलिए, बल्कि पैरामीटर के साथ एक यूआरएल नियम का उपयोग करके एक ही भीतर विभिन्न मामलों को संभालने के उदाहरण के लिए: यह टुकड़ा पर एक नज़र समारोह। विचार करने की एक और बात यह है कि वास्तव में ऐसे यूआरएल एंडपॉइंट के उपयोग के मामले के बारे में सोचें। यदि <username> एक पैरामीटर है जिसे पारित करने की आवश्यकता है, तो यूआरएल नियम का उपयोग क्यों न करें जैसे कि /rest/product/<username> या इसे जीईटी अनुरोध में एक तर्क के रूप में पास करें? उम्मीद है कि मदद करता है।

संबंधित मुद्दे