[PYTHON] Ich habe Bachstelze (1) berührt und die Speichermethode überschrieben.

Einführung

Hallo

Ich habe mich vor einiger Zeit mit Bachstelze entwickelt. Es gibt nicht viele japanische Dokumente in Bachstelze, daher müssen Sie englische Dokumente lesen.

Als Ingenieur ist die Fähigkeit, englische Literatur zu lesen, sehr wichtig. ** Ich wünschte, es wäre ein Dokument auf Japanisch geschrieben ** Ich denke, viele Leute denken das. ~~ Ich denke ~~

Also möchte ich Code mit Bachstelze schreiben und ausgeben. Diesmal ist der erste von ihnen.


Über Bachstelze

Ich denke, einige Leute denken überhaupt an Bachstelze.

Wagtail ist OSS von CMS, das auf Django basiert. /word15874.html). WordPress läuft auf PHP, während Wagtail auf Python läuft. Wie Sie dem Release Note entnehmen können, ist die Entwicklung recht aktiv.

Bachstelze ist übrigens ein Wort, das auf Japanisch Sekirei entspricht. Das Bachstelzen-Logo ist ebenfalls mit einem schönen Motiv versehen.


Bereiten wir die Umgebung vor

Lassen Sie es uns sofort berühren. Ich mache es auf dem Mac. In Bezug auf die Umgebungskonstruktion habe ich auf die folgende Seite verwiesen.

Referenz: Empfehlung von Bachstelze (1) Vergleich und Untersuchung von Django-basierten CMS und Auswahl von Bachstelze Erstellen Sie ein einfaches Blog-System mit Bachstelze ~ Bachstelze lernen ①


Schreiben wir den Text

Greifen Sie von localhost auf CMS zu und klicken Sie auf die Schaltfläche "Seite". Klicken Sie dann oben auf dem Bildschirm auf "KINDERSEITE HINZUFÜGEN". Hier können Sie Ihr Blog bearbeiten.

Wenn Sie keinen Code bearbeitet haben, können Sie nur den Titel eingeben. Beziehen Sie sich auf die unten stehende Referenzseite und stellen Sie sie so ein, dass Sie den Text schreiben können.

Referenz: Bachstelzen-Seite anpassen

home/models.py



  1 from django.db import models
  2 
  3 from wagtail.core.models import Page
  4 from wagtail.core.fields import RichTextField
  5 from wagtail.admin.edit_handlers import FieldPanel
  6 
  7 
  8 class HomePage(Page):
  9     """
10 Seitenmodell
 11     """
 12     body = RichTextField(blank=True)
 13     content_panels = Page.content_panels + [FieldPanel("body", classname="full"),]

Werfen wir einen Blick auf den Code. Der Code für dieses Modell lautet Seite [Inherit](https: //blog.codecamp) .jp / python-class-2) Das HomePage-Modell wurde geschrieben. Der Text wurde als RichTextField hinzugefügt, dh als Modell des Textes. Vergessen Sie nicht, [FieldPanel] hinzuzufügen (https://github.com/wagtail/wagtail/blob/c72a4e09413bc6fc3a9cac8ed173378aa8652925/wagtail/admin/edit_handlers.py#L420). ~~ Es gibt eine Person, die hier vergessen hat ~~

Lassen Sie uns auch migrieren.


python manage.py makemigrations
python manage.py migrate

Ich denke, der Bildschirm sieht so aus. ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ スクリーンショット 2019-12-23 15.24.51.png


Schreiben wir den Vorgang beim Speichern von Titel und Text

Nachdem Sie den Titel und den Text eingegeben haben, können Sie den Inhalt speichern, indem Sie auf die Registerkarte am unteren Bildschirmrand klicken. Als Prozess zu diesem Zeitpunkt werde ich versuchen, den Titel und den Text zu validieren. Dieses Mal werde ich die Anzahl der Zeichen begrenzen. ** Speichern Sie den Titel und den Text zum Testen **

home/models.py


  1 from django.db import models
  2 
  3 from wagtail.core.models import Page
  4 from wagtail.core.fields import RichTextField
  5 from wagtail.admin.edit_handlers import FieldPanel
  6 
  7 
  8 class HomePage(Page):
  9     """
10 Seitenmodell
 11     """
 12     body = RichTextField(blank=True)
 13     content_panels = Page.content_panels + [FieldPanel("body", classname="fu    ll"),]
 14 
 15     def save(self, *args, **kwargs):
 16         """Funktion speichern"""
 17         print("Speicherfunktion eingegeben")
 18         breakpoint()

Überschreiben der Speichermethode von django.

breakpoint()

Dies ist eine Funktion, die den Debugger PDB aufruft, der in Python verwendet werden kann. Lassen Sie es uns gleich laufen.

  1. Starten Sie den lokalen Server
  2. Schreiben Sie irgendwo breakpoint ()
  3. Speichern Sie die bearbeitete Datei
  4. Führen Sie einen beliebigen Befehl aus Das folgende Protokoll wird jetzt ausgegeben.
Speicherfunktion eingegeben
--Return--
> /Users/Username/mysite/home/models.py(18)save()->None
-> breakpoint()
(Pdb) HomePage
<class 'home.models.HomePage'>
(Pdb) HomePage.objects
<django.db.models.manager.BasePageManagerFromPageQuerySet object at 0x10ebee410>
(Pdb) HomePage.objects.all()
<PageQuerySet [<HomePage: Home>, <HomePage: title>]>
(Pdb) instance = HomePage.objects.all()
(Pdb) instance
<PageQuerySet [<HomePage: Home>, <HomePage: title>]>
(Pdb) instance[1]
<HomePage: title>
(Pdb) instance[1].title
'title'
(Pdb) len(instance[1].title)
5

Sie können die Länge der Zeichenfolge mithilfe der len-Funktion ermitteln.

Bei der Entwicklung mit Django oder Bachstelze starte ich den Debugger wie folgt und überprüfe den Inhalt des Objekts. Wenn Sie danach einen bedingten Ausdruck schreiben, können Sie anscheinend die Anzahl der Zeichen im Titel überprüfen.

Laut dieser Website "Wie viele effektive Titelzeichen gibt es in Google SEO" kann das Titelzeichen bis zu 32 Zeichen lang sein. Klingt genau richtig. Dieses Mal möchte ich es so verarbeiten, dass es 33 Zeichen nicht überschreitet.

home/models.py


 16     def save(self, *args, **kwargs):
 17         """Funktion speichern"""
 18         print("Speicherfunktion eingegeben")
 19         breakpoint()
 20         instance = HomePage.objects.all() #Ich habe vergessen zu löschen
 21         titleCharCount = len(self.title)
 22         if ((titleCharCount < 0) | (titleCharCount > 32)):
 23             #Nicht validiert
 24             return
 25         else:
 26             #Validierung bestanden
 27             return super(HomePage, self).save()

Das Objekt wird nicht in Zeile 24 gespeichert. Es wird in Zeile 27 gespeichert. Lassen Sie es uns mit einem Debugger überprüfen. Wenn Sie einen ähnlichen Prozess schreiben, wird der Text validiert.


schließlich

Sie haben die Fehlermeldung, die oben auf dem Bildschirm angezeigt wird, wenn das Objekt nicht gespeichert werden kann, nicht implementiert. Nächstes Mal möchte ich die Ausgabe davon schreiben.

Recommended Posts

Ich habe Bachstelze (1) berührt und die Speichermethode überschrieben.
Ich berührte Bachstelze (3). Untersuchung und Implementierung von Popup-Nachrichten.
Überschreiben Sie die Speichermethode von Django-Modellen
Ich habe versucht, die Qiita-API zu berühren
Ich berührte Bachstelze (2). Einführung von Django-Erweiterungen.
Ich berührte Tensorflow und Keras
Ich werde die Klasse erben und überschreiben
Ich habe das Datenaufbereitungstool Paxata berührt
Lassen Sie uns mit Python Receive spielen und den Text des Eingabeformulars speichern / anzeigen
12. Speichern Sie die erste Spalte in col1.txt und die zweite Spalte in col2.txt
Ich habe versucht, die Daten mit Zwietracht zu speichern
Ich habe die Methode der kleinsten Quadrate in Python ausprobiert
Ich habe einige der neuen Funktionen von Python 3.8 touched angesprochen
Ich habe die Varianten von UKR gelesen und implementiert
[Notizen] ① Tweets abrufen und speichern ~ Ich möchte die Nachrichten-Tweets identifizieren, die verbreitet werden ~