IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Retour à la ligne impossible


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Octobre 2022
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2022
    Messages : 31
    Par défaut Retour à la ligne impossible
    Bonjour,

    Impossible de parvenir à effectuer un retour à la ligne sur ma chaine de caractère.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
            dn = dns.resolver.query(n, 'ns')
            list_ns = []
            for rdata in dn:
                ns = rdata.to_text()
                list_ns.append(ns)
     
            no_listens = str(list_ns)
     
            # On récupère le champ A du domaine
     
            n = dns.name.from_text(domain_name)
     
            a = dns.resolver.query(n, 'A')
     
            list_a = []
            for rdata in a:
                domain_a = str(rdata.to_text())
                list_a.append(domain_a)
     
     
            no_liste_a = str(list_a)
     
    serveurs_dns = f"Serveurs DNS : {no_listens}\n"
    entree_a = f"Adresse IPv4 de {no_liste_a}"
    Je souhaite avoir un retour à la ligne entre mes deux valeurs mais tout reste sur la même ligne. Je ne comprends pas pourquoi

    Une idée ?

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Salut,

    Citation Envoyé par Rudeus Voir le message
    Une idée ?
    Le seul retour à la ligne dans le code que vous montrez est à la ligne 23 et on ne voit pas trop comment ces variables sont utilisées dans le reste du code.

    Avec ça difficile de comprendre ce que vous racontez et comment vous aider.

    Prenez le temps de mieux décrire le problème rencontré! Pour trouver une solution, décrire correctement le problème est la première étape. Elle peut se réduire à fabriquer un code simple qui permette de reproduire constaté.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre averti
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Octobre 2022
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2022
    Messages : 31
    Par défaut
    En effet j'aurais du préciser comment elles sont utilisées !

    Je remets donc le code complet avec les explications.

    J'ai créé une fonction qui permet de récupérer les données DNS d'un domaine entré :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    def dns_lookup(domain_name: str):
     
        # On récupère les DNS
        # print(domain)
     
        n = dns.name.from_text(domain_name)
     
        try:
            dn = dns.resolver.query(n, 'ns')
            list_ns = []
            for rdata in dn:
                ns = rdata.to_text()
                list_ns.append(ns)
     
            no_listens = str(list_ns)
     
            # On récupère le champ A du domaine
     
            n = dns.name.from_text(domain_name)
     
            a = dns.resolver.query(n, 'A')
     
            list_a = []
            for rdata in a:
                domain_a = str(rdata.to_text())
                list_a.append(domain_a)
     
     
            no_liste_a = str(list_a)
     
            serveurs_dns = f"Serveurs DNS : {no_listens}\n"
            entree_a = f"Adresse IPv4 de {no_liste_a}"
     
            return serveurs_dns + entree_a
     
        except dns.resolver.NXDOMAIN:
          return "Le nom de domaine n'existe pas !"
    Étant sur un projet Django, j'importe ma fonction dans mon fichier views.py :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    def onglet_dnslookup(request):
        domain_name = request.POST.get("domain_name")
        try:
            resultat = dns_lookup(domain_name)
            return render(request, 'toolbox/dnslookup.html', {'domain': resultat})
        except ValueError:
            return render(request, 'toolbox/dnslookup.html')
    Le résultat est envoyé dans mon fichier dnslookup.html :

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <body>
        <div class="container">
            <div class="row">
                <form method="post" action="">
                    {% csrf_token %}
                    <label for="domain_name">Nom de domaine :</label>
                    <input type="text" id="domain_name" name="domain_name">
                    <button type="submit" class="btn btn-primary ">Chercher</button>
                </form>
            </div>
        </div>
     
        <div class="container">
            <div class="row">
                {{ domain }}
            </div>
        </div>
    </body>

    Voici l'affichage sur le site qui est retourné :

    Nom : dnslookup.jpg
Affichages : 91
Taille : 30,1 Ko

    Je voudrais que pour chaque entrée, un retour à la ligne soit effectué. Le problème c'est que je n'y parviens pas du tout.

    J'espère que c'est plus clair !

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Citation Envoyé par Rudeus Voir le message
    Je voudrais que pour chaque entrée, un retour à la ligne soit effectué. Le problème c'est que je n'y parviens pas du tout.
    L'engin qui affiche est un navigateur qui récupère des informations dans du HTML ou il devrait montrer un texte en plusieurs lignes.
    Comment on fait ça dans du HTML? Sur que c'est plus compliqué que '\n' mais ce n'est pas un sujet Python et Django n'est pas un outil pour débutant.
    Vous êtes donc supposé chercher un peu sur Internet avant de demander de l'aide (dans le bon forum).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    721
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 721
    Par défaut
    J'aborderais le problème différemment.
    Quand on veut afficher un retour à la ligne dans une page HTML, on convertit \n en <br/>, ou bien on utilise un élement HTML tel que PRE ou CODE pour afficher du texte brut.

    Votre fonction dns_lookup ne devrait pas renvoyer un string concaténé, qui manque de souplesse. Renvoyez plutôt un dict par exemple, puisque vous mélangez différents type d'enregistrements (A, NS).
    Ensuite, vous passez ce dict à Django pour qu'il l'affiche par exemple avec <ul><li>. Et en passant, vous pourriez même trier par ordre alphabétique ou autre.

    D'autre part, il y a du code répétitif dans la fonction dns_lookup. Il faudrait lui rajouter un argument qui indique le type de ressource (A, NS, autre) recherché, et alors vous l'appelez deux fois. Voire trois, si vous voulez inclure les adresses IPv6...
    Je vous conseille donc de récupérer les A et les NS de manière distincte.

    En plus, ces list append n'ont pas de sens... il serait plus judicieux d'utiliser ce que la lib dns vous renvoie déjà, en filtrant ce qui vous intéresse. Cela peut se faire par un classique list comprehension.

    Voici une proposition de fonction plus généraliste, à laquelle vous devrez encore rajouter un peu de gestion d'exception:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    def dns_lookup(domain_name: str, resource_type: str):
        answers = dns.resolver.resolve(domain_name, resource_type)
        return [rdata.to_text() for rdata in answers]
     
    domain_name = "test.com"
    print(dns_lookup(domain_name=domain_name, resource_type="NS"))
    print(dns_lookup(domain_name=domain_name, resource_type="A"))
    print(dns_lookup(domain_name=domain_name, resource_type="AAAA"))
    Enfin, notez que dns.resolver.query est deprecated, utilisez plutôt dns.resolver.resolve

  6. #6
    Membre averti
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Octobre 2022
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2022
    Messages : 31
    Par défaut
    Bonjour !

    Ah oui en effet votre code est beaucoup plus court et plus efficace que le miens ...

    Quand vous parlez de renvoyer un dict plutôt qu'une chaine de caractères concaténée, je dois créer ce dict au niveau de la fonction directement ?

    Ou je peux le créer dans mon fichier views là où j'appelle ma fonction ?

    Car si je crée le dictionnaire dans la fonction, le return que vous avez indiqué va devoir changer je suppose afin de renvoyer chaque resource_type dans le même return.

    Merci en tout cas je comprends un peu mieux le fonctionnement de tout ça

    EDIT :

    J'ai testé avec ce code dans mon views :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    def onglet_dnslookup(request):
        domain_name = request.POST.get("domain_name")
        try:
            ns = dns_lookup(domain_name, "NS")
            a = dns_lookup(domain_name, "A")
            dic = dict([("ns",ns), ("a",a)])
            return render(request, 'toolbox/dnslookup.html', {'dic': dic})
        except ValueError:
            return render(request, 'toolbox/dnslookup.html')
    C'est comme cela que vous m'indiquiez de faire ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Caractère de retour à la ligne.
    Par Pari dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 18/03/2009, 09h59
  2. [FileWriter] retour à la ligne
    Par LoLoSS dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 23/06/2004, 10h52
  3. [JTextArea] Fichier et retour à la ligne
    Par eraim dans le forum Composants
    Réponses: 4
    Dernier message: 23/06/2004, 08h21
  4. [MFC] Retour à la ligne dans un CEdit
    Par Kant dans le forum MFC
    Réponses: 7
    Dernier message: 18/02/2004, 08h58
  5. Conserver les retours à la ligne
    Par arwen dans le forum ASP
    Réponses: 2
    Dernier message: 04/12/2003, 12h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo