الجسر بين بيثون وريكتالبومة هي إطار نانو يمكن دمجه في أطر أخرى.
صورة من sova.online ، تعمل فيها 3 خوادم http:
http://sova.online/ - فقط فالكون
http://sova.online:8000/ - جانغو فقط
http://sova.online:8001/ - فقط Python (تسجيل الدخول: 1 ، كلمة المرور: 1)
هناك رموز المصدر وإرشادات التثبيت. لا يوجد اعلان هناك.

إن فكرة إنشاء مواقع في Python مع عرض React ليست جديدة. هناك إطار رائع
https://plot.ly/products/dash/ ، لماذا تفعل شيئًا آخر؟
شرح: لم يتم تصميم Owl لتطوير موقع الويب. هذه أداة لاستبدال العملاء الكثيرين بتطبيقات تعمل عبر المتصفح (تطبيقات سطح المكتب).
- ما هو عميل الويب؟
- كلا. هذا ليس عميل ويب. هذا تطبيق متصفح.
"أنا لا أفهم."
- لسوء الحظ ، لا يفهم العديد من المطورين.
بشكل عام ، عملت بنشاط مع العديد من تطبيقات الإنترنت.
العميل عبر الإنترنت لبنك Ugra (تم إغلاق البنك).لقد كان تطبيقًا جيدًا ، ولكنه كان تطبيق Java صغيرًا ، أي أطلق العميل سميكة من المتصفح. وبنك أوجرا ، وتطبيقاته الصغيرة في الماضي.
عميل VTB-24 Bank عبر الإنترنت (البنك مغلق).أنا إنساني ، ولكن بعد العمل مع هذه المعجزة ، بدأت الأفكار القاسية تظهر مثل: "إجبار المطور على تسجيل 1000 شيكات راتب فيها".
علاوة على ذلك ، بصفته عميل ويب ، فهو جميل. تفتح الرسوم المتحركة على الهاتف المحمول. واو! رائع!
سألت صديق محاسب: كيف تعمل معه؟
تقول: عظيم! أقوم بتحميل البيانات في 1s ، وفي 1s أعمل ، أقوم بتحميل النتائج مرة أخرى.
عميل سبيربنك عبر الإنترنتزبون مرضي ، يمكنك العمل. عندما طُلب مني تقييمه ، أعطيته 3 نقاط من أصل 5 وأعطيته قائمة من التعليقات. هذا مع مدفوعاتي العشرة شهريًا. من المرجح أن يقوم أولئك الذين يقدمون 100 فاتورة في اليوم بتحميل المعلومات.
سداد دفعة.

المنطقة الخضراء ، التي تحتل 20٪ من الشاشة ، هي القائمة. لا يتدخل فقط (الموضع: ثابت) ، فهو يقول أن المطور ليس محترفًا. إذا بدأت في إنشاء دفعة ، فيجب أن تكون الشاشة. 3 أزرار: "إنشاء" و "حفظ كقالب" و "إلغاء". هذه الأزرار (لسبب ما أدناه). هذه ليست سبا متعدد الصفحات: إذا قمت بالنقر فوق عنصر القائمة ، سيتم فقدان البيانات في النموذج.
الشخص الذي فعل ذلك لن يفهم حتى ما هو الضرب: "عادة ما يفعله الجميع ، مثل هذه المكتبة ، يعمل الناس ...". وهو على حق. تحتاج إلى أن تسأل من مدير المشروع ، وبالنسبة للمدير ، فإن الشيء الرئيسي هو قواعد البيانات والطبقات في النموذج المفاهيمي. والأشكال - سنقوم بتوظيف الأولاد ، سوف يرسمون. وربما فخورون بهذا الاختراق.
طوابق تجارية (5 قطع ، 44 قانون اتحادي)هذه تطبيقات حقًا (وليست عملاء ويب). لكني لا أحب وحدات التحكم الميدانية.
أمثلة:

إنه محاذاة بشكل غريب ، ومن الواضح أن عرض الحقل غير كافٍ ، ولا يوجد ارتفاع تلقائي في حقل الإدخال.
مثال آخر. لا يوجد نموذج dd.mm.yyyy في حقل "تاريخ النشر" ، التقويم خاطئ ، رمز التقويم مخيف:

قائمة على rts-tender: يوجد الإدخال الحالي المظلل بالألوان ، والأسهم يمكن أن تتحرك حول القائمة ، ولكن لا يوجد تمرير تلقائي (يمكنك الهروب بعيدًا عن حدود الشاشة) ، لا Enter ولا مفتاح المسافة يفتح ارتباطًا ، لا ترتبط علامة التبويب بالسجل الحالي. على الرغم من أنه يمكنك فقط فتح الرابط باستخدام الماوس ، إلا أنني أقيم عنصر التحكم باستخدام علامة الجمع. هذه الوظيفة (تذكر وتمييز المستند الحالي) ليست كافية بالنسبة لي في mail.ru
يبدو أن الأشياء الصغيرة. لكن التطبيق الاحترافي يختلف عن شبه الاحترافي في التفاصيل. لا يعطي المستخدم النهائي أي قاعدة بيانات لديك وعدد الطبقات في النموذج المفاهيمي. يعمل مع أشكال الشاشة ولديه 3 متطلبات: وظيفية ومريحة وسريعة.
لسوء الحظ ، يتم تحديد اختيار النظام من قبل متخصصي تكنولوجيا المعلومات والرؤساء الذين لم يعملوا مع النظام ولن يعملوا. سيقدرون السرعة ، سيقدرون الوظائف كما يفهمونها ، ولا يهتمون بالراحة ، والأهم من ذلك ، أن تكون جميلًا.
لم يخترع بافيل فاليريفيتش دوروف شبكة اجتماعية أو رسولًا. قام بما يحتاجه المستخدمون بشكل مريح وجميل. وقدر الناس هذا ، بما في ذلك ماديًا.
البومة هي أداة لبناء واجهة احترافية.
ماذا يعني هذا ، على سبيل المثال ، EDMS.
هناك EDMS ، لديها 3 مجموعات مستخدمين:
الرؤساء
أخصائيو إعداد المستندات
كتبة المكتب.
الرؤساء ، إنهم مثل الأطفال. يجب أن تكون بسيطة وجميلة. من الناحية المثالية زر واحد وحقل واحد. ولإظهار أكثر من ذلك بقليل. عميل ويب ، وبطبيعة الحال ، عميل هاتف محمول لاظهاره.
المتخصصين. عميل الويب ، عبر الشبكة الاجتماعية / الارسال. لا تنس أن هناك العديد من المتخصصين ويجب تدريبهم. كلما كانت البيئة مألوفة لهم ، كان ذلك أفضل. سيكون عميل الهاتف المحمول مفيدًا أيضًا إذا سمحت خدمة الأمن بذلك.
كتبة المكتب. هذا هو المكان الذي تكون فيه البومة في متناول اليد. كتبة المكاتب هي مجموعة من المستخدمين الذين يشكلون النظام. يمكن لأي شخص آخر أن يمرض / يذهب في إجازة / يتوقف عن استخدامه - ستعمل EDMS. إذا توقف التسجيل ، فسيكون كل شيء على ما يرام.
الأعمال الورقية هي ناقل ، وهنا كل شيء مهم ، أي تافه: الخطوط ، الألوان النصفية ، التعبئة التلقائية ، التحقق من القيم ، سهولة الإدخال ، إلخ.
EDS "حالة". مكاتب المؤدين مصنوعة على عميل الويب ، والمكتب هو عميل سمين. كل شيء على ما يرام ، لكنه سيعمل حتى تحظر الحكومة Windows من الوكالات الحكومية. أنا أحب Win 7 ، ولكن إذا كنت الحاكم ، فقد تم تنشيط سوقها بأوامر جديدة ، وبقي MS في ذاكرة مشرقة. بالمناسبة ، في 6 ديسمبر ، وقع أنطون سيلوانوف على
توجيه بشأن الانتقال إلى البرامج المحلية.
Sova.onlineكيف تفتح البومة نموذجًا.
بدون صفحات متعددة.
العنصر المركزي في البومة هو مكون الوثيقة. بالضغط على ctrl-U في صفحة البداية ، سترى كل ما تحتاجه لإنشاء كائن من فئة المستند:
- حقول البيانات في قاعدة البيانات ؛
- رابط النموذج المراد عرضه ؛
- dbAlias ، unid - للعمل مع قاعدة البيانات ؛
- شيء آخر هناك.
إلى حد ما ، الوثيقة هي تناظرية من نموذج Redux.
يتم تحميل النموذج كسلسلة JSON ، ثم يصبح القاموس السابق كائنًا له نمط ، className وصفيف (قائمة) من العناصر. سيتم إدراج المصفوفة في العنصر بالمعرف = الجذر في النموذج
<div style className>……</div>
عناصر الصفيف هي كائنات تصف العلامات.
<div>, <a>, <img>, <button>
أو صفيف أو مكونات.
وظيفة الملاكمة هي المسؤولة عن تحليل المصفوفة. إذا تم العثور على عنصر يحتوي على صفيف ، فسوف يطلق على نفسه بشكل متكرر.
إن سرة الأرض هي بالطبع شعبة.
في أبسط الحالات ، يكون هذا السطر: dict (div = 'Hello'، className = 'h2')
ولكن قد يكون هناك صفيف (صفيف من الصفائف):
def style(**par): return {'style': {**par}} dict(
هناك 3 لوحات (كل منها في ملف منفصل: subFormTop.py ، وما إلى ذلك).
يُرجع subFormTop.panel () صفيفًا لإنشاء اللوحة العلوية.
يتم دمج subFormLeft.panel () و subFormRight.panel () في سلسلة ('className': 'row') ووصف اللوحين الأيمن والأيسر.
تم التعليق على subFormDown.panel () (غير مفيد).
قد يبدو الأمر معقدًا. ولكن هذا هو Python: يمكن تبسيط كل شيء.
مثال على نموذج من مجلة "التقارير". تعرض دالة labField (label ، DB_field_name) صفيف من قواميس (صف الجدول): القاموس الأول هو {'div': label} ، والثاني {'field': [DB_field_name، 'tx']}.
div = [ docTitle(''), dict ( wl='40mm', className='cellbg-green', div=_table( labField('', 'nodafd'), labField(' ', '_STARTINGTIME'), labField('', '_ENDTIME'), labField('', 'CREATOR'), labField('', 'REPORTCAT'), labField('', 'REPORTNAME'), labField('', 'REPORTTITLE'), labField(' ', 'dt1'), labField(' ', 'dt2'), labField(' 2', 'dt3'), labField(' 2', 'dt4'), labField('', 'LBYEARS'), labField('', 'GRGROUP'), labField(' ', 'QUERYMAIN'), labField('', 'NOTES'), )), sent(), ]

أمثلة من sova / api / Forms / home / top.py (بدءًا من sova.online):
قاموس بيثون
{'a': 'React v16'، 'href': 'https://reactjs.org'}
يولد مكون رد فعل واضح
<a href={'https://reactjs.org'}>React v16</a>
Img أذكى من المعيار - في الدعائم يمكنك تحديد href والهدف:
بايثون:
dict (img = 'image؟ response.ico'، style = {'width': 16}، href = 'https: //reactjs.org')
جزء من المحلل اللغوي الذي يحول مصفوفة من الكائنات إلى مكونات (boxing.js):
if ( td.img ) {
اكتب في محرك البحث "مكتبة مكونات التفاعل". والنتيجة متوقعة - كثيرًا. لكن كل هذه الوفرة هي لمواقع الويب ، وليس للتطبيقات:
ربما تكون منطقة النص الذكي هي عنصر التحكم الوحيد الذي يناسبني.
تحديد رد الفعل - تبسيط وإعادة تحديد القائمة المنسدلة
منتقي البيانات / التقويم - لم يجد أي شيء مناسب. كتب نفسه ، مع أخذ G.Chrome المدمج كعينة.
تحميل / تنزيل - كتب شيء خاص بي.
إيمهو: مواقع الويب لها مستقبل حزين. ستتوقف الغالبية العظمى من المستخدمين في المستقبل القريب عن استخدام المتصفحات (أو توقفت بالفعل). سينمو الهاتف مع الجهاز اللوحي ، وستلبي مجموعة واحدة من 10 تطبيقات الاحتياجات بالكامل.
لقد قابلت بالفعل مبرمجين مرتين لا يعرفون كيفية كتابة عنوان بريد إلكتروني بشكل صحيح. لماذا يجب أن يتذكروا ما لا يستخدمونه. العالم يتغير.
في Owl ، وحدات التحكم ليست مثالية ، ولكنها مصممة للمشغل ، وليس لمستخدم الويب.
كمثال ، نموذج "علامة النقل". شكل عالمي إلى حد ما ، يستخدم حيث يوجد رئيس. الحقول التي تتحكم في الاختباء محاطة بدائرة باللون الأحمر في لقطة الشاشة. يتم فتح قرارات إضافية تلقائيًا عند ملئها ، إذا كان هناك في الجزء المنطوق العديد من التعليمات لمجموعات مختلفة من فناني الأداء بشروط مختلفة. فصلان لكل مجموعة: الفترة الأولى إلى المؤدي الأول ، والمدة الثانية للمنفذين المشاركين.

يمكنك لمس النموذج
هناوحدة التحكم هي مكون تفاعل مرتبط بمجال قاعدة البيانات.
يوجد وصف مفصل لوحدات التحكم مع القدرة على التحقق من تشغيلها على Sova.online.
انتبه إلى أنواع rtf و json. يتم عرض Rtf كنص ، ولكن إذا كان هناك بنية {_ {object} _} في النص ، فسيقوم Owl بتنفيذ json.parse لهذا البناء وإضافة النتيجة إلى النموذج. يجب أن يخزن حقل من نوع json وصفًا لصفيف عناصر الترميز: [{ele1}، {ele2}، ...]. يتم تنفيذ json.parse قبل التقديم.
تسمح لك الحقول التي تحتوي على هذه الأنواع بتخزين الترميز في قاعدة البيانات أو في الملفات. مفيد لإعداد التقارير وكتابة الوثائق.
قائمة وحدات التحكم لجميع أنواع الحقول (controlers.js):
export const controller = prop => { switch (prop.type) {
يتطلب التطبيق آلية للتعامل مع وحدات التحكم.
في البومة ، يتم تخزين جميع وحدات التحكم في المستندات في متغير المستند
هذا التسجيل
لم أجرؤ على استخدام المرجع بسبب الشائعات بأن هيئة التحرير ستلغيه.
قد يكون لدى جهاز التحكم الواجهات التالية:
getValue (المعلمة)
setValue (القيمة ، المعلمة)
setFocus ()
قائمة التغيير ()
من أجل الوصول إلى الحقل المطلوب ، هناك طرق توثيق
getField (fieldName، param)
setField (fieldName، value، param)
changeDropList (اسم الحقل ، معلمة)
setFocus (fieldName)
بالنسبة للحقول من نوع FileShow ، توجد طريقة fileShow ['FILES1 _']. HasAtt () ، حيث FILES1_ هو اسم منطقة الملف. إرجاع صحيح إذا كان هناك مرفقات. في علامة نقل هذه المناطق 2.
يمكن للمتحكمين إنشاء حدث إعادة حساب. إذا تم تسجيل معالج لهذا الحقل ، سيتم تنفيذه. توجد المعالجات في ملفات js قابلة للتحميل.
مثال ووصف مبسط إلى حد ما:
هناك نموذج "علامة النقل" (o.py). يحتوي على ملف o.js الذي تم تحميله
يتم تسجيل معالجات o.js
recalc: { PROJECTO: doc => doc.forceUpdate(), WHOPRJ2: doc => doc.forceUpdate(), WHOPRJ3: doc => doc.forceUpdate(), … }
كما تم تحديد شروط الإخفاء (المشروع ، المرجع ، prj1 ، prj2 ... prj5 هي خاصية "name" في وصف div):
hide: { project: doc => !doc.getField('projectO'),
كيف يعمل: حقل PROJECTO هو مربع اختيار ، عندما يتم تغيير القيمة ، تقوم وحدة التحكم بإنشاء حدث إعادة حساب ، ويدعو المستند معالج recalc.PROJECTO (هذا).
يستدعي المعالج ببساطة forceUpdate () لإعادة رسم المستند.
عند إعادة الرسم ، يتم التحقق مما إذا كان للمكون الموجود في الدعائم اسم ، وما إذا كانت هناك وظيفة إخفاء [props.name] لهذا الاسم ، وما إذا كانت ستعود صحيحة.
prj3: doc =>! doc.getField ('projectO') || (! doc.getField ('whoPrj2') &&! doc.getField ('whoPrj3'))
إخفاء الدقة الثالثة (المنطقة التي تحتوي على props.name === 'prj3') إذا كان مربع الاختيار "projectO" مغلقًا أو لم يتم إدخال المنفذين في حقلي القرارين 2 و 3 (كلا الحقلين "whoPrj2" و "whoPrj3" فارغان).
اسم الحقل عند استدعاء الدالات غير حساس لحالة الأحرف.
WHOPRJ2 هو مربع تحرير وسرد ؛ عند تحديد قيمة ، ستنشئ وحدة التحكم أيضًا حدث إعادة حساب ، والذي سيؤدي أيضًا إلى إعادة رسم. باختيار فنان في القرار الثاني ، ستفتح الثالث.
في ملفات js المحملة ، يمكنك:
- إدارة الاختباء ؛
- إدارة القراءة فقط ؛
- الاستجابة للتغيرات الميدانية ؛
- تنفيذ أوامر زر.
- التحقق من صحة الحقول والنماذج قبل الحفظ ؛
تنزيل ملف الاستمارة 'fo':
window.sovaActions = window.sovaActions || {}; window.sovaActions.fo = {
التحقق من صحة الحقول - دالة تُرجع فارغة إذا كان كل شيء على ما يرام ، أو رسالة حول الخطأ. سوف تركز البومة على حقل غير صالح.
التحقق من صحة النموذج - وعد. في المثال ، لا توجد فحوصات (يتم استدعاء نعم دائمًا) ، يتم فعل شيء ما فقط قبل الإرسال إلى الخادم.
في التحقق من صحة شكل redux يتم من خلال trow - نوع من الوحشية.
بالنسبة لأولئك الذين ليسوا على دراية بالوعود ، مثال على أبسط: const confirmDlg = msg => new Promise((ok, cancel) => confirm(msg) ? ok(' ') : cancel(' cancel')); confirmDlg(' ') .then( s => console.log(s)) .catch( s => console.log(s));
تحتوي فئة المستند على عدة أوامر محددة مسبقًا يمكن استخدامها في الأزرار:
تحرير: قم بالتبديل إلى وضع تحرير النموذج
حفظ: حفظ النموذج
إغلاق: أغلق النموذج
saveClose: احفظ النموذج وأغلقه
prn: طباعة نموذج باختيار قالب للطباعة
docOpen: مستند مفتوح
dbOpen: سجل مفتوح
xopen: عنوان url مفتوح
newDoc: إنشاء مستند جديد بالصيغة المطلوبة
واجهة برمجة التطبيقات ذات نموذج Redux أكثر ثراءً - في البومة فقط ما هو ضروري.
متعدد الصفحات.تنشئ فئة الوثيقة كائنًا (نموذجًا) مضمنًا في عنصر.
<div id="root"></div>
.
سوف نسميها "الوثيقة الجذرية". إذا قمت بإضافة عنصر إلى المستند الجذر
<div style = {{position: 'absol'، zIndex: 999}} /> ، يمكنك أيضًا إدراج كائن مستند آخر فيه.
ماذا تفعل مع معالجات الأوامر القابلة للتحميل؟ الأمر بسيط: لكل نموذج معالج خاص به (js الخاص به) ، ويجب أن يقوم المستند الجذر بتحميل تلك التي قد تكون مطلوبة.
مثال لصفحة البداية sova.online (home.py)
يقوم النموذج home.py ، من أجل توضيح طبيعة الصفحات المتعددة ، بفتح المستندات باستخدام النماذج "rkckg" و "outlet" و "outlet.gru" و "o".
لكي تعمل جميع النماذج بشكل صحيح ، تحتاج إلى تسجيل نصوص برمجية لهذه النماذج في home.py:
javaScriptUrl = ['jsv?api/forms/rkckg/rkckg.js', 'jsv?api/forms/outlet_gru/outlet_gru.js', 'jsv?api/forms/outlet/outlet.js', 'jsv?api/forms/o/o.js', 'jsv?api/forms/home/home.js']
منذ استدعاء أي وظيفة للمعالج ، تقوم المعلمة الأولى بتمرير الارتباط إلى المستند ، سيتم تنفيذ الإجراءات مع المستند المطلوب.
OOP ولا معجزات.
رد فعل - وليس رد فعل
لقد وصفت بالفعل نموذج التقرير. يفتح من مدير التقارير (السهم "رد فعل") ويصف المعلمات لجمع التقرير.

التقارير نفسها (السهم "لا يتفاعل") يتم تخزينها في وثائق ثانوية على شكل "تقرير" في شكل ملحقات html. لقد انخرطنا في إعداد التقارير عندما لم يكن React موجودًا ، وتبين أن نموذج "التقرير" بسيط (20 سطرًا من html و 15 سطرًا ببساطة js) ، لماذا تغير ما يعمل لمدة 8 سنوات.
افتح مدير التقارير.يتكون نموذج التقرير من 4 أزرار و iframe. تستبدل البومة قبل فتح المستند src = "" بسطر عنوان url لتنزيل مرفق html في iframe ، ويقوم المتصفح بالباقي.
أزرار EXCEL / WORD متشابهة: أدخل أزرار url للتنزيل باسم الملف "report.html.xls" أو "report.html.doc" ونوع mime المقابل في المكان الصحيح. ويتم الباقي بواسطة Excel / Word ("هذه الحيوانات الذكية تفهم تمامًا كل ما تريده منها").
من do_get.py:
downloadUrl = '/download/' + fn + '?' + '&'.join([d.db.alias, d.unid, idbl, fsName, fzip, ctype, flen]) excel = '/download/%s.xls?%s' % (fn, '&'.join([d.db.alias, d.unid, idbl, fsName, fzip, 'application/x-excel', flen])) word = '/download/%s.doc?%s' % (fn, '&'.join([d.db.alias, d.unid, idbl, fsName, fzip, 'application/msword', flen])) html = html.replace('src=""', 'src="%s"' % downloadUrl).replace('openExcel', excel).replace('openWord', word)
عند فتح html في Excel / Word ، هناك اختلافات عن المتصفح ، ولكنها صغيرة. والمقال ليس عن ذلك.
اصنع شكل من الصفر.بيانات المصدر:
هناك 3 وظائف
def snd (* msg، cat = 'snd'):
def err (* msg، cat = 'all'):
def dbg (* msg، cat = 'snd'):
، والتي يتم توزيعها بشكل أو بآخر بالتساوي في جميع أنحاء التعليمات البرمجية وكتابة رسائل الخطأ وغيرها من حماقة ملف السجل.
يتم تمرير تنسيق الرسالة إلى التسجيل.
'٪ (asctime) s٪ (اسم المستوى) s [٪ (name) s]٪ (message) s'
الملف مليء بالرسائل
...
09/02/2018 17:50:07 DEBUG [http-server] addr ('127.0.0.1'، 49964) ، "GET / arm HTTP / 1.1" 200 -
09/02/2018 17:54:07 INFO [مساحة حرة] يتم حفظ المرفقات في ". \ DB \ ملفات" مجانية 68557 ميجا بايت
09/02/2018 17:58:07 خطأ [do_get.py] getScript: [Errno 2] لا يوجد مثل هذا الملف أو الدليل: 'sova / api / Forms / o / oo.js'
...
التاريخ والوقت ، ثم المستوى ، ثم بين قوسين معقوفين فئة داخل المستوى ، ثم رسالة.
التحدي:
قم بعمل صفحة لعرض ملف السجل. ما النوع

سنطلق على النموذج "lm" ، وسيتم تشكيله بواسطة وظيفة الصفحة في وحدة api / Forms / lm.py
def page(dbAlias, mode, userName, multiPage): return dict( style(background='url(/image?bg51.jpg)', backgroundSize='100% 100%'), div=[ dict( style(width='200px', float='left', background='rgba(210,218,203, 0.5)', padding='0 5px'), div=[ _field('type', 'list', [' |all', '|err', '|info', '|debug'], saveAlias=1, **style(margin='10px auto', width=170, height=110) ), _field('cat', 'list', 'TYPE_ALIAS|||api.get?loadDropList&logger|keys_{FIELD}', listItemClassName='repName', listItemSelClassName='repNameSel', **style(height='calc(100vh - 133px)', overflow='auto') ) ], ), _field('msg', 'fd', br=1, **style(overflow='auto', height='100vh', font='bold 12px Courier', background='rgba(255,255,255, 0.8)') ), ] )
يوجد على الجانب الأيسر حقلين ، مع نوع القائمة: النوع والقط (نوع الرسالة والفئة).
يوجد على اليمين حقل msg واحد من النوع fd (forDisplayOnly).
تتم كتابة أنواع الرسائل في وصف الحقل (['All log | all'، 'Errors | err'، ...)،
يتم سحب الفئات بواسطة xhr من القاموس العالمي بمكالمة url صعبة:
api.get؟ loadDropList & logger | keys_err سيعود بتنسيق json بمصفوفة (قائمة) من الفئات من القاموس العالمي. شيء من هذا القبيل بشكل جيد ("المسجل" ، "keys_err").
يتم إنشاء الرسائل عند فتح المستند بواسطة وظيفة queryOpen في lm.py
def queryOpen(d, mode, ground): logParser() ls = well('logger_all', 'AL L') s = '\n'.join(reversed(ls)) d.msg = s d.type_alias = 'all'
يقرأ logParser ويوزع ملف السجل. يحلل النتائج إلى عدة صفائف ويحفظها في القاموس العالمي. لا شيء مثير للاهتمام: 2 حلقة إعادة بسيطة ومكرر.
وظائف للعمل مع القاموس العالمي:
toWell (o، key1، [key2]) - حفظ الكائن "o" في القاموس العام
حسنًا (key1 ، [key2]) - خذ كائنًا من القاموس العالمي بمفتاح (بواسطة مفتاحين).
هذا يكفي للرسم الأول. لكي تتمكن من عرض رسائل من النوع والفئة المطلوبة ، من الضروري عمل شبيبة قابلة للتحميل.
في lm.py أضف السطر
javaScriptUrl = 'jsv؟ api / Forms / lm / lm.js'
وإنشاء lm.js:
window.sovaActions = window.sovaActions || {}; window.sovaActions.lm = {
يسحب getLogData الرسائل من الخادم من النوع والفئة المطلوبة:
def getLogData(par, un): lg, _, cat = par.partition('|') msg = well('logger_' + lg, cat) return 200, 'text/html; charset=UTF-8', '\n'.join(reversed(msg))
يمكنك الاستمتاع
بالنموذج هنا .
في البداية ، تم تسجيل الدخول بناءً على وحدة تسجيل الدخول القياسية
باستخدام logging.FileHandler و .addHandler و getLogger و setFormatter الآخرين.
كيف تدرس. ولكن في نفس الوقت كان عربات التي تجرها الدواب. يمكنك رمي الحجارة ، ولكن عندما رميت التسجيل وبدأت للتو الكتابة إلى ملف ، أصبح الرمز أقصر وأكثر قابلية للفهم واختفت مواطن الخلل.
متضمن هو خادم Wsgi متعدد الترابط مكتوب ذاتيًا مع إذن Digest. هذا ليس للمواقع. لماذا كان بحاجة إليه على الإطلاق؟
العميل لديه 40 محلف. الأشخاص ، في معظم الحالات 1-2-3 أشخاص يعملون مع النظام. يحظر تخزين البيانات على الإنترنت. الكل يفوز 7. يتطلب سهولة التثبيت والتكوين.
الحل: باستخدام cx-Freeze و Inno Setup ، نقوم بعمل المثبت ، وتشغيله على جهاز الكمبيوتر الأكثر مسؤولية والحصول على خادم mini-http للشبكة المحلية ، بدءًا من خدمة Windows. لا أكثر. لا يمكنك استخدام wsgiref.simple_server أو wsgi_Werkzeug المدمج في Python ، لأن هم أحادي الخيوط: بينما يفشل طلب واحد ، ينتظر الآخرون.
من غير المحتمل أن أفاجئ أي شخص بالإبلاغ عن أن Django WSGIServer / 0.2 CPython / 3.5.3 المدمج أسرع عدة مرات من Python المكتوب ذاتيًا. فقط هذا لا يهم - يتم تخزين النماذج والأدلة مؤقتًا على العميل ، ويتم نقل بيانات قاعدة البيانات فقط بسرعة كبيرة عبر الشبكة المحلية.
هناك سبب آخر: يمكن لتطبيق سطح المكتب الوصول إلى موارد الكمبيوتر (التوقيع الرقمي والملفات والماسح الضوئي ...). من أجل الحصول على نفس الوصول من المتصفح ، يجب عليك إما كتابة مكون إضافي أو قطع الاتصال بخادم http صغير في الخدمات ، والذي يمكن أن يتعرف عليه من الخادم الرئيسي وتنفيذ الإجراءات اللازمة على المنطقة المحلية.
لا تستخدم البومة أدوات إطار العمل للعمل مع قاعدة البيانات. في دليل dbToolkit ، يوجد شيء مشابه في البنية لـ MongoDB (أو Lotus Notes) في SQLite3:
فئة الكتاب - ديسيبل (في مصطلحات MongoDB و Lotus Notes)
Class DocumentCollection - مجموعة من الوثائق من الكتاب
فئة الوثيقة هي وثيقة (كائن يحتوي على أي عدد من الحقول).
التثبيت:قم بتنزيل
owl.zip من sova.online
يحتوي الأرشيف على دليل البومة ، الذي يمكنك من خلاله تشغيل البومة من django أو الصقر أو بدون أطر.
تنزيل ، فك ضغط.
تثبيت Python3 (3.5+)
1. البومة - بدون أطر. إنتباه! تسجيل الدخول: 1 ، كلمة المرور: 1
لينكس:
مؤتمر نزع السلاح. / البومة
python3 wsgi_sova.py
أو في نافذة منفصلة
الشاشة -Udm python3 wsgi_server.py
نظام التشغيل Windows:
مؤتمر نزع السلاح. / البومة
wsgi_sova.py
2. جانغو
لينكس:
تثبيت django:
تثبيت pip3 django
مؤتمر نزع السلاح. / البومة
python3 Manage.py runserver
أو في نافذة منفصلة
screen -Udm python3 manager.py runserver 127.0.0.1:8000
نظام التشغيل Windows:
تثبيت django:
تثبيت نقطة django
مؤتمر نزع السلاح. / البومة
Manage.py runserver
3. الصقر
لينكس:
تثبيت الصقر pip3
مؤتمر نزع السلاح. / البومة
python3 wsgi_sova.py falconApp: api 8001 log_falcon / falcon
نظام التشغيل Windows:
نقطة تثبيت الصقر
مؤتمر نزع السلاح. / البومة
wsgi_sova.py falconApp: api 8001 log_falcon / falcon
********************** **********************
- عنوان المقال غريب ، هل فهمت ما هو "Multipage SPA"؟
- حيلة تسويقية عادية
- لماذا بدون Redux؟ يستخدم الجميع Redux.
- أنا لا أحب كلمة "المخفض"
- ولكن بجدية؟ ombineReducers في أي مستوى من التسلسل الهرمي ... إنه جميل جدا
هو متعدد الصفحات ، طفل رضيع. يجب أن تكون معالجات الأوامر داخل النموذج ، وليس مثل قرون الغزلان
- لماذا كتبت مقالا حتى؟
- العلاقات العامة