2011-08-13 13 views
25

कोई भी फ्लास्क-प्रिंसिपल के बारे में एक अच्छा ट्यूटोरियल जानता है? मैं प्रमाणीकरण और प्रमाणीकरण (needRole और needIdentity) करने की कोशिश कर रहा हूं और मुझे कहीं भी नहीं मिला है।फ्लास्क-प्रिंसिपल ट्यूटोरियल (ऑथ + लेखक)

मुझे यकीन है कि वास्तव में कोई व्यापक ट्यूटोरियल नहीं है - शायद आप में से कुछ के पास अपने हाथों पर कुछ समय है और एक ट्यूटोरियल-उत्तर-उत्तर पोस्ट करना चाहते हैं? मैं वास्तव में django के बजाय फ्लास्क का उपयोग करने के लिए निर्धारित किया गया है, लेकिन इसे ठीक करने की जरूरत है।

+0

क्या आप/के साथ जा रहा यहां सीखने को समाप्त पर कोई टिप्पणी अद्यतन @InnocentPixel? धन्यवाद! – Jeff

+0

@ जेफ ऐसा लगता है कि किसी ने उत्तर के रूप में एक अच्छा छोटा ट्यूटोरियल पोस्ट किया है! – agf

+0

यह भी है [यह] (https://github.com/saltycrane/flask-principal-example), अब भी कुछ साल पुराना है .... – bahmait

उत्तर

46

मुझे पता है कि यह प्रश्न पुराना है, लेकिन कुछ दिन पहले मैं एक ही चीज़ की तलाश में था इसलिए उम्मीद है कि यह भविष्य में किसी की मदद करेगा। । ।

the github repo for Flask-Principal पर शुरू करने के लिए एक अच्छी जगह है।

मुझे फ्लास्क-प्रिंसिपल (एफपी) के साथ भी कुछ परेशानी हुई है। यदि आप decorators, context-managers, और signals पर नए हैं तो आप शायद एफपी का उपयोग करने से पहले उन्हें थोड़ा सा शोध करना चाहेंगे।

फ्लास्क Blinker नामक पैकेज पर आधारित संकेतों को पंजीकृत करता है। यदि आपके पास ब्लिंकर नहीं है, तो फ्लास्क आपको सिग्नल घोषित करने की अनुमति देगा हालांकि वे कुछ भी नहीं करेंगे। मेरा मतलब यह देखने के लिए, फ्लास्क के signals.py के स्रोत में एक नज़र डालें।

तो यह एफपी के लिए क्यों मायने रखता है? खैर, यह पता चला है कि एफपी पहचान पंजीकृत करने और पहचानने के लिए सिग्नल का उपयोग करता है। विशेष रूप से:

  1. identity_loaded: जब इस संकेत कहा जाता है, हम उपयोगकर्ता के लिए एक पहचान वस्तु बनाने के लिए पता है। (यह बुलाया Principal._set_thread_identity() के माध्यम से है)

  2. identity_changed: जब इस संकेत कहा जाता है, हम उपयोगकर्ता की पहचान अद्यतन करने के लिए पता है। (जब यह कहा जाता है कार्यान्वितPrincipal._on_identity_changed())

तो क्या मैं मतलब है बुलाया? सबसे पहले, हमें यह जानने की जरूरत है कि सिग्नल कैसे स्थापित किए जाते हैं। ब्लिंकर कार्यों को सिग्नल के लिए "सदस्यता लेने" की अनुमति देकर काम करता है। इसलिए, उदाहरण के लिए, Principal._on_identity_changed() सिग्नल identity_changed सिग्नल के लिए ग्राहक के रूप में स्थापित किया गया है। जब भी संकेत identity_changed भेजा जाता है, _on_identity_changed() निष्पादित किया जाता है। कोड इस तरह दिखता है:

from blinker import signal 

test = signal('test') 
test.connect(func_we_want_to_execute_when_signal_is_called) 

सिग्नल कहलाए जाने के सवाल पर वापस जाएं। ब्लिंकर में सिग्नल हैंडलर निष्पादित होते हैं जब हम सिग्नल ऑब्जेक्ट पर send() पर कॉल करते हैं।इसलिए हमारे test संकेत के लिए, वाक्य रचना बस है:

test.send() 

जब test.send() कहा जाता है func_we_want_to_execute_when_signal_is_called निष्पादित करेंगे। उम्मीद है कि एफपी दस्तावेज में इस उदाहरण अब थोड़ा अधिक समझ में आता है:

def login_view(req): 
    username = req.form.get('username') 
    # Your authentication here. 

    # Notice our signal (identity_changed) is being called (identity_changed.send()) 
    # What function is being called? Principal._on_identity_changed() 
    identity_changed.send(app, identity=Identity(username)) 

लेकिन हम संकेतों की स्थापना सरल बना सकते हैं अगर हम एक डेकोरेटर का उपयोग हमारे लिए यह करने के लिए। दोबारा दिखाओ कि मैंने अपना टेस्ट सिग्नल सेट अप किया है लेकिन इसे कनेक्ट नहीं किया है। हम कर सकते हैं:

@test.connect 
def func_we_want_to_execute_when_signal_is_called(): 
    return stuff 

उपर्युक्त कोड अनिवार्य रूप से उस कार्य को सेट करता है जिसे हम निष्पादित करना चाहते हैं जब हम परीक्षण परीक्षण भेजते हैं। उम्मीद है कि अब एफपी प्रलेखन से निम्नलिखित कोड बनाता है भावना:

# We're setting up our signal (identity_loaded) 
# to execute the function below (on_identity_loaded) 
# when we call our signal (identity_loaded.send()) 
# which is called in Principal._set_thread_identity() 
@identity_loaded.connect 
def on_identity_loaded(sender, identity): 
    # Get the user information from the db 
    user = db.get(identity.name) 

    # Update the roles that a user can provide 
    for role in user.roles: 
     identity.provides.add(RoleNeed(role.name)) 

    # Save the user somewhere so we only look it up once 
    identity.user = user 

तो आप देख सकते संकेत वास्तव में पहचान प्रक्रिया ड्राइव कि। भूमिकाएं और अनुमतियां वास्तव में एक (आसान) विचारधारा हैं यदि आप किसी भी प्रकार के प्राधिकरण के लिए एक तरीका तलाश रहे हैं।

मेरे लिए, सिग्नल के चारों ओर अपने सिर को लपेटना सबसे कठिन हिस्सा था; मुझे आशा है कि यह किसी और के लिए भी सहायक होगा। लेकिन मैं वास्तव में आपको फ्लास्क-प्रिंसिपल के लिए ऊपर से जुड़े स्रोत कोड के माध्यम से पढ़ने के लिए प्रोत्साहित करता हूं; यह समझने का सबसे अच्छा तरीका होगा कि क्या हो रहा है।

6

वहां केवल एक ही this blog post लगता है।

web site of the project एक पूर्ण (बहुत संक्षिप्त) ट्यूटोरियल है, इसके बाद पूर्ण एपीआई दस्तावेज। आपका प्रश्न इंगित करता है कि आप इसे पहले ही देख चुके हैं।

आपको flask-login में भी रुचि हो सकती है जो सत्र प्रबंधन प्रदान करता है, और यह लिंक किए गए ब्लॉग पोस्ट में भी शामिल है।

यह संभावना है कि यहां किसी के पास इसका अनुभव होगा (और विस्तार से साझा करने का समय) लेकिन मैं सभी ट्यूटोरियल-ए-उत्तर के लिए हूं।

+0

मैंने देखा कि ट्यूटोरियल और यह मुझे छोड़ दिया .. और अधिक चाहते हैं (मैं अभी भी बहुत कुछ नहीं पता)। फ्लास्क-लॉगिन केवल लॉगिन करता है और मुझे प्राधिकरण भी पसंद है (भूमिका की आवश्यकता और पहचान की आवश्यकता है)। मैं इसे वेबसाइट उपयोग और आराम एपीआई दोनों के लिए उपयोग कर रहा हूं जिसे अधिकृत भी होना चाहिए। यह सुनिश्चित करने के लिए कि एपीआई पंजीकृत उपयोगकर्ताओं तक ही सीमित है, सर्वर पक्षीय सत्रों का उपयोग करना भी एक अच्छा विचार होगा। और हाँ मैंने प्रोजेक्ट की वेबसाइट देखी लेकिन मैं सीधे अपने हाथ की पैदल यात्रा को पकड़ने की तलाश में हूं ताकि मैं अपने ज्ञान में अंतर को भर सकूं। – pocorschi

+1

हाँ, दुर्भाग्य से, मुझे नहीं लगता कि वर्तमान में कोई मौजूद है। मेरा एकमात्र सुझाव समय-समय पर अधिक जानकारी जोड़ने के बाद पोस्ट को संपादित करना होगा (यह इसे "सक्रिय" टैब पर टक्कर देता है, लेकिन केवल टक्कर में संपादित नहीं होता है)। यदि आपको दो दिनों में कोई अच्छा जवाब नहीं मिलता है, तो आप इसे "फीचर्ड" टैब में जोड़ने के लिए प्रश्न में एक बाउंटी जोड़ सकते हैं, और आशा करते हैं कि आप किसी ऐसे व्यक्ति के साथ भाग्यशाली हो जाएं जो पोस्ट करना चाहते हैं, या किसी का उपयोग करने वाले व्यक्ति अतीत में – agf

+0

शब्दों के लिए एएफएफ धन्यवाद :) मुझे यह सुनिश्चित करना होगा। – pocorschi

3

किसी कारण से वहां फ्लास्क सिद्धांत पर बहुत कम उदाहरण हैं। मैंने व्यक्तिगत रूप से फ्लास्क-प्रिंसिपल प्रलेखन के साथ शुरू करने के लिए गुप्त पाया। एक बार जब मैं स्रोत कोड के माध्यम से चला गया तो सब कुछ बेहतर जगह पर फिट होना प्रतीत होता था।

इन 2 लिंक है कि मैं खोजने के लिए सक्षम था से प्रेरित होकर, here और here, मैं एक साधारण उदाहरण के एक साथ कुप्पी के प्रवेश, कुप्पी के प्रिंसिपलों का उपयोग कर रख दिया और ब्लूप्रिंट

https://github.com/shankararul/flask-login-principal

मैं अपना सर्वश्रेष्ठ करने की कोशिश की यहां इस पोस्ट में समझाओ। आप किसी भी feedbck है, तो कृपया मुझे बताएं और मैं संशोधित कर सकते हैं/पोस्ट

https://medium.com/@shankararul/a-shot-at-demystifying-flask-principal-dda5aaeb6bc6

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