[Python] Si vous souhaitez soudainement créer un formulaire de demande

Ravi de vous rencontrer. C'est Taro Man. Je développe généralement des services Web.

introduction

L'autre jour, j'ai soudain voulu préparer un ** formulaire de demande **, De plus, je voulais envoyer le contenu à mon ** adresse e-mail **, donc Implémenté en ** Python **.

Vue d'ensemble

Cet article utilise ** Django **. Django est très pratique.

本文を追加.png

Définition du formulaire

La définition du formulaire se fait dans forms.py.

Fondamentalement, il est créé en important la ** fonction standard de Django **.

De plus, définissez des ** éléments de formulaire **. C'est comme "nom", "coordonnées", "contenu de l'enquête". Vous pouvez également définir des paramètres obligatoires et des restrictions de caractères pour chaque élément.

Exemple de code
#Importer les fonctionnalités standard de Django
from django import forms
from django.core.mail import BadHeaderError, send_mail
from django.http import HttpResponse
#Importer les paramètres Django
from django.conf import settings


class ContactForm(forms.Form):
    #En tant qu'élément de formulaire"Nom"Définir
    name = forms.CharField(
        label='',
        max_length=100,
        widget=forms.TextInput(attrs={
            'class': 'form-control',
            'placeholder': "Nom",
        }),
    )
    #En tant qu'élément de formulaire"adresse mail"Définir
    email = forms.EmailField(
        label='',
        widget=forms.EmailInput(attrs={
            'class': 'form-control',
            'placeholder': "adresse mail",
        }),
    )
    #En tant qu'élément de formulaire"Contenu de la demande"Définir
    message = forms.CharField(
        label='',
        widget=forms.Textarea(attrs={
            'class': 'form-control',
            'placeholder': "Contenu de la demande",
        }),
    )

    #envoyer un e-mail
    def send_email(self):
        subject = "Nous contacter"
        message = self.cleaned_data['message']
        name = self.cleaned_data['name']
        email = self.cleaned_data['email']
        from_email = '{name} <{email}>'.format(name=name, email=email)
        #Spécifier la liste des destinataires
        recipient_list = [settings.EMAIL_HOST_USER]
        try:
            send_mail(subject, message, from_email, recipient_list)
        except BadHeaderError:
            return HttpResponse("Un en-tête non valide a été détecté.")

Définition de processus

Le processus est défini dans views.py.

Ceci est également créé en important la ** fonction standard de Django **.

En outre, importez la définition de formulaire ci-dessus. Spécifiez également le HTML ** à afficher et l'URL ** à transférer.

Exemple de code
#Importer les fonctionnalités standard de Django
from django.urls import reverse_lazy
from django.views.generic import TemplateView
from django.views.generic.edit import FormView

# forms.Importer la définition de formulaire depuis py
from .forms import ContactForm

#Définir le comportement de l'événement de soumission
class ContactFormView(FormView):
    #Spécifiez le html à afficher
    template_name = 'contact_form.html'
    # form.Spécifiez le nom de classe défini dans py
    form_class = ContactForm
    #Spécifiez l'url après la transition comme argument
    success_url = reverse_lazy('contact_result')

    #Envoyer un e-mail
    def form_valid(self, form):
        form.send_email()
        return super().form_valid(form)

#Définir le comportement après avoir soumis un formulaire
class ContactResultView(TemplateView):
    #Spécifiez le html à afficher
    template_name = 'contact_result.html'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['success'] = "L'enquête a été envoyée avec succès."
        return context

Définition d'écran

Préparez un écran de demande et un écran après l'envoi de la demande.

Sur l'écran de demande, utilisez «{{form.as_p}}» pour Rend les éléments définis dans la définition de formulaire avec la balise <p>.

<détails>

Écran d'enquête </ summary>

contact_form.html


<h4>Nous contacter</h4>
  <div>
    <p><br>Veuillez saisir les informations requises.</p>
    <form method="POST">{% csrf_token %}
      {{ form.as_p }}
      <button type="submit" class="btn">Envoyer</button>
      <a href="{% url 'top' %}">Retour au sommet</a>
    </form>
  </div>
</div>
Écran après envoi d'une demande

contact_result.html


<div>
  <p>
Transmission de la demande terminée
  </p>
  <div>
    <p>
Merci pour votre demande.<br>
Nous vous répondrons après avoir confirmé le contenu.
    </p>
    <a href="{% url 'top' %}">Retour au sommet</a>
  </div>
</div>

Définition d'URL

Définissez ** URL et processus d'association ** dans ʻurls.py`.

Exemple de code
#Classe de traitement d'importation
# <PROJECT_NAME>Le nom de votre projet est-il
from <PROJECT_NAME>.views import ContactFormView, ContactResultView

urlpatterns = [
    # ...
    path('contact/', ContactFormView.as_view(), name='contact_form'),
    path('result/', ContactResultView.as_view(), name='contact_result'),
]

Définition des informations de messagerie

Enfin, settings.py définit les ** informations de messagerie ** utilisées par le programme. Spécifiez le serveur SMTP, le numéro de port et les informations utilisateur.

Exemple de code
EMAIL_HOST = 'smtp.XXX.com'
EMAIL_PORT = XXX
EMAIL_HOST_USER = '[email protected]'
EMAIL_HOST_PASSWORD = 'XXX'
EMAIL_USE_TLS = True

Résumé

En utilisant les fonctions standard de Django, nous avons pu créer facilement un formulaire de demande. J'espère que cela vous sera utile lorsque vous souhaitez créer un formulaire de demande.

Recommended Posts

[Python] Si vous souhaitez soudainement créer un formulaire de demande
Si vous souhaitez créer Word Cloud.
N'écrivez pas Python si vous voulez l'accélérer avec Python
Je veux savoir si vous installez Python sur Mac ・ Iroha
Si vous souhaitez affecter une exportation csv à une variable en python
Que faire si vous ne parvenez pas à envoyer un e-mail à Yahoo avec Python.
Si vous souhaitez inclure awsebcli dans CircleCI, spécifiez la version de python
Remarque Python: lorsque vous souhaitez connaître les attributs d'un objet
[Python] Si vous souhaitez dessiner un diagramme de dispersion de plusieurs clusters
Si vous souhaitez compter les mots en Python, il est pratique d'utiliser Counter.
Je veux créer une fenêtre avec Python
Comment créer un environnement lorsque vous souhaitez utiliser python2.7 après l'installation d'Anaconda3
Si vous souhaitez créer une application TODO (distribuée) maintenant en utilisant uniquement Python
Que faire si vous obtenez une erreur lors de l'installation de python avec pyenv
Si vous voulez créer un bot discord avec python, utilisons un framework
Si vous souhaitez utiliser Cython, incluez également python-dev
Comment créer un téléchargeur d'image avec Bottle (Python)
Que faire si vous obtenez une erreur OpenSSL lors de l'installation de Python 2 avec pyenv
Que faire si vous obtenez une erreur lors de l'importation de matplotlib en Python (Mac)
Que faire si vous exécutez python sur IntelliJ et quittez avec une erreur
Un mémo de fonction utile lorsque vous souhaitez entrer dans le débogueur si une erreur se produit lorsque vous exécutez un script Python.
[Django] Mémorandum lorsque vous souhaitez communiquer de manière asynchrone [Python3]
Je veux initialiser si la valeur est vide (python)
[Python] Comment écrire une instruction if en une phrase.
Si vous souhaitez que vos collègues utilisent la même langue
Une introduction à la programmation Python
[Python Kivy] Comment créer un fichier exe avec pyinstaller
Si vous voulez mettre un argument dans la fonction de fermeture et l'exécuter plus tard
Lorsque vous souhaitez lancer une commande UNIX sur Python
[Django] Mémo pour créer un environnement de Django + MySQL + Vue.js [Python]
[Python] Si vous créez un fichier avec le même nom que le module à importer, une erreur d'attribut se produira.
[Django] Que faire quand il y a de nombreux champs dans le modèle que vous souhaitez créer
Que faire si vous obtenez une erreur indiquant que le compilateur C ne peut pas créer d'exécutables dans configure
[Sous-processus] Lorsque vous souhaitez exécuter un autre programme Python en code Python
Voulez-vous attendre un usage général avec Python Selenium?
Si vous souhaitez devenir data scientist, commencez par Kaggle
Que faire si vous ne pouvez pas installer pyaudio avec pip #Python
Que faire si vous obtenez moins zéro en Python
[Python] Lorsque vous souhaitez utiliser toutes les variables dans un autre fichier
Indispensable si vous utilisez Python! Comment utiliser Numpy pour accélérer les calculs!
Lorsque vous souhaitez envoyer un objet avec des requêtes à l'aide de flask
[TensorFlow] Si vous souhaitez exécuter TensorBoard, installez-le avec pip.
Vérifiez si vous pouvez vous connecter à un port TCP en Python
Différentes façons de créer un tableau de nombres de 1 à 10 en Python.
[Pour Python] Créez rapidement un fichier de téléchargement vers AWS Lambda Layer
Ravi de vous rencontrer avec python
création du répertoire python Correspondance si le répertoire existe
Opérations clés que vous souhaitez connaître
5 façons de créer un chatbot Python
Je veux déboguer avec Python
Premiers pas avec Python pour les non-ingénieurs
Une alternative à `pause` en Python
[Python] Créer une API pour envoyer Gmail
[Tutoriel Python] Une introduction facile à Python