[PYTHON] Une histoire qui rend le débogage de modèle plus facile à voir dans l'environnement Django + SQLAlchemy

Contexte

Python et Django, je suis dans le premier mois. L'historique des rails est d'environ 2 ans. Pourquoi le débogage de Python est-il si difficile à voir? Surtout modèle. L'affichage suivant. Qui gagnerait à voir cela?

>>> class Foo(object):
        pass
>>>
>>> repr(Foo())
'<__main__.Foo object at 0x02A74E50>'

Cherchez la mer sur le net pour voir s'il y a une manière différente, et utilisez repr pour la voir magnifiquement! Hourra! Cela vous libère de la douleur!

def __repr__(self):
    return '<Stats: description={0.description!r}, mystat={0.mystat!r}>'.format(self)

... qu'est-ce que c'est ennuyeux.

Vous devez écrire à chaque classe. Est-il possible d'ajouter une bibliothèque one-shot ou quelque chose? ?? Je pense.

Il y avait.

Référence: http://stackoverflow.com/a/15929677/5114776

from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()

if __debug__:
    # monkey-patch in useful repr() for all objects, but only in dev
    def tablerepr(self):
        return "<{}({})>".format(
            self.__class__.__name__,
            ', '.join(
                ["{}={}".format(k, repr(self.__dict__[k]))
                    for k in sorted(self.__dict__.keys())
                    if k[0] != '_']
            )
        )
    Base.__repr__ = tablerepr
>>> session.query(FooBar).get(1)
<FooBar(id=1, foo='bar', comments='foobar', hoge=1231242342341342342, fuga=datetime(2015, 5, 5, 5, 5, 5), tiger='waearsdtdygfyfguiohjohjohpp'>

Cependant, il est encore difficile de voir avec cette seule référence. Je ne suis pas une machine! Un format facile à voir pour les gens! Sinon, ça n'a pas de sens!

Plus facile à voir

Base = declarative_base()

if __debug__:
    # monkey-patch in useful repr() for all objects, but only in dev
    def tab_char(max_length, target_lenght):
        tab = []
        tab_char_count = 4
        tab_count = (max_length/tab_char_count - target_lenght/tab_char_count) + 1
        for i in range(tab_count):
            tab.append('\t')
        return "".join(tab)


    def table_repr(self):
        max_length = max(map(lambda n: len(n), self.__dict__.keys()))
        return "\n<{}({})>".format(
            self.__class__.__name__,
            ', '.join(
                ["\n\t{}{}= {}".format(k, tab_char(max_length, len(k)), repr(self.__dict__[k]))
                 for k in sorted(self.__dict__.keys())
                 if k[0] != '_']
            )
        )

    Base.__repr__ = table_repr
>>> session.query(FooBar).get(1)
<FooBar(
	id					= 1
	fooooooooo			= 'bar',
	comments			= 'foobar',
	hoge				= 1231242342341342342, 
	fuga				= datetime(2015, 5, 5, 5, 5, 5), 
	tiger				= 'waearsdtdygfyfguiohjohjohpp'>

Parfait.

Recommended Posts

Une histoire qui rend le débogage de modèle plus facile à voir dans l'environnement Django + SQLAlchemy
Fileinput, un module qui facilite l'écriture de programmes de filtrage de type Perl en Python
Une histoire qui facilite l'estimation de la surface habitable à l'aide d'Elasticsearch et de Python
Une histoire que Qiita voulait vraiment voir dans un environnement proxy
J'ai essayé de créer un site qui permet de voir facilement les informations mises à jour d'Azure
L'apprentissage en profondeur facilite considérablement la visualisation du laps de temps des changements physiques
Je souhaite créer une API qui retourne un modèle avec une relation récursive dans Django REST Framework
L'histoire de PHP qui était correcte dans l'environnement de développement mais boguée dans l'environnement de production LEVEL1 ~ 3 + 1
Vous qui coloriez le journal pour le rendre plus facile à voir
Une doublure qui formate JSON pour le rendre plus facile à voir
L'histoire du champ de modèle Django disparaissant de la classe
Un script qui facilite la création de menus riches avec l'API de messagerie LINE
Comment créer un enregistrement en collant une relation au modèle source d'héritage dans le modèle hérité par Django
Créez une page Web qui exécute un modèle qui augmente la résolution de l'image à l'aide de gradio, ce qui facilite la création d'un écran Web
J'ai écrit une classe qui facilite l'écriture en spécifiant les paroles de la partie lors de l'utilisation de Mecab avec python
Une histoire qui n'a pas fonctionné lorsque j'ai essayé de me connecter avec le module de requêtes Python
Comment retourner les données contenues dans le modèle django au format json et les mapper sur le dépliant
Notez que vous souhaitez décorer manuellement les paramètres passés dans le formulaire du modèle Django élément par élément
Une histoire sur la création d'un programme qui augmentera le nombre d'abonnés Instagram de 0 à 700 en une semaine
Ajout d'une fonction pour enregistrer les décalages souhaités dans la table des décalages Django
Installer Django dans l'environnement virtuel pipenv
Histoire de créer un planétarium virtuel [jusqu'à ce que les débutants créent un modèle avec un script et parviennent à l'assembler]
Django ~ Affichons-le sur le navigateur ~
L'histoire de la création de Botonyan qui renvoie le contenu de Google Docs en réponse à un mot-clé spécifique sur Slack
Dans IPython, quand j'ai essayé de voir la valeur, c'était un générateur, donc je l'ai inventé quand j'étais frustré.
Je pensais qu'il serait lent d'utiliser l'instruction for dans NumPy, mais ce n'était pas le cas.
Implémenter un modèle utilisateur personnalisé dans Django
L'histoire de l'adresse IPv6 que je souhaite conserver au minimum
Si vous souhaitez afficher la valeur à l'aide des choix du modèle dans le modèle Django
Comment compter le nombre d'éléments dans Django et sortir dans le modèle
L'histoire de la création d'une application Web qui enregistre des lectures approfondies avec Django
Créer un projet et une application Django dans un environnement virtuel Python et démarrer le serveur
L'histoire de Django créant une bibliothèque qui pourrait être un peu plus utile
La première chose à vérifier quand un No Reverse Match se produit dans Django
[Django] Créez un formulaire qui remplit automatiquement l'adresse à partir du code postal
Je souhaite voir une liste de fichiers WebDAV dans le module Requêtes
Définir la valeur de division dans Django et la refléter facilement à l'écran
Instructions pour connecter Google Colab. À l'environnement d'exécution local dans un environnement Windows
django geodjango auquel j'ai fait référence quand je suis resté coincé dans le tutoriel (édition)
L'explication la plus simple au monde sur la création de LINE BOT (2) [Préparation de l'application Bot dans un environnement local avec Django de Python]
Un modèle qui identifie la guitare avec fast.ai
Utilisez le dernier pip dans un environnement virtualenv
Démarrez Django dans un environnement virtuel à l'aide de Pipenv
Créez un environnement Django avec Vagrant en 5 minutes
Définir une adresse IP fixe dans l'environnement Linux
L'histoire de l'affichage des fichiers multimédias dans Django
Comment créer une API Rest dans Django
L'histoire qui s'inscrit dans l'installation de pip
C'est une histoire de ferroutage sur le service qui renvoie "Nyan" lorsque vous appuyez sur ping
L'arrière-plan des caractères de l'image texte est surexposé pour faciliter la lecture.
Script Python qui explore le flux RSS du statut Azure et le publie sur Hipchat
Une histoire qui nécessitait des préparatifs pour essayer de faire un tutoriel Django avec des centos simples
Notez que j'étais accro au script npm ne passant pas dans l'environnement de vérification
Une histoire bloquée lors de la tentative de mise à niveau de la version Python avec GCE
Essayez de faire une stratégie de blackjack en renforçant l'apprentissage (② Enregistrer l'environnement dans le gymnase)
[Django] Essayons de clarifier la partie de Django qui était en quelque sorte à travers le test