[PYTHON] Ich berührte Bachstelze (3). Untersuchung und Implementierung von Popup-Nachrichten.

Einführung

Hallo.

Was ich jetzt implementieren möchte, sind die Validierungseinstellungen beim Speichern nach dem Bearbeiten der Seite. Ich möchte, dass das Verhalten, wenn der Titel 33 Zeichen überschreitet, dem Verhalten entspricht, wenn der Titel 0 Zeichen enthält.

Um die Implementierungsmethode zu untersuchen, habe ich diesmal den Code von Wagtail untersucht. Vorheriger Artikel


Überprüfen Sie den Bachstelzen-Quellcode

Wagtail ist Open Source. Wenn Sie also im Internet nach "Wagtail Github" suchen, finden Sie Wagtail's Github-Seite. Ich möchte wissen, welcher Code beim Speichern der Seite beteiligt ist, also suchen wir vorerst im Code.

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

Viele django.po-Dateien sind betroffen. Dies ist eine Datei zum Konvertieren der auf der Seite verwendeten Wörter in eine andere Sprache. Ich glaube nicht, dass diese Datei eng mit dem Inhalt dieser Zeit zusammenhängt, deshalb werde ich sie überspringen.

Bachstelze / admin / views / pages.py sieht verdächtig aus. Suchen Sie auch in dieser Datei nach der Fehlermeldung, um herauszufinden, in welcher Funktion sie verwendet wird.

Anscheinend sieht die Bearbeitungsfunktion in Zeile 323 so aus. Die Funktionen zum Erstellen und Bearbeiten sind ähnlich. Wie Sie dem Namen entnehmen können, ist die Funktion, die beim Erstellen und Bearbeiten der Seite funktioniert, unterschiedlich. (rate mal)

Hier wird die Fehlermeldung geschrieben.

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

Wenn Sie sich die Importanweisung am Anfang der Datei ansehen, werden Nachrichten angezeigt

from wagtail.admin import messages, signals

Sie können sehen, dass es sich um [wagtail / admin / messages.py] handelt (https://github.com/wagtail/wagtail/blob/9be694b508b1dedb2616516fcd630727c0cd762e/wagtail/admin/messages.py). Es werden verschiedene Funktionen geschrieben, aber es scheint, dass sich die Verarbeitung allgemein zur Renderfunktion verschiebt.

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

Ich fand, dass ich diese ** Nachrichten ** verwenden sollte, um die Banner (?) Nachricht anzuzeigen, die oben auf der Seite mit Bachstelze angezeigt wird.


Führen Sie die Nachrichtenmethode ein

Lassen Sie uns nun die Nachrichtenmethode vorstellen. Die Methode, die wir bisher in Betracht gezogen haben, besteht darin, sie beim Speichern mit der Speichermethode von models.py zu validieren. Mit dieser Technik können Sie festlegen, ob in der Datenbank gespeichert werden soll. Es scheint jedoch schwierig zu sein, mit Fehlermeldungen umzugehen. Ich möchte dieses Mal Hooks verwenden, um die Fehlermeldung zu erhalten.

Hooks ist eine praktische Funktion, die Bachstelze eigen ist, und es ist möglich, ein Programm auszuführen, wenn ein bestimmtes Ereignis eintritt. Hooks unterstützen auch vor und nach dem Bearbeiten des Seitenobjekts, vor und nach dem Erstellen des Seitenobjekts usw. Versuchen wir also, Hooks zu verwenden, nachdem das Page-Objekt bearbeitet wurde.

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.")

Das Ausführungsergebnis sieht so aus.

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

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

Sie haben sowohl die Überprüfung der Datenbankspeicherung als auch Fehlermeldungen implementiert.


schließlich

Es ist ein Jahr her, seit ich es getan habe, während ich das Kind beobachtet habe. ** -_- ** Es scheint, dass Sie Artikel mit MarkDown in Bachstelze schreiben können, also denke ich, dass ich versuchen werde, es zu implementieren.

Recommended Posts

Ich berührte Bachstelze (3). Untersuchung und Implementierung von Popup-Nachrichten.
Ich habe Bachstelze (1) berührt und die Speichermethode überschrieben.
Erklärung und Implementierung von SocialFoceModel
Ich berührte Bachstelze (2). Einführung von Django-Erweiterungen.
Ich berührte Tensorflow und Keras
Erläuterung und Implementierung von PRML Kapitel 4
Einführung und Implementierung von JoCoR-Loss (CVPR2020)
Erklärung und Implementierung des ESIM-Algorithmus
Einführung und Implementierung der Aktivierungsfunktion
[Python] Ich habe die Theorie und Implementierung der logistischen Regression gründlich erklärt
Erklärung und Implementierung von einfachem Perzeptron
[Python] Ich habe die Theorie und Implementierung des Entscheidungsbaums gründlich erklärt
Implementierung und Experiment der konvexen Clustering-Methode
Erklärung und Implementierung des Decomposable Attention-Algorithmus
[Python] Ich habe die Theorie und Implementierung der Support Vector Machine (SVM) ausführlich erklärt.
Ich habe die Implementierung von range gelesen (Objects / rangeobject.c)
TRIE-Baumimplementierung mit Python und LOUDS
Ich habe einige der neuen Funktionen von Python 3.8 touched angesprochen
E / A-bezogene Zusammenfassung von Python und Fortan
Ich habe versucht, morphologische Analyse und Wortvektorisierung
Ich habe die Varianten von UKR gelesen und implementiert
Erläuterung der Bearbeitungsentfernung und Implementierung in Python