2008-09-04 5 views
11

मैं बैकएंड और फ्रंटएंड के बीच तंग युग्मन के विवादास्पद विचार का दृढ़ आस्तिक हूं: मैं बैकएंड के बारे में मौजूदा, अंतर्निहित ज्ञान को उपयोगकर्ता इंटरफेस उत्पन्न करते समय स्वचालित रूप से उपयोग करने के लिए चाहता हूं। उदाहरण के लिए, यदि एक वर्चर कॉलम में अधिकतम 20 वर्ण हैं, तो वहां GUI को उपयोगकर्ता को संबंधित फॉर्म फ़ील्ड में 20 से अधिक वर्ण टाइप करने से रोकना चाहिए।तंग डीबी/जीयूआई युग्मन के लिए एक अजगर वेब अनुप्रयोग ढांचा?

और मेरे पास ओआरएम के लिए मजबूत एंटीपैथी है जो मेरी डेटाबेस टेबल को परिभाषित करना चाहता है, या कुछ हैक पर आधारित है जहां प्रत्येक तालिका को ORM की वजह से अतिरिक्त संख्यात्मक आईडी कॉलम होना चाहिए।

मैंने पाइथन डेटाबेस ढांचे में थोड़ा सा देखा है और मुझे लगता है कि मैं निष्कर्ष निकाल सकता हूं कि स्क्लेक्लेमी मेरी मानसिकता के लिए सबसे अच्छा फिट बैठता है।

अब, मुझे एक वेब अनुप्रयोग ढांचा खोजने की ज़रूरत है जो स्वाभाविक रूप से स्क्लेक्लेमी (या समकक्ष) के साथ फिट बैठती है और शायद युग्मन के लिए मेरी भूख के साथ भी।

  • स्वचालित रूप से एक उपयुक्त प्रपत्र विजेट का चयन करें: "वेब अनुप्रयोग फ्रेमवर्क" के साथ, मेरा मतलब है इस तरह के Pyhons, Django, TurboGears, web2py, आदि

    उदाहरण के रूप में उत्पादों/परियोजना है, यह आदर्श रूप में सक्षम होना चाहिए किसी दिए गए कॉलम में प्रवेश करने वाले डेटा के लिए ऐसा करने के लिए कहा गया है; उदाहरण के लिए, यदि कॉलम में 10 अलग-अलग मानों वाले कॉलम के लिए एक विदेशी कुंजी है, तो विजेट को 10 संभावित मानों को ड्रॉपडाउन

  • स्वत: जेनरेट फ़ॉर्म सत्यापन कोड उत्पन्न करना चाहिए जो अंतिम उपयोगकर्ता त्वरित त्रुटि प्रतिक्रिया देता है स्ट्रिंग एक क्षेत्र के बारे में जो एक पूर्णांक कॉलम में खत्म करने के लिए है, आदि में दर्ज किया जाता
  • डेटा के लिए एक कैलेंडर विजेट जो एक तिथि कॉलम में खत्म हो जाएगा स्वत: जनरेट
  • संकेत नहीं NULL बाधाओं जावास्क्रिप्ट के रूप में जो किसी संबंधित इनपुट फ़ील्ड में खाली या सफेद स्थान-केवल डेटा के बारे में शिकायत करता है
  • जो प्रासंगिक (सरल) चेक-बाधाओं से मेल खाता है जावास्क्रिप्ट सत्यापन कोड उत्पन्न
  • , यह बचने एसक्यूएल इंजेक्शन करने के लिए आसान तैयार बयान और/या बाह्य व्युत्पन्न डेटा के सत्यापन का उपयोग करके
  • यह से बचने के लिए आसान बनाने के क्रॉस साइट स्क्रिप्टिंग स्वचालित रूप से बाहर जाने वाले तार से बचने जब बाधा नाम की उचित
  • मेकअप उपयोग कुछ हद तक उपयोगकर्ता के अनुकूल त्रुटि संदेश मामले में एक constrataint उल्लंघन किया जाता है उत्पन्न करने के लिए

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

क्या इस तरह का ढांचा पाइथन (या किसी भी भाषा के लिए, उस मामले के लिए) के लिए मौजूद है? यदि नहीं: यदि मैं उपर्युक्त सुविधाओं के हिस्सों को स्वयं जोड़ना चाहता हूं तो कई पाइथन वेब एप्लिकेशन ढांचे में से कौन सा तरीका कम से कम होगा?

उत्तर

3

आपको डीजेंगो और विशेष रूप से इसके newforms और admin मॉड्यूल पर एक नज़र रखना चाहिए।न्यूफॉर्म मॉड्यूल उपयोगकर्ता के लिए त्रुटि संदेशों/पृष्ठों की स्वचालित पीढ़ी के साथ सर्वर साइड सत्यापन करने की एक अच्छी संभावना प्रदान करता है। AJAX सत्यापन जोड़ना भी possible

+0

क्या Django SQLAlchemy के साथ अच्छी तरह से खेलते हैं, हालांकि? आखिर में मैंने सुना होगा, Django + SA शाखा moribund था, और मूल सवाल एसए निर्दिष्ट पसंद के ओआरएम के रूप में निर्दिष्ट किया। –

1

मेरा मानना ​​है कि Django मॉडल समग्र प्राथमिक कुंजी का समर्थन नहीं करता है (documentation देखें)। लेकिन शायद आप Django में SQLAlchemy का उपयोग कर सकते हैं? एक google search इंगित करता है कि आप कर सकते हैं। मैंने Django का उपयोग नहीं किया है, इसलिए मुझे नहीं पता।

मैं सुझाव है कि आप पर एक नज़र डालें:

मैं उपरोक्त परियोजनाओं में से किसी के किसी भी गहरा ज्ञान नहीं है। मैं अपने स्वयं के अनुप्रयोगों में से किसी एक जैसा कुछ जोड़ने की कोशिश करने की प्रक्रिया में हूं, जैसा कि मूल प्रश्न का उल्लेख है। उपर्युक्त सूची केवल रोचक परियोजनाओं की एक सूची है जिसे मैंने भर दिया है।

अजगर के लिए वेब एप्लीकेशन फ्रेमवर्क के रूप में, मैं TurboGears 2. अनुशंसा करते हैं ऐसा नहीं है कि मैं अन्य चौखटे से किसी के साथ किसी भी अनुभव है, मैं तो बस TurboGears की तरह ...

मूल प्रश्न के लेखक एक समाधान मिल जाता है तो यह है कि अच्छी तरह से काम करता है, कृपया इस धागे को अद्यतन या उत्तर दें।

1

TurboGears वर्तमान में SQLObject डिफ़ॉल्ट रूप से उपयोग करता है लेकिन आप इसे SQLAlchemy के साथ उपयोग कर सकते हैं। वे कह रहे हैं कि टर्बोगियर्स (1.1) की अगली बड़ी रिलीज डिफ़ॉल्ट रूप से स्क्लेक्लेमी का उपयोग करेगी।

1

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

हमने कभी भी एक ढांचा नहीं ढूंढ पाया है जो हम समझौता किए बिना ठीक से करना चाहते हैं और हमारे लिए सही काम करने वाले सभी बिट्स प्राप्त करना पसंद करते हैं और हमारे स्वयं के गोंद लिखते हैं।

चरण 1. प्रत्येक डेटा प्रकार के लिए sqlAlchemy.types.INTEGER इत्यादि। एचटीएमएल में एक अतिरिक्त फ़ंक्शन जोड़ें (या शायद कई HTMLReadOnly, HTMLAdmin जो कुछ भी संपादित करें) और बस HTML के लिए टेम्पलेट लौटाएं, अब आपके पास भी नहीं है यह सुनिश्चित करने के लिए कि आप किस डेटा प्रकार को प्रदर्शित करते हैं, यदि आप बस एक पूरी टेबल को थूकना चाहते हैं तो आप बस कर सकते हैं (चीता टेम्पलेट के रूप में या आपका टेम्पलेट इंजन कभी भी क्या है)।

चरण 2

<table>

<tr>

#for $field in $dbObject.c:

<th>$field.name</th>

#end for

</tr>

<tr>

#for $field in dbObject.c:

<td>$field.type.toHtml($field.name, $field.value)</td>

#end for

</tr>

</table>

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

चरण 3 शुक्रवार को तीसरे चरण की आवश्यकता को खोला गया, फाइलों को अपलोड करना चाहता था, जैसा कि आपको पता है कि वर्चर डेटा प्रकार डिफ़ॉल्ट टेक्स्ट बॉक्स हैं। कोई पसीना नहीं, मैं सिर्फ वर्चर से फाइलपाथ (वचर) तक अपनी टेबल परिभाषा में पंक्ति वर्ग को ओवरराइड करता हूं, जहां एकमात्र अंतर फ़ाइलपैथ के लिए HTML विधि से अलग था। बेकार ढंग से काम किया।

सभी ने कहा कि, अगर वहाँ एक सिकुड़ने वाला एक छोटा सा है जो आप चाहते हैं, तो इसका उपयोग करें।

अस्वीकरण: यह कोड आधी रात के बाद स्मृति से लिखा गया था और शायद एक कार्यशील वेब पेज का उत्पादन नहीं करेगा।

एक क्षेत्र प्रकार और उसके प्रमाणकों के आधार पर यह उचित विजेट के साथ क्षेत्र प्रस्तुत करना होगा:

5

web2py आप क्या पूछना के सबसे करता है। आप

db.table.field.widget=... 

और तृतीय पक्ष विजेट का उपयोग कर ओवरराइड कर सकते हैं।

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

IS_EMPTY_OR(...) सत्यापनकर्ता है।

डीएएल एसक्यूएल इंजेक्शन रोकता है क्योंकि डीबी में जाने पर हमेशा से बच निकलता है।

web2py क्योंकि में {{= चर}}, 'चर' जब तक अन्यथा निर्दिष्ट बच रहा है {{= एक्सएमएल (चर)}} या {{= एक्सएमएल (चर, स्वच्छ = सच)}}

XSS से बचाता है

त्रुटि संदेश उदाहरण

db.table.field.requires=IS_NOT_EMPTY(error_message=T('hey! write something in here')) 

टी अंतर्राष्ट्रीयकरण के लिए है के लिए सत्यापनकर्ता के तर्क हैं।

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