كيف يمكنني التحقق من صحة HTML في قوالب Django أثناء عملية التطوير؟

StackOverflow https://stackoverflow.com/questions/3086637

  •  28-09-2019
  •  | 
  •  

سؤال

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

ما هي الطريقة المثلى لعمل هذا؟

هل كانت مفيدة؟

المحلول

سؤال جيد. لم أفعل هذا بنفسي ، لذلك نأمل أن يكون هناك بعض الإجابات الأفضل ، ولكن قد ترغب في النظر في الوسيطة الوسيطة للتحقق من HTML:

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

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

نصائح أخرى

بدلاً من ذلك ، فإن النهج الذي يمتد إلى صحة الصفحات على موقعك أثناء عملية اختبار الوحدة المعتادة سيبدو مثل هذا:

  1. اذهب من خلال الخاص بك urls.py وإنشاء أكبر عدد ممكن من عناوين URL للموقع
  2. يستخدم عميل اختبار Django المدمج لجلب كل من عناوين URL هذه
  3. التحقق من صحةهم بطريقة أو بأخرى (انظر ربما التحقق من صحة (x) html في بيثون)

لست متأكدًا مما إذا كان أي شخص قد قام بأي من العمل على هذا هو طريقة قابلة لإعادة الاستخدام.

يتمثل أحد الحلول في جعل برنامج نصي يجعل جميع القوالب بناءً على قاموس إدخال لقيم اختبار المتغيرات.

المنطق الرئيسي لاسترداد قائمة المتغيرات المحددة في القوالب هو ما يلي:

from django.template.loader import get_template

def extract_required_vars(node):
    if not hasattr(node, 'nodelist'):
        return []
    var_names = []
    for child_node in node.nodelist:
        if isinstance(child_node, VariableNode):
            var_names.append(child_node.filter_expression.token)
        elif isinstance(child_node, ForNode):
            var_names.append(child_node.sequence.var.var)
        elif isinstance(child_node, ExtendsNode):
            template = get_template(child_node.parent_name.var)
            var_names.extend(extract_required_vars(template))
        elif isinstance(child_node, IncludeNode):
            template = get_template(child_node.template.var)
            var_names.extend(extract_required_vars(template))
        var_names.extend(extract_required_vars(child_node))
    return var_names

required_vars = extract_required_vars(get_template('index.html'))

ثم يتحقق البرنامج النصي من أن المتغيرات المحددة في القوالب هي إما في إعدادات المشروع أو في القولون الذي يوفره المستخدم كمدخل اختبار.

/path/to/project/templates/templates/allusers.html
  -> ok: users, STATIC_URL
/path/to/project/templates/entrer-en-contact.html
  -> ok: contactform, STATIC_URL
/path/to/project/templates/dest-summary.html
  -> ok: STATIC_URL
  -> missing: dest_username

المزيد من التفاصيل في منشور المدونة هذا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top