2016-01-10 5 views
5

के साथ HTML5 फ़ील्ड का उपयोग करके मैं एक वेब अनुप्रयोग विकसित करने के लिए फ्लास्क का उपयोग कर रहा हूं। मैं मूल रूप से HTML रूपों को मैन्युअल रूप से कर रहा था, और उसके बाद WTForms का उपयोग करने के लिए स्विच किया गया (यह एक शैक्षणिक प्रोजेक्ट है, इसलिए मैं प्रोजेक्ट बनाने के प्रत्येक चरण को दिखा रहा हूं)।WTForms

ईमेलफिल्ड जैसे HTML5 फॉर्म फ़ील्ड जोड़ने की कोशिश करते समय मुझे थोड़ा उलझन में आया। मैंने डब्ल्यूटीएफम्स दस्तावेज और ऑनलाइन खोज की, और मुझे पता नहीं चला कि एचटीएमएल 5 ईमेलफाइल का उपयोग करके डब्ल्यूटीएफफॉर्म कैसे बनाया जाए।

मैंने फिर इस मॉड्यूल को स्थापित किया https://pypi.python.org/pypi/wtforms-html5 जिसने इसके लिए अनुमति दी, और सब कुछ काम किया। लेकिन मैं अतिरिक्त निर्भरता जोड़ने के बारे में नाखुश था, खासकर क्योंकि यह सक्रिय रूप से विकसित नहीं हुआ प्रतीत होता है (https://github.com/brutus/wtforms-html5)।

मैं फिर डब्ल्यूटीएफम्स गिथब पेज पर समाप्त हुआ, और पाया कि वास्तव में सभी नए HTML5 फ़ील्ड के लिए समर्थन है, लेकिन ये फ़ील्ड डिफ़ॉल्ट रूप से आयात नहीं होते हैं। https://github.com/wtforms/wtforms/blob/master/wtforms/fields/html5.py इसलिए बजाय

from WTForms import EmailField 

का उपयोग करने का एक अनुमान कर

from WTForms import TextField 

एक के बजाय मैं पहले wtforms-एचटीएमएल 5 मॉड्यूल उपयोग कर रहा था के रूप में

इस प्रकार

from wtforms.fields.html5 import EmailField 

उपयोग करने के लिए है से होगी

from wtforms_html5 import EmailField 

इसलिए मैंने wtforms_html5 से wtforms.fields.html5 की सभी घटनाओं को बदल दिया और मेरा आवेदन ठीक उसी तरह काम कर रहा है।

ठीक है, सभी पृष्ठभूमि पढ़ने के लिए धन्यवाद। अब प्रश्नों के लिए:

  • क्यों नहीं WTForms दस्तावेज में उल्लेख किया html5 क्षेत्र (EmailField, DateField, आदि) के किसी भी?

  • क्यों नहीं इन क्षेत्रों दूसरों

  • तरह डिफ़ॉल्ट रूप से WTForms में आयात किए जाते इन क्षेत्रों स्थिर हैं/उपयोग के लिए?

  • WTForms से फ़ील्ड आयात करने के लिए सबसे अच्छा अभ्यास क्या है?

    from wtforms import TextField 
    from wtforms.fields import TextField 
    from wtforms.fields.simple import TextField 
    

    लेकिन EmailField के लिए, मैं

    from wtforms.fields.html5 import EmailField 
    

    उपयोग करने के लिए मैं चाहूँगा:

    from wtforms.fields import TextField 
    from wtforms.fields import EmailField 
    

पाठ क्षेत्र के लिए, मैं निम्न में से किसी का उपयोग कर सकते

लेकिन इसके लिएफ़ील्ड में एक लाइन जोड़ने की आवश्यकता होगीफ़ाइल, जो मैं करने के लिए तैयार नहीं हूं क्योंकि यह एक शैक्षिक परियोजना है और यह केवल शिक्षार्थियों को भ्रमित कर देगी।

मैं html5 क्षेत्रों

  • wtforms-html5 तीसरे पक्ष के मॉड्यूल का उपयोग जारी रखने के लिए कोई भी कारण है कि WTForms दस्तावेज़ नहीं है या डिफ़ॉल्ट आयात द्वारा के रूप में के लिए

    • इनसाइट देख रहा हूँ।
  • उत्तर

    5

    प्रस्तावना, मैं लेखकों में से एक हैं और वर्तमान में WTForms के प्राथमिक मेंटेनर

    इससे पहले कि मैं के लिए मिलता है क्यों मैं लोगों WTForms प्रयोग करने के लिए एक बहुत आम पैटर्न का उल्लेख करना चाहिए बनाने के लिए है हूँ आपका खुद का मॉड्यूल जो आपके द्वारा एक ही नामस्थान में इच्छित सभी बिट्स को लिखता है।

    myapp/forms.py में

    उदाहरण के लिए आप की तरह कुछ कार्य करें:

    from wtforms.fields import * 
    from wtforms import widgets, Form as _Form 
    from wtforms.fields.html5 import EmailField, 
    
    
    class Form(_Form): 
        """Awesome base form for myapp. Includes CSRF by default""" 
        class Meta: 
         csrf = True 
         csrf_secret = 'secretpasswordhere' 
    
         @property 
         def csrf_context(self): 
          return get_current_request().session 
    
        # maybe add some methods you really wanted to have on your Form class 
    

    आप उपयोग कर सकते हैं इसके बाद के संस्करण की तरह:

    from myapp.forms import Form, TextField, EmailField, ... 
    
    class UserForm(Form): 
        name = TextField(...) 
        email = EmailField(...) 
    

    या एकांतर from myapp.forms import *

    की तरह एक स्टार आयात आप ध्यान दें जाएगा साथ मैंने एक कस्टम फॉर्म सबक्लास भी शामिल किया जो सीएसआरएफ सेट करता है और डिफ़ॉल्ट रूप से सीएसआरएफ संदर्भ प्रदान करता है, जो कड़ाई से जरूरी नहीं है। अब क्यों (वैसे Flask-WTF आप कुप्पी उपयोग कर रहे हैं आप के लिए समान CSRF सेटअप करता है, लेकिन बात है कि कैसे आप आसानी से अपने खुद एकीकरण के साथ आ सकते हैं वर्णन करने के लिए किया गया था।)


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

    शुरू में, कर रही का हल विभिन्न पुस्तकालयों के साथ इंटरॉप के लिए extensions शामिल करने के लिए किया गया था। लेकिन यह एक समस्या में उत्पन्न कि यह बेहद जटिलता और परीक्षण की सतह क्षेत्र में वृद्धि हुई है, के साथ साथ यह अजीब तरह से WTForms विज्ञप्ति ड्राइव करेंगे (Django सिर्फ इस बात बदल गया है, अब आप एक नया WTForms जारी करने के लिए की जरूरत है)। तो 2015 में, हमने सभी एक्सटेंशन को अपने स्वयं के पैकेज में स्थानांतरित करने का निर्णय लिया ताकि वे अपने स्वयं के रिलीज शेड्यूल की अनुमति दे सकें।

    बजाय बल एक एकल पैकेज सब कुछ करने की कोशिश करता है कि उपयोग करने के लिए लोगों को, यह एक वास्तव में महान Flask-WTF, WTForms-Alchemy और WTForms-Django की तरह ठोस साथी संकुल के साथ उभरते कुछ नाम हैं पारिस्थितिकी तंत्र में बदल गया है।

    क्यों एचटीएमएल 5 प्रकार के दस्तावेज नहीं कर रहे हैं; अच्छा, यह एक चूक है। इसके अलावा, कुछ इतिहास: कुछ बिंदु पर हम एचटीएमएल कॉम्पैक्ट वाक्य रचना के लिए एक्सएचटीएमएल शैली से डिफ़ॉल्ट WTForms क्षेत्र उत्पादन बंद कर; लेकिन कोर फील्ड आउटपुट रखा। तो फिर हम लोगों को एक्सएचटीएमएल रूपों वापस योगदान, लोगों को एचटीएमएल 5 क्षेत्रों का योगदान, और लोगों को बधाई देने के लिए डिफ़ॉल्ट फ़ील्ड एचटीएमएल 5 प्रकार के लिए इस्तेमाल किया, सब के बाद हम एक प्रमुख संस्करण है, जो हमारे हाथ थोड़ा मजबूर भीतर पश्च संगतता की गारंटी मिल गया।


    मुझे पता है कि एक लंबे जवाब है, और हो सकता है कम जिस तरह से यह है कहने के लिए है: WTForms आम तौर पर बॉक्स, यह विन्यस्त और अपने उपयोग के लिए अनुकूलित किया जा करने के लिए डिज़ाइन किया गया है सबसे बाहर वेब चौखटे के साथ काम करता है; प्लग और सब कुछ के लिए खेलते हैं।

    +0

    वास्तव में उपयोगी और विस्तृत उत्तर के लिए धन्यवाद। दस्तावेज भी github पर है? मुझे त्वरित लिखने में खुशी होगी और "फील्ड" अनुभाग में एक उपखंड जोड़ें जो उल्लेख करता है कि HTML5 फ़ील्ड उपलब्ध हैं, और उन्हें कैसे पहुंचाया जा सकता है - यदि आप और अन्य रखरखाव संसाधनों पर बहुत कम हैं इसलिए। मुझे लगता है कि फिलहाल बहुत से लोग इन क्षेत्रों को दोबारा जोड़ने के लिए तीसरे पक्ष के पीपी पैकेज को ले जाने और स्थापित करने (या लिखने) के मार्ग का पालन कर रहे हैं। – Sixhobbits

    1

    WTForms HTML5 के लेखक यहां। प्रोजेक्ट के बारे में बस एक त्वरित सिर: " एक अर्थ में" बनाए रखा नहीं गया था, यह मेरे लिए काम करता था और मुझे कुछ भी जोड़ने की आवश्यकता नहीं थी। चूंकि वेनिला डब्ल्यूटीएफम्स ने उन सभी चीजों का समर्थन करना शुरू कर दिया है जिन्हें मैं सिर्फ सादा डब्ल्यूटीएफओआरएस का उपयोग करने की सलाह देता हूं।

    आप अपने विजेट के लिए कुछ स्वचालित रूप से प्रस्तुत करना उत्पन्न खोजशब्द चाहते हैं, वर्तमान WTForms HTML5 संस्करणों सभी क्षेत्रों और विजेट, कि अब भी WTForms द्वारा समर्थित हैं और बदले रूपों के लिए एक मेटा वर्ग, कि है कि हैंडल का उपयोग गिरा दिया।

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