ثلاثة أمثلة غير واضحة لاستخدام محركات القوالب في الخلفية

من ناحية ، كان الموضوع مربعا بالفعل. من ناحية أخرى ، كان مستديرًا. لكن على الجانب الثالث ، الذي يجب أن يكون المثلث فيه ، خرج الكائن منحني ومائل.


هل يذهب اليوشينكا الى غرفة الاجتماعات؟ - Lenochkina عالقة في وجه الباب المهتمين.
- اليوشينكا لا يحضر الاجتماع. Aleshenka يكتب مقالا.
- حول المكعبات؟
- ما مكعبات أخرى؟ - خفضت عيني ، في يدي وكانت الحقيقة مكعب مؤسف. هذه كرة. هذا هو المعين.
- ليس حول مكعبات! وليس عن الكرات. حول القوالب.
"سأقول لهم ذلك!" نمط ، آه. - هيلين كانت تسير بالفعل في الممر.


"حول القوالب. حتى حول ثلاثة قوالب مختلفة." بتعبير أدق ، حول ثلاثة أسباب لاستخدام القوالب في رمز الخادم. ولن يكون أي من هذه الأسباب حول HTML.


في الأمثلة ، استخدمت بناء جملة Moustache ، بسبب بناء الجملة laconic ووجود تطبيقات لكل شيء يتحرك. Moustache عملياً لا يسمح لنفسه بأي حريات ، على عكس ، على سبيل المثال ، .Net Razor ، والذي يسمح لك بالترميز داخل قالب ، وبالتالي وضع مثال سيئ للمطورين الضعفاء.


سوف تكون أمثلة التعليمات البرمجية في الثعبان. يسمى تطبيق Moustache لـ Python pystache .


لذلك ، ثلاثة أسباب للسماح للأنماط في حياتك كودك


التحف النصية


إذا كان لديك نظام توجد فيه بعض البيانات - على سبيل المثال ، بيانات في قاعدة بيانات علائقية أو بيانات تم الحصول عليها من خلال مكالمات واجهة برمجة التطبيقات ، فأنت في بعض الأحيان تحتاج إلى إنشاء أدوات بناءً على هذه البيانات.


يمكن أن تكون قطعة أثرية ، على سبيل المثال ، ملف JSON أو ملف نصي عادي أو مرفق أو استجابة HTTP. الشيء الرئيسي - الأثر هو في الأساس نتيجة لتطبيق وظيفة من جزء مضغوط نسبيًا من البيانات في نظامك. والقطع الأثرية لها بناء جملة خاص بها.


قد تكون هذه الأداة عبارة عن كشف حساب بنكي بتنسيق نصي للتحميل إلى النظام القديم. قد تكون القطع الأثرية تفريغ شيك إلكتروني في شكل ملف .json ، والذي سيتم إرساله كمرفق إلى العميل عن طريق البريد.


في كل هذه الحالات ، سوف تبسط حياتك إلى حد كبير باستخدام قوالب قطعة أثرية.


ما هو محرك القالب؟ هذه مكتبة ستتخذ نموذج كائن (سياق) ، تأخذ قالبًا ، وتطبق نموذجًا على الآخر - وتعطي النتيجة. يتم إعداد نموذج الكائن والقالب بواسطة المبرمج. يتم إعداد النتيجة النهائية بواسطة محرك القالب.


مثال: حاول إنشاء رسالة نصية حول الترتيب.


أولاً ، قم بإعداد نموذج الكائن:


def add_comma(list): for a in list[:-1]: a["comma"] = True def get_model(): res = { "documentId": 3323223, "checkDate": "01.02.2019 22:20", "posId": 34399, "posAddr": "Urupinsk, 1 Maya 1", "lines": [ { "no": 1, "itemtext": "Hello Kitty", "amount": 3, "sumRub": "55.20" }, { "no": 2, "itemtext": "Paper pokemons", "amount": 1, "sumRub": "1230.00" }, { "no": 2, "itemtext": "Book of Mustache", "amount": 1, "sumRub": "1000.00" } ], "total": { "amount": "3285.20" } } add_comma(res["lines"]) res["posInUrupinsk"] = res["posId"] > 34000 return res 

الرمز دمية بحتة. في الكود الحقيقي ، قد يكون هناك استعلام قاعدة بيانات ، نوع من المنطق لحساب القيم (على سبيل المثال ، نحسب قيمة total.amount بناءً على عناصر الطلب).


انتبه لبعض الأشياء:


  • هذا ليس نموذج كائن من الترتيب ، إنه شيء أكثر بساطة ، تم إعداده للاستخدام في القالب. لا ينبغي أن تكون القيم "sumRub" و "total.amount" في نموذج العمل الحقيقي نصية ، لا تنتمي قيمة "الفاصلة" لصفيف الأسطر في طراز الكائن ، فهي ضرورية فقط لتبسيط التجسيد (لا يمكن ل pystache أن يفهم نفسه أن عنصر القائمة هو الأخير وبعد ذلك ليست هناك حاجة لوضع فاصلة.
  • نوع الحقل "كمية" هو النص ويتم تنسيق هذا النص للإخراج في القالب. إذا كان محرك القالب الخاص بك يدعم التنسيقات (شيء مثل "... {someValue | asMoney}") ، فإن التنسيق مباشرةً في النموذج ليس ضروريًا.
  • يجب أن يبدو النص الموجود في القالب مختلفًا بعض الشيء عن عملاء Uryupinsk (قام المدير بالركض في اللحظة الأخيرة وطلب منه الإضافة - طلب العمل حقًا ، أطلقوا فجأة حملة تسويقية للمدينة). لذلك ، أضفنا القيمة المنطقية "posInUrupinsk" إلى النموذج واستخدمناه في القالب.
  • من الأفضل عدم استخدام النموذج مرة أخرى من القالب ، باستثناء تقديم قوالب أخرى

يبدو نص قالب الشارب كما يلي:


 {{#posInUrupinsk}}    !        100   . {{/posInUrupinsk}} {{^posInUrupinsk}}    : {{/posInUrupinsk}} {{#lines}} #{{no}} ... {{itemtext}}: {{sumRub}} {{#comma}};{{/comma}}{{^comma}}.{{/comma}} {{/lines}} : {{total.amount}} --------------------------- N : {{documentId}}  {{checkDate}} 

نرى في القالب أن رأس المستند للطلبات في Uryupinsk يختلف عن المدن الأخرى. نرى أيضًا أنه في نهاية السطر الأخير مع موضع السلعة ، توجد نقطة ، وفي جميع المراكز المبكرة يوجد فاصلة منقوطة. تعتبر السمة "فاصلة" وأسلوب "add_comma" في منشئ النماذج مسؤولين عن ذلك.


التعليمة البرمجية التي تطبق السياق على القالب تافهة:


 model = get_model() with open(os.path.join("templates", "check.txt.mustache"), 'r') as f: template = f.read() check_text = pystache.render(template, model) print(check_text) 

النتيجة:


    !        100   . #1 ... Hello Kitty: 55.20 ; #2 ... Paper pokemons: 1230.00 ; #2 ... Book of Mustache: 1000.00 . : 3285.20 --------------------------- N : 3323223  01.02.2019 22:20 

نصيحة أخرى: إذا سمحت المهمة بذلك ، احفظ النموذج نفسه بالقالب المقدم (على سبيل المثال ، بتنسيق JSON). هذا سوف يساعد في تصحيح الأخطاء واستكشاف الأخطاء وإصلاحها.




صرعت الطابعة ثلاث مرات ، وأصدرت نموذجًا جديدًا. أصبح الجانب الثلاثي الآن مثلثًا مثاليًا. كان الجانبان الآخران مربعا. عاشت الشبكة العصبية حياتها ورفضت إعطاء نموذج بدائي نموذجي من جميع النواحي.


"سأعطي هيلين مكعبًا." فكرت. دعه يفرح.


كود الشفرة


قد تحتاج إلى إنشاء JavaScript في وقت التشغيل من داخل الواجهة الخلفية. لماذا؟ لإنشاء تقارير من جانب المتصفح ، على سبيل المثال. أو احصل على برنامج نصي في F # من داخل برنامج Go. أو رمز Kotlin من داخل ReactJS (لا أستطيع أن أتخيل لماذا قد يكون ذلك ضروريًا ، ولكن فجأة لديك مثل هذه الميول المحددة).


في حالة إنشاء الشفرة ، من الأفضل أولاً كتابة الكود الناتج (ما نريد إنشاءه) بيديك ثم تقسيمه إلى قالب وطراز. هذا النهج سوف ينقذنا من حزن التعقيد المفرط للنموذج. لم يفت الأوان بعد لتعقيد النموذج ، ولكن من الأفضل أن نبدأ بنموذج بسيط.


 var report = CreateChart({ title: "   - " }, type: "lineChart", sourceUrl: "/reports/data/0" ); report.addLine({ dataIndex:0, title: "", color: "green" }); report.addLine({ dataIndex:1, title: "", color: "red" }); report.render($("#reportPlaceholder1")); var report = CreateChart({ title: "   -  " }, type: "lineChart", sourceUrl: "/reports/data/1"); report.addLine({ dataIndex:0, title: "Hello Kitty", color: "#000" }); report.addLine({ dataIndex:1, title: "PokemonGo", color: "#222" }); report.addLine({ dataIndex:2, title: "Mustache", color: "#333" }); report.render($("#reportPlaceholder2")); 

هنا نرى أن لدينا من واحد إلى N lineChart الرسوم البيانية على الصفحة ، كل منها لديه مصدر البيانات الخاصة به ، وعنوانه وقائمة المؤشرات. modelka:


 def get_model(): return { "charts": [ { "divId": "#reportPlaceholder1", "title": "   - ", "sourceUrl": "/reports/data/0", "series": [ {"dataIndex": 0, "title": "", "color": "green"}, {"dataIndex": 1, "title": "", "color": "red"}, ] }, { "divId": "#reportPlaceholder2", "title": "   -  ", "sourceUrl": "/reports/data/1", "series": [ {"dataIndex": 0, "title": "Hello Kitty", "color": "#000"}, {"dataIndex": 1, "title": "PokemonGo", "color": "#111"}, {"dataIndex": 2, "title": "Mustache", "color": "#222"}, ] } ] } 

حسنا ، القالب:


 {{#charts}} var report = CreateChart({ title: "{{title}}" }, type: "lineChart", sourceUrl: "{{sourceUrl}}" ); {{#series}} report.addLine({ dataIndex:{{dataIndex}}, title: "{{title}}", color: "{{color}}" }); {{/series}} report.render($("{{divId}}")); {{/charts}} 

يرجى ملاحظة: هذا النهج "وجها لوجه" للتوحيد القياسي يتطلب جهدا منفصلا لفحص القيم في النموذج. إذا كان في السلسلة [0]. العنوان ، نحصل على علامة فاصلة أو علامة اقتباس - "Hello Kitty \" "- سوف ينهار بناء جملة الملف الناتج. لذلك ، اكتب وظائف الفحص واستخدمها عند إنشاء النماذج. استخدم التنسيقات إذا كان محرك القالب يعرف كيف.




طار الموت الثالث عبر الباب وارتد بقرع. إنها أيضًا ليست جيدة. هذا ممتع. ولكن هل يمكنك لف المكعب بحيث ينزلق تحت الباب ويصل إلى نهاية الممر؟ هل من الممكن 3D المطاط الطباعة؟ أم أنه من الأفضل جعلها مليئة بمثل هذه الأيقونات الصغيرة المليئة بالهواء؟ ...


استعلامات SQL


سيقول القارئ صعب الإرضاء أن هذا أيضًا هو توليد الشفرة ، ترجمة المفاهيم من لغة برمجة إلى أخرى. سنقوم بالرد على القارئ من الصعب إرضاءه بأن العمل مع SQL أو مع أي لغة استعلام قاعدة بيانات أخرى هو مجال برمجة منفصل قليلاً وليس من الواضح للجميع أنه إذا كان يمكن إنشاء نصوص js بواسطة قوالب ، فإن SQL تكون ممكنة أيضًا. لذلك ، سنصدر طلبات في حالة منفصلة.


وحتى لا يشعر القارئ بالرضا بالملل ، سنترك في المقالة أمثلة فقط على بعض الاستعلامات. يمكنك أنت بنفسك معرفة النموذج والقالب الأكثر ملاءمة هنا. في الأمثلة على جيثب يمكنك أن ترى ما فعلت.


 SELECT * FROM hosts WHERE firmware_id=1 AND bmc_login='admin' ORDER BY ip DESC; SELECT * FROM hosts ORDER BY name LIMIT 3; SELECT host_type_id, COUNT(*) FROM hosts GROUP BY host_type_id; 

يمكن العثور على قوالب (بما في ذلك SQL) وأمثلة التعليمات البرمجية على جيثب .

Source: https://habr.com/ru/post/ar454418/


All Articles