recherche
Maisondéveloppement back-endTutoriel PythonIntro au ballon: ajout d'une page de contact

Dans l'article précédent de cette mini-série, nous avons utilisé Flask pour créer un site Web simple qui contient des pages "à la maison" et "à propos" à l'aide d'un flux de travail généralisé que nous pouvons appliquer à d'autres applications Web basées sur Flask. Dans cette leçon, je vais montrer comment ajouter une page de contact qui permet aux utilisateurs de vous envoyer des messages.

Le code utilisé dans cet article peut être trouvé sur GitHub. 


Extensions du flacon

Le ballon ne vient pas avec de nombreuses fonctionnalités hors de l'étagère, ce qui facilite le ramassage et l'apprentissage. Il n'y a pas de mappeur d'objet-relation pour l'interaction de base de données ou les interfaces d'administration pour ajouter et mettre à jour le contenu. Il n'offre qu'un petit ensemble de fonctions, dont deux que nous avons déjà utilisées - dender_template () .

Au lieu d'expédier avec des fonctionnalités supplémentaires, le modèle d'extension de FLASK vous permet d'ajouter des fonctionnalités au besoin. Une extension FLASK est un package qui ajoute des fonctionnalités spécifiques à votre application. Par exemple, Flask-Sqlalchemy ajoute la prise en charge de la base de données à votre application, tandis que Flask-Login ajoute la prise en charge de la connexion / déconnexion. Vous pouvez trouver une liste complète des extensions dans le registre d'extension FLASK.

Pour créer une page de contact, nous utiliserons Flask-WTF pour gérer et valider les données du formulaire et Flask-Mail pour envoyer des données de formulaire aux données. Qu'est-ce que cela signifie? Regardez le diagramme suivant:


Un utilisateur émet une demande de remise pour une page Web qui contient un formulaire.

L'utilisateur remplit le formulaire. Plus de champs ne valident pas, la page Web contenant le formulaire se charge à nouveau avec un message d'erreur utile, incitant l'utilisateur à réessayer. flask-wtf diagram
    Si tous les champs valident, les informations de formulaire sont utilisées à l'étape suivante du pipeline.
  1. Une page de contact aura des champs pour le nom, le message, le sujet et le message de l'utilisateur. Dans Flask, nous publierons le formulaire sur une fonction à l'intérieur
  2. Routes.py
  3. . Cette fonction est appelée le gestionnaire de formulaire. Nous allons exécuter quelques vérifications de validation, et si l'une des entrées ne passe pas, nous actualiserons la page pour afficher un message qui décrit l'erreur. Une fois que tous les vérifications de validation passent, nous utiliserons les données du formulaire pour la prochaine étape: envoyez le message du message, le propriétaire du site Web. C'est ainsi que le fonctionnement de la gestion et de la validation du formulaire fonctionne. Maintenant, où définissons-nous réellement le formulaire? Nous pourrions écrire HTML en utilisant l'attribut Action
  4. à un script Python. Le script Python refléterait le formulaire afin de capturer chaque champ de formulaire et de valider les données de champ de formulaire. Si nous utilisons cette stratégie, cependant, nous définissons essentiellement le formulaire deux fois - une fois pour le front-end et une fois pour le back-end.
  5. Ce serait formidable de définir la forme une seule fois: dans le script Python. C'est exactement ce que Flask-WTF nous permet de faire. Nous définirons le formulaire une seule fois dans un script Python, puis nous laisserons FLASK-WTF générer le HTML du formulaire pour nous. Le point de tout cela est de séparer la présentation du contenu.

    Assez de bavardage. Codesons.

    Création d'une forme

    En première étape, revenons dans l'environnement de développement isolé que nous avons créé la dernière fois.

    $ cd flaskapp<br>$ . bin/activate<br>

    Maintenant que nous avons entré et activé notre environnement de développement, nous pouvons maintenant installer le Flask-wtf:

    pip install -U Flask-WTF<br>

    Définir le formulaire dans un script Python. Nous avons déjà rotes.py , qui mappe les URL aux fonctions. Ne l'encombrons pas avec du code non lié. Au lieu de cela, créez un nouveau fichier appelé forms.py et placez-le dans le dossier app / .

    app / forms.py

    from flask_wtf import FlaskForm<br>from wtforms import StringField, TextAreaField, SubmitField<br><br><br><br>class ContactForm(FlaskForm):<br>  name = StringField("Name")<br>  email = StringField("Email")<br>  subject = StringField("Subject")<br>  message = TextAreaField("Message")<br>  submit = SubmitField("Send") <br>

    Nous venons de créer un formulaire. Qu'avons-nous fait? Tout d'abord, nous avons importé quelques classes utiles à partir du Flask-WTF Contactform , héritant de & lt; input type = "text" & gt; name & lt; / input & gt; Dans un fichier html, vous écrivez à partir des formulaires d'importation de contact script.

    app / rotes.py

    from flask import Flask, render_template<br>from forms import ContactForm<br>

    Ensuite, configurez Flask-WTF pour gérer un exploit de sécurité connu sous le nom de contrefaçon de demande de site transversal (CSRF). Dans un monde parfait, votre serveur ne traiterait que des formulaires qui appartiennent à votre application Web. En d'autres termes, votre serveur ne gérerait et validerait les formulaires que vous avez créés. Cependant, il est possible pour un attaquant de créer un formulaire sur son propre site Web, de le remplir d'informations malveillantes et de la soumettre à votre serveur. Si votre serveur accepte ces informations malveillantes, toutes sortes de mauvaises choses peuvent se produire ensuite.

    Vous pouvez empêcher une attaque CSRF en vous assurant que la soumission de formulaire provient de votre application Web. Une façon de le faire est de garder un jeton unique caché à l'intérieur de votre HTML / Contact , la fonction Contact () , nous créons d'abord une nouvelle instance de notre formulaire de contact dans la ligne trois et l'envoyons à un modèle Web nommé Contact.html en ligne quatre. Nous allons créer ce modèle Web sous peu.

    Nous avons encore du travail à faire ici. Le diagramme ci-dessus a montré que si une demande GET est envoyée au serveur, la page Web contenant le formulaire doit être récupérée et chargée dans le navigateur. Si le serveur reçoit une demande de post, une fonction doit capturer les données de champ de formulaire et vérifier si elle est valide. En termes de Python, cette logique peut être exprimée dans une logique if ... else à la Render_template () dans l'article précédent, alors nous importons ici une classe de balle de plus nommée Demande détermine si la méthode HTTP actuelle est un ou un article. Ensuite, la fonction contact () (lignes 9-13).

    Dans le cas d'une demande de poste, une chaîne indiquant que le formulaire a été publié sera retourné.

    Cette chaîne est un espace réservé temporaire, et nous le remplacerons par du code réel dans la dernière étape de cet article. Sinon, si la demande utilise GET, nous renvoyons le modèle Web contact.html qui contient le formulaire.

    L'étape suivante consiste à créer le modèle Web Contact.html et le mettre à l'intérieur des modèles dossier.

    app / modèles / contact.html

    $ cd flaskapp<br>$ . bin/activate<br>
    comme avec

    home.html et À propos de.html , la contact.html Template étend la mise en page. son propre texte. Nous spécifions d'abord où envoyer les données du formulaire sur la soumission en définissant l'attribut Action Html. Le HTML rendu est renvoyé à rotes.py . Routes.py

  6. Renvoie le HTML au navigateur, et nous voyons la page de contact contenant le formulaire.
  7. Bouton.
  8. La demande de poste frappe
  9. routes.py , où le contact URL () .
  10. La fonction si ... else flux flow pour la demande de post HTTP.
  11. La chaîne / contact
  12. et remplissez la forme. Mais que se passe-t-il si l'utilisateur ne remplit pas correctement le formulaire? Nous devons valider l'entrée de l'utilisateur afin qu'elle ne cause pas de problèmes dans les étapes ultérieures. La validation du formulaire est effectuée en utilisant des validateurs de formulaire. Heureusement, Flask-WTF est livré avec de nombreux validateurs utiles et intégrés que nous pouvons utiliser tout de suite. Nous allons mettre ces validateurs dans le validateur intégré de DatareQuired
  13. de [validators = dataREQUIRED ()]
  14. à chaque champ de formulaire pour valider sa présence. Remarquez que ce validateur se trouve dans une liste Python, ce qui signifie que nous pouvons facilement ajouter plus de validateurs à cette liste. Ensuite, exigeons que les adresses e-mail correspondent au modèle Email () Validator nécessite le package EMAIL_VALIDATOR à installer, alors installez-le avec PIP comme suit:
  15. Mise à jour
  16. Suit:
  17. qui le fait pour notre validation de formulaire. Flashing Messages d'erreur

    En regardant en arrière le diagramme d'origine, si une vérification de validation échoue, la page de contact doit se recharger avec un message d'erreur afin que l'utilisateur puisse corriger l'erreur et réessayer. Ce message d'erreur ne doit apparaître que lorsque la validation échoue et disparaît lorsque l'erreur a été corrigée.

    Notre prochaine étape consiste à envoyer ce type de message d'erreur temporaire à l'utilisateur lorsque la validation échoue. Flask rend cela très facile en utilisant sa fonction flash ()
    pip install -U Flask-WTF<br>
    au début du script.

    app / routes.py

    from flask_wtf import FlaskForm<br>from wtforms import StringField, TextAreaField, SubmitField<br><br><br><br>class ContactForm(FlaskForm):<br>  name = StringField("Name")<br>  email = StringField("Email")<br>  subject = StringField("Subject")<br>  message = TextAreaField("Message")<br>  submit = SubmitField("Send") <br>
    $ cd flaskapp<br>$ . bin/activate<br>

    Une fois que le formulaire de contact publie sur le serveur, toute panne de validation doit recharger le formulaire avec un message d'erreur utile. Sinon, les données d'entrée peuvent être utilisées pour un traitement futur. Encore une fois, cette logique peut être exprimée dans une logique if ... else à la demande if request.method == 'post': block.

    app / routes.py

    pip install -U Flask-WTF<br>

    si une vérification de validation échoue, faux . Le formulaire de message d'erreur publié , indiquant que le formulaire a été soumis avec succès.

    Ensuite, modifions contact.html afin qu'il puisse recevoir et afficher ces messages d'erreur temporaires. Voir le bloc suivant:

    from flask_wtf import FlaskForm<br>from wtforms import StringField, TextAreaField, SubmitField<br><br><br><br>class ContactForm(FlaskForm):<br>  name = StringField("Name")<br>  email = StringField("Email")<br>  subject = StringField("Subject")<br>  message = TextAreaField("Message")<br>  submit = SubmitField("Send") <br>

    La fonction de la boucle . Ajoutez ce bloc de code à contact.html after & lt; form & gt; tag.

    appre / templates / contact.html

    from flask import Flask, render_template<br>from forms import ContactForm<br>

    Enfin, ajoutons une règle CSS dans main.css jolie.

    main.css

    {% extends "layout.html" %}<br>{% block content %}<br><br>  <h2 id="Contact">Contact</h2><br>  <br>  

    {{ form.hidden_tag() }}
    {{ form.name.label }}
    {{ form.name }}
    {{ form.email.label }}
    {{ form.email }}
    {{ form.subject.label }}
    {{ form.subject }}
    {{ form.message.label }}
    {{ form.message }}
    {{ form.submit }}

    {% endblock %}

    Ouvrez votre navigateur et visitez http: // localhost: 5000 / contact. Laissez tous les champs vides et cliquez sur Envoyez pour tester si la validation du formulaire et le message d'erreur Flashing Work.

    form with error message

    C'est doux! Nous avons réussi à envoyer un message d'erreur à notre formulaire de contact si une vérification de validation échoue.

    Mais nous n'avons pas fini; Nous pouvons en fait faire un peu mieux. Au lieu d'avoir un message d'erreur générique pour toutes les vérifications de validation échouées, il serait préférable d'avoir un message d'erreur spécifique pour chaque vérification de validation échouée. Par exemple, si l'utilisateur oublie de remplir le champ du sujet, un message d'erreur spécifique qui indique, veuillez saisir votre nom . Nous pouvons y parvenir assez facilement, alors commençons par écrire nos messages d'erreur spécifiques à l'intérieur de chaque validateur dans forms.py .

    app / forms.py

    pip install email-validator<br>

    Nous écrivons simplement des messages d'erreur spécifiques à l'intérieur de chaque validateur. Ensuite, modifions contact.html pour recevoir et afficher ces messages d'erreur spécifiques. Plus tôt, nous nous sommes appuyés sur l'attribut d'erreurs de fonction pour chaque champ de formulaire pour extraire les messages d'erreur spécifiques et les boucler sur eux en utilisant la classe Jinja2 Message et message pour composer un nouvel e-mail et la variable Mail qui contient une instance utilisable de l'application app.config ["Mail_Username"] et Mail 17).

    Vous avez probablement vu des groupes utiliser des adresses e-mail de contact comme support@example.com . Si vous possédez votre propre domaine et que vous pouvez créer une nouvelle adresse e-mail de contact, allez-y et mettez cette adresse e-mail dans si demande.Method == 'Post': Bloquer à nouveau. Nous avons déjà ajouté une logique à l'intérieur du formulaire Form.Validate () sera le bloc autre . Par conséquent, allons-y et ajoutons la logique à l'intérieur de la classe Message prend une ligne d'objet, une adresse "de" et une adresse "à". Nous collectons ensuite les données sur le champ sujet du formulaire de contact avec app.config ["Mail_username"] , c'est donc ce que nous avons utilisé ici pour l'adresse de depuis. L'e-mail sera envoyé à votre adresse e-mail personnelle afin que vous puissiez recevoir et répondre à de nouveaux messages.

    Ensuite, nous écrivons l'e-mail lui-même (lignes 11-14). Nous incluons le nom, l'e-mail et le message de l'utilisateur. J'utilise l'opérateur de formatage de chaîne de Python Mail.send (msg) pour envoyer l'e-mail (ligne 15).

    Voyons si tout fonctionne. Visitez http: // localhost: 5000 / contact, remplissez chaque champ et cliquez sur "Envoyer". Si tout se passe bien, vous recevrez un nouvel e-mail de votre application FLASK.

    Ranger

    Notre avant-dernière étape consiste à supprimer la chaîne temporaire si ... else instruction.

    Lorsque le formulaire de contact aura été soumis avec succès, nous enverrons un indicateur de réussite de routes.py contact.html .

    Nous placerons le vrai , nous afficherons le message de remerciement. Sinon, nous afficherons le formulaire de contact.

    Commençons dans routes.py à l'intérieur du formulaire de retour 'publié.' avec contact () ressemble maintenant à ceci:

    app / routes.py

    $ cd flaskapp<br>$ . bin/activate<br>

    Suivant, Open Contact.HTML %} signifie que si l'indicateur de réussite que nous avons envoyé de routes.py est défini sur & lt; p & gt; merci pour votre message. Nous vous répondrons sous peu. & Lt; / p & gt; . Sinon, suivez l'instruction if ... else avec & lt; en-tête & gt; élément. Faisons également cela pour la page de contact (ligne huit).

    applications / modèles / disposition.html

    pip install -U Flask-WTF<br>
    Ouvrez le navigateur et rafraîchissez http: // localhost: 5000 / pour voir le lien de navigation nouvelle. Nous avons ajouté une page de contact contenant un formulaire à notre application Flask. Les formulaires apparaissent à plusieurs endroits des applications Web, notamment lors de l'inscription et de la connexion. Ce flux de travail peut être adapté pour répondre à ces besoins. Lors de la création d'une page de contact, nous avons appris à utiliser les extensions de flacon.

    flask app with navigation link added Les extensions du flacon sont des outils simples et puissants qui étendent la fonctionnalité de votre application basée sur Flask.

    Consultez le registre d'extension FLASK pour explorer de nombreuses autres extensions que vous pouvez intégrer dans votre application.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Python vs C: Comprendre les principales différencesPython vs C: Comprendre les principales différencesApr 21, 2025 am 12:18 AM

Python et C ont chacun leurs propres avantages, et le choix doit être basé sur les exigences du projet. 1) Python convient au développement rapide et au traitement des données en raison de sa syntaxe concise et de son typage dynamique. 2) C convient à des performances élevées et à une programmation système en raison de son typage statique et de sa gestion de la mémoire manuelle.

Python vs C: Quelle langue choisir pour votre projet?Python vs C: Quelle langue choisir pour votre projet?Apr 21, 2025 am 12:17 AM

Le choix de Python ou C dépend des exigences du projet: 1) Si vous avez besoin de développement rapide, de traitement des données et de conception du prototype, choisissez Python; 2) Si vous avez besoin de performances élevées, de faible latence et de contrôle matériel, choisissez C.

Atteindre vos objectifs python: la puissance de 2 heures par jourAtteindre vos objectifs python: la puissance de 2 heures par jourApr 20, 2025 am 12:21 AM

En investissant 2 heures d'apprentissage Python chaque jour, vous pouvez améliorer efficacement vos compétences en programmation. 1. Apprenez de nouvelles connaissances: lire des documents ou regarder des tutoriels. 2. Pratique: Écrivez du code et complétez les exercices. 3. Revue: consolider le contenu que vous avez appris. 4. Pratique du projet: Appliquez ce que vous avez appris dans les projets réels. Un tel plan d'apprentissage structuré peut vous aider à maîtriser systématiquement Python et à atteindre des objectifs de carrière.

Maximiser 2 heures: stratégies d'apprentissage Python efficacesMaximiser 2 heures: stratégies d'apprentissage Python efficacesApr 20, 2025 am 12:20 AM

Les méthodes pour apprendre Python efficacement dans les deux heures incluent: 1. Passez en revue les connaissances de base et assurez-vous que vous connaissez l'installation de Python et la syntaxe de base; 2. Comprendre les concepts de base de Python, tels que les variables, les listes, les fonctions, etc.; 3. Master Basic et Advanced Utilisation en utilisant des exemples; 4. Apprenez des erreurs courantes et des techniques de débogage; 5. Appliquer l'optimisation des performances et les meilleures pratiques, telles que l'utilisation des compréhensions de la liste et le suivi du guide de style PEP8.

Choisir entre Python et C: La bonne langue pour vousChoisir entre Python et C: La bonne langue pour vousApr 20, 2025 am 12:20 AM

Python convient aux débutants et à la science des données, et C convient à la programmation système et au développement de jeux. 1. Python est simple et facile à utiliser, adapté à la science des données et au développement Web. 2.C fournit des performances et un contrôle élevés, adaptés au développement de jeux et à la programmation système. Le choix doit être basé sur les besoins du projet et les intérêts personnels.

Python vs C: Une analyse comparative des langages de programmationPython vs C: Une analyse comparative des langages de programmationApr 20, 2025 am 12:14 AM

Python est plus adapté à la science des données et au développement rapide, tandis que C est plus adapté aux performances élevées et à la programmation système. 1. La syntaxe Python est concise et facile à apprendre, adaptée au traitement des données et à l'informatique scientifique. 2.C a une syntaxe complexe mais d'excellentes performances et est souvent utilisée dans le développement de jeux et la programmation système.

2 heures par jour: le potentiel de l'apprentissage python2 heures par jour: le potentiel de l'apprentissage pythonApr 20, 2025 am 12:14 AM

Il est possible d'investir deux heures par jour pour apprendre Python. 1. Apprenez de nouvelles connaissances: apprenez de nouveaux concepts en une heure, comme les listes et les dictionnaires. 2. Pratique et pratique: utilisez une heure pour effectuer des exercices de programmation, tels que la rédaction de petits programmes. Grâce à une planification et à une persévérance raisonnables, vous pouvez maîtriser les concepts de base de Python en peu de temps.

Python vs C: courbes d'apprentissage et facilité d'utilisationPython vs C: courbes d'apprentissage et facilité d'utilisationApr 19, 2025 am 12:20 AM

Python est plus facile à apprendre et à utiliser, tandis que C est plus puissant mais complexe. 1. La syntaxe Python est concise et adaptée aux débutants. Le typage dynamique et la gestion automatique de la mémoire le rendent facile à utiliser, mais peuvent entraîner des erreurs d'exécution. 2.C fournit des fonctionnalités de contrôle de bas niveau et avancées, adaptées aux applications haute performance, mais a un seuil d'apprentissage élevé et nécessite une gestion manuelle de la mémoire et de la sécurité.

See all articles

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

DVWA

DVWA

Damn Vulnerable Web App (DVWA) est une application Web PHP/MySQL très vulnérable. Ses principaux objectifs sont d'aider les professionnels de la sécurité à tester leurs compétences et leurs outils dans un environnement juridique, d'aider les développeurs Web à mieux comprendre le processus de sécurisation des applications Web et d'aider les enseignants/étudiants à enseigner/apprendre dans un environnement de classe. Application Web sécurité. L'objectif de DVWA est de mettre en pratique certaines des vulnérabilités Web les plus courantes via une interface simple et directe, avec différents degrés de difficulté. Veuillez noter que ce logiciel

mPDF

mPDF

mPDF est une bibliothèque PHP qui peut générer des fichiers PDF à partir de HTML encodé en UTF-8. L'auteur original, Ian Back, a écrit mPDF pour générer des fichiers PDF « à la volée » depuis son site Web et gérer différentes langues. Il est plus lent et produit des fichiers plus volumineux lors de l'utilisation de polices Unicode que les scripts originaux comme HTML2FPDF, mais prend en charge les styles CSS, etc. et présente de nombreuses améliorations. Prend en charge presque toutes les langues, y compris RTL (arabe et hébreu) ​​et CJK (chinois, japonais et coréen). Prend en charge les éléments imbriqués au niveau du bloc (tels que P, DIV),

SublimeText3 version anglaise

SublimeText3 version anglaise

Recommandé : version Win, prend en charge les invites de code !

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser