J'ai touché Bergeronnette (3). Enquête et mise en place de messages pop-up.

introduction

Bonjour.

Ce que je veux implémenter maintenant, ce sont les paramètres de validation lors de l'enregistrement après la modification de la page. Je veux que le comportement lorsque le titre dépasse 33 caractères soit le même que le comportement lorsque le titre comporte 0 caractères.

Afin d'étudier la méthode d'implémentation, cette fois j'ai étudié le code de Wagtail. Article précédent


Vérifiez le code source de Wagtail

Wagtail est open source, donc si vous recherchez "Wagtail Github" sur le net, vous trouverez la page Wagtail's Github. Je veux savoir quel code est impliqué lors de l'enregistrement de la page, alors cherchons dans le code pour le moment.

スクリーンショット 2019-12-31 19.59.15.png スクリーンショット 2019-12-31 20.00.25.png

De nombreux fichiers django.po sont touchés. Il s'agit d'un fichier permettant de convertir les mots utilisés dans la page dans une autre langue. Je ne pense pas que ce fichier soit profondément lié au contenu de cette époque, je vais donc l'ignorer.

wagtail / admin / views / pages.py semble suspect. Recherchez également le message d'erreur dans ce fichier pour savoir dans quelle fonction il est utilisé.

Apparemment, la fonction d'édition sur la ligne 323 ressemble à ça. Les fonctions de création et d'édition sont similaires. Comme vous pouvez le deviner à partir du nom, la fonction qui fonctionne lorsque la page est créée et lorsqu'elle est modifiée est différente. (semble si)

C'est là que le message d'erreur est écrit.

messages.validation_error(request, _("The page could not be saved due to validation errors"), form)

Si vous regardez l'instruction d'importation au début du fichier, les messages

from wagtail.admin import messages, signals

Vous pouvez voir qu'il s'agit de wagtail / admin / messages.py. Diverses fonctions sont écrites, mais il semble que le traitement passe à la fonction de rendu en général.

def render(message, buttons, detail=''):
    return render_to_string('wagtailadmin/shared/messages.html', {
        'message': message,
        'buttons': buttons,
        'detail': detail,
    })

J'ai trouvé que je devais utiliser ces ** messages ** pour afficher la bannière (?) Message qui apparaît en haut de la page avec la bergeronnette.


Présentez la méthode des messages

Maintenant, introduisons la méthode des messages. La méthode que nous avons envisagée jusqu'à présent est de la valider lors de l'enregistrement avec la méthode save de models.py. Avec cette technique, vous pouvez définir si vous souhaitez enregistrer dans la base de données. Cependant, il semble difficile de gérer les messages d'erreur. Je voudrais utiliser des hooks cette fois pour obtenir un message d'erreur.

hooks est une fonction pratique propre à la bergeronnette, et il est possible d'exécuter un programme lorsqu'un événement spécifique se produit. Les hooks prennent également en charge avant et après la modification de l'objet Page, avant et après la création de l'objet Page, et ainsi de suite. Alors, essayons d'utiliser des crochets après que l'objet Page a été modifié.

from django.http import HttpResponse
from wagtail.core import hooks

from wagtail.admin import messages

@hooks.register('after_edit_page')
def after_edit_page(request, page):
    is_title_length_valid = True if (len(page.title) > 0 | len(page.title) < 33) else False
    
    if not is_title_length_valid:
        messages.error(request, "Title Count Error")
    

def index(request):
    return HttpReesponse("Hello, world.")

Le résultat de l'exécution ressemble à ceci.

スクリーンショット 2020-01-01 0.25.09.png

http://localhost:8000/django-admin/wagtailcore/page/

Vous avez implémenté la validation de l'enregistrement de la base de données et les messages d'erreur.


à la fin

Cela faisait un an que je le faisais en regardant l'enfant. ** -_- ** Il semble que vous puissiez écrire des articles avec MarkDown en bergeronnette, donc je pense que je vais essayer de l'implémenter.

Recommended Posts

J'ai touché Bergeronnette (3). Enquête et mise en place de messages pop-up.
J'ai touché Wagtail (1) et remplaçons la méthode de sauvegarde.
Explication et mise en œuvre de SocialFoceModel
J'ai touché Bergeronnette (2). Introduction des extensions django.
J'ai touché Tensorflow et keras
Explication et mise en œuvre de PRML Chapitre 4
Introduction et mise en œuvre de JoCoR-Loss (CVPR2020)
Explication et implémentation de l'algorithme ESIM
Introduction et mise en œuvre de la fonction d'activation
[Python] J'ai expliqué en détail la théorie et la mise en œuvre de la régression logistique
Explication et mise en œuvre du perceptron simple
[Python] J'ai expliqué en détail la théorie et la mise en œuvre de l'arbre de décision
Mise en œuvre et expérience de la méthode de clustering convexe
Explication et implémentation de l'algorithme Decomposable Attention
[Python] J'ai expliqué en détail la théorie et l'implémentation de la machine à vecteurs de support (SVM).
J'ai lu l'implémentation de range (Objects / rangeobject.c)
Implémentation de l'arbre TRIE avec Python et LOUDS
J'ai touché certaines des nouvelles fonctionnalités de Python 3.8 ①
Résumé relatif aux E / S de python et fortran
J'ai essayé l'analyse morphologique et la vectorisation de mots
J'ai lu et implémenté les variantes de UKR
Explication de la distance d'édition et de l'implémentation en Python