Comment dois-je valider HTML dans les modèles de Django au cours du processus de développement?

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

  •  28-09-2019
  •  | 
  •  

Question

Je n'ai pas utilisé Django et Python construit pour tester encore les capacités, mais je veux enfin commencer ... Et l'une des choses les plus évidentes que je voudrais garder en échec pendant tout le processus de développement est que tous les mes pages valident dans tous les scénarios possibles.

Quelle est la meilleure façon de le faire?

Était-ce utile?

La solution

Bonne question. Je ne l'ai pas fait moi-même, alors je espère qu'il y aura des meilleures réponses, mais vous pouvez regarder en middleware validation HTML:

« dans tous les scénarios possibles » pourrait être trop demander, en fonction de votre application. Par exemple, si vous faites le prochain Facebook, et acceptez ainsi d'énormes quantités de données utilisateur tous les jours, quelque chose viendra à un moment donné que la validité des pauses d'une page sur votre site.

Comme les erreurs de validation ne tendent pas à détruire la fonctionnalité, il pourrait être une approche acceptable pour vérifier certaines données de test limitées, alors réagir à des erreurs comme ils se présentent. Je crois que ceci est connu comme test conduit stupidité .

Autres conseils

Sinon, une approche de déploiement soi-même de valider les pages de votre site au cours de votre processus de test habituel unité ressemblerait à quelque chose comme ceci:

  1. Allez dans votre urls.py et de générer autant d'URL possibles pour le site que vous pouvez
  2. Utilisez le client intégré de test Django pour aller chercher chacun de ces urls
  3. Valider les en quelque sorte (voir peut-être Valider (X) HTML en Python )

Je ne sais pas si quelqu'un a fait tout le travail sur ce point est une manière réutilisable.

Une solution consiste à faire un script qui rend tous les modèles basés sur un dictionnaire d'entrée des valeurs de test variables.

La logique principale pour récupérer la liste des variables définies dans les modèles est le suivant:

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'))

Le script vérifie ensuite que les variables définies dans les modèles sont soit dans les paramètres du projet ou dans le dict fourni par l'utilisateur comme entrée de test.

/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

Plus de détails dans ce billet de blog .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top