[PYTHON] J'ai touché Wagtail (1) et remplaçons la méthode de sauvegarde.

introduction

Bonjour

Je développais avec Wagtail il y a quelque temps. Il n'y a pas beaucoup de documents japonais dans Wagtail, vous devez donc lire les documents en anglais.

En tant qu'ingénieur, la capacité de lire la littérature anglaise est très importante, ** J'aimerais qu'il y ait un document écrit en japonais ** Je pense que beaucoup de gens le pensent. ~~ Je pense ~~

Donc, je voudrais écrire du code en utilisant Wagtail et le sortir. Cette fois, c'est la première d'entre elles.


À propos de Bergeronnette

Je pense que certaines personnes pensent à la bergeronnette en premier lieu.

Bergeronnette est OSS de CMS développé sur la base de Django. /word15874.html). WordPress fonctionne sur PHP, tandis que Wagtail fonctionne sur Python. Comme vous pouvez le voir dans la Note de publication, le développement est assez actif.

À propos, Bergeronnette est un mot qui correspond à sekirei en japonais. Le logo Wagtail est également réalisé avec un beau motif.


Préparons l'environnement

Touchons-le immédiatement. Je le fais sur mac. Concernant la construction de l'environnement, je me suis référé au site suivant.

référence: Recommandation de Wagtail (1) Comparaison et examen du CMS basé sur Django et sélection de Wagtail Créer un système de blog simple avec la bergeronnette ~ Apprendre la bergeronnette ①


Écrivons le texte

Accédez au CMS depuis localhost et cliquez sur le "bouton Page". Cliquez ensuite sur "AJOUTER UNE PAGE ENFANT" en haut de l'écran. Vous pouvez modifier votre blog ici.

Si vous n'avez modifié aucun code, vous ne pouvez saisir que le titre. Reportez-vous au site de référence ci-dessous et définissez-le de manière à pouvoir écrire le texte.

Référence: Personnaliser la page Wagtail

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     """
Modèle 10 pages
 11     """
 12     body = RichTextField(blank=True)
 13     content_panels = Page.content_panels + [FieldPanel("body", classname="full"),]

Jetons un coup d'œil au code. Le code de ce modèle est Page [Inherit](https: //blog.codecamp) .jp / python-class-2) Le modèle HomePage est écrit. Ajout du corps comme RichTextField, c'est-à-dire le modèle du texte. N'oubliez pas d'ajouter FieldPanel. ~~ Il y a une personne qui a oublié ici ~~

Migrons également.


python manage.py makemigrations
python manage.py migrate

Je pense que l'écran d'affichage ressemble à ceci. ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ スクリーンショット 2019-12-23 15.24.51.png


Écrivons l'opération lors de l'enregistrement du titre et du texte

Après avoir rempli le titre et le corps, vous pouvez enregistrer le contenu en cliquant sur l'onglet en bas de l'écran. Comme processus à ce moment-là, je vais essayer de valider le titre et le corps. Cette fois, je limiterai le nombre de caractères. ** Enregistrez le titre et le corps pour le test **

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     """
Modèle 10 pages
 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         """fonction de sauvegarde"""
 17         print("Fonction de sauvegarde entrée")
 18         breakpoint()

Remplacer la méthode de sauvegarde de django.

breakpoint()

Il s'agit d'une fonction qui appelle le débogueur PDB qui peut être utilisé en Python. Lançons-le tout de suite.

  1. Démarrez le serveur local
  2. Écrivez point d'arrêt () n'importe où
  3. Enregistrez le fichier modifié
  4. Exécutez n'importe quelle commande Le journal suivant est maintenant sorti.
Fonction de sauvegarde entrée
--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

Vous pouvez connaître la longueur de la chaîne en utilisant la fonction len.

Lors du développement avec Django ou Wagtail, je lance le débogueur comme ceci et vérifie le contenu de l'objet. Après cela, si vous écrivez une expression conditionnelle, il semble que vous puissiez valider le nombre de caractères dans le titre.

Selon ce site "Quel est le nombre de caractères dans un titre qui est efficace dans Google SEO", le caractère du titre peut comporter jusqu'à 32 caractères environ. Ça a l'air juste. Cette fois, je voudrais le traiter de sorte qu'il ne dépasse pas 33 caractères.

home/models.py


 16     def save(self, *args, **kwargs):
 17         """fonction de sauvegarde"""
 18         print("Fonction de sauvegarde entrée")
 19         breakpoint()
 20         instance = HomePage.objects.all() #J'ai oublié d'effacer
 21         titleCharCount = len(self.title)
 22         if ((titleCharCount < 0) | (titleCharCount > 32)):
 23             #Pas validé
 24             return
 25         else:
 26             #Validation réussie
 27             return super(HomePage, self).save()

L'objet n'est pas enregistré à la ligne 24. Il est enregistré à la ligne 27. Vérifions-le à l'aide d'un débogueur. Si vous écrivez un processus similaire, le texte sera validé.


à la fin

Vous n'avez pas implémenté le message d'erreur qui apparaît en haut de l'écran lorsque l'objet ne peut pas être enregistré. La prochaine fois, j'aimerais en écrire la sortie.

Recommended Posts

J'ai touché Wagtail (1) et remplaçons la méthode de sauvegarde.
J'ai touché Bergeronnette (3). Enquête et mise en place de messages pop-up.
Remplacer la méthode save de django-models
J'ai essayé de toucher l'API Qiita
J'ai touché Bergeronnette (2). Introduction des extensions django.
J'ai touché Tensorflow et keras
J'hériterai et remplacerai la classe
J'ai touché à l'outil de préparation de données Paxata
Jouons avec Python Receive et enregistrez / affichez le texte du formulaire de saisie
12. Enregistrez la première colonne dans col1.txt et la deuxième colonne dans col2.txt
J'ai essayé de sauvegarder les données avec discorde
J'ai essayé la méthode des moindres carrés en Python
J'ai touché certaines des nouvelles fonctionnalités de Python 3.8 ①
J'ai lu et implémenté les variantes de UKR
[Notes] ① Obtenez et enregistrez des tweets ~ Je veux identifier les tweets d'actualité qui seront diffusés ~