Maison développement back-end Tutoriel Python Créez un enregistrement de courrier électronique anti-spam et opt-in avec Python

Créez un enregistrement de courrier électronique anti-spam et opt-in avec Python

Aug 14, 2024 pm 02:35 PM

Build an anti-spam, opt-in Email registration with Python

Vous souhaitez donc créer une application et attirer de nombreux utilisateurs ?

Nous le faisons tous et si vous êtes débutant, vous devez prendre en compte les fonctionnalités d'inscription par e-mail suivantes.

  1. Adresse email valide avec un mot de passe fort
  2. Prévention des robots
  3. Inscription à double opt-in

Un système d'inscription par e-mail solide est essentiel pour les applications Web, les newsletters, les téléchargements gratuits, les invitations à des groupes privés et la génération de leads. Ne comptons pas sur l'utilisation de services tiers tels que Auth0, Facebook ou Google pour accéder à votre application. Gardez les données de votre application !

Pour commencer, vous devez avoir une certaine expérience en Python car nous allons utiliser le framework Flask avec une base de données MySQL. Cela va être plus amusant que d'utiliser Wordpress, le CMS le plus populaire. Vous devrez payer pour un plugin Wordpress pour avoir les mêmes fonctionnalités qu'une extension Flask gratuite. J'ai déjà construit sur les deux et je préfère Python Flask pour les applications Web, même si Wordpress est très capable de créer des applications Web.

Chaque extrait de code sera expliqué et inclura quelques commentaires dans le code. Si vous n'avez pas créé d'enregistrement d'utilisateur ou si vous ne connaissez pas le fonctionnement interne, je décrirai les détails pour vous. Voici un résumé des fonctionnalités que nous mettrons en œuvre comme indiqué dans le premier paragraphe :

  1. Une adresse e-mail valide peut être vérifiée en analysant la chaîne d'entrée de l'utilisateur à l'aide d'une expression régulière ou d'une extension Flask. Nous n'autoriserons pas les hacks de type texte aléatoire ni injection SQL.

  2. La
  3. La prévention des robots peut être effectuée avec un champ caché qui n'est pas affiché à l'utilisateur mais qui est généralement rempli automatiquement par les robots qui explorent les formulaires d'inscription vulnérables.

  4. La méthode de double opt-in nécessite que le destinataire vous autorise à lui envoyer un e-mail en recevant un lien de validation dans sa boîte de réception. Ceci est principalement utilisé pour empêcher quelqu'un d'autre d'utiliser votre adresse e-mail. Cela empêche également les utilisateurs de test qui se contentent de s'inscrire et d'abandonner leur compte.

Codons-le !

Créez un répertoire de travail :

mkdir signup
cd signup
Copier après la connexion

Créez votre environnement Python en utilisant python3 -m venv signup ou conda create -n signup python3. Je préfère conda.

Créez une table MySQL pour stocker vos utilisateurs. Le champ validé est pour le double opt-in :

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    email VARCHAR(120) NOT NULL UNIQUE,
    password VARCHAR(120) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    validated BOOLEAN DEFAULT FALSE
);
Copier après la connexion

Installer les dépendances :
pip flask flask-mail sécurisé SQLAlchemy Flask-WTF Flask-SQLAlchemy mysql-connector-python

Alternativement, vous pouvez avoir la même chose répertoriée dans un fichier exigences.txt et exécuter pip install -r exigences.txt

Créez le fichier app.py avec les dépendances suivantes :

from flask import Flask, render_template, request, url_for, redirect, flash
from flask_mail import Mail, Message
from datetime import datetime
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy.sql import func
from itsdangerous import URLSafeTimedSerializer, SignatureExpired
from werkzeug.security import generate_password_hash, check_password_hash
import secrets
Copier après la connexion

Entrez vos propres données de configuration de serveur en utilisant ces lignes :

# Flask configurations
secret = secrets.token_urlsafe(32)
app.secret_key = secret
app.config['SECRET_KEY'] = secret # auto-generated secret key

# SQLAlchemy configurations
SQLALCHEMY_DATABASE_URI = 'mysql+mysqlconnector://admin:user@localhost/tablename'

# Email configurations
app.config['MAIL_SERVER'] = 'smtp.example.com'
app.config['MAIL_PORT'] = 587
app.config['MAIL_USERNAME'] = 'your_email@example.com'
app.config['MAIL_PASSWORD'] = 'your_password'
app.config['MAIL_USE_TLS'] = True
app.config['MAIL_USE_SSL'] = False

db = SQLAlchemy(app)
mail = Mail(app)
s = URLSafeTimedSerializer(app.config['SECRET_KEY']) #set secret to the serliazer
Copier après la connexion

En fin de compte, vous devriez avoir vos informations de configuration dans un fichier .env.

La section suivante utilise la structure ORM de SQLAlchemy pour interroger la base de données pour vous. Notez que le nom de la classe doit correspondre au nom de votre table de base de données sinon vous obtiendrez une erreur. Le db.model représente les paramètres de votre table qui incluent le nom de la colonne, son type, sa longueur, sa clé et sa valeur nulle :

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(120), unique=True, nullable=False)
    password = db.Column(db.String(120), nullable=False)
    created_at = db.Column(db.DateTime, server_default=db.func.now())
    validated = db.Column(db.Boolean, default=False)
Copier après la connexion

Si vous n'avez pas déjà créé manuellement la table de la base de données MySQL, vous pouvez le faire avec ce code Flask directement après le bloc de code utilisateur de la classe :

# Create the database table
with app.app_context():
    db.create_all()
Copier après la connexion

Par souci de concision de ce didacticiel, nous ignorons la page d'index ou ce que vous voudriez appeler la page d'accueil de votre application et affichons simplement la page d'inscription à l'aide de la fonction de décoration de Python pour l'itinéraire de la page :

@app.route('/')
def index():
    return '<h1>Homepage</h1>'

@app.route('/signup', methods=['GET', 'POST'])
def signup():
    if request.method == 'POST':
        # Hidden field validation to prevent bot submission
        hidden_field = request.form.get('hidden_field')
        if hidden_field:
            return redirect(url_for('index'))  # Bot detected, ignore submission

        email = request.form['email']
        password = request.form['password']
        hashed_password = generate_password_hash(password, method='sha256')

        # Insert user into the database
        new_user = User(email=email, password=hashed_password)
        db.session.add(new_user)
        db.session.commit()

        # Send confirmation email
        token = s.dumps(email, salt='email-confirm')
        msg = Message('Confirm your Email', sender='your_email@example.com', recipients=[email])
        link = url_for('confirm_email', token=token, _external=True)
        msg.body = f'Your link is {link}'
        mail.send(msg)
        flash('A confirmation email has been sent to your email address.', 'success')
        return redirect(url_for('index'))
    return render_template('signup.html')
Copier après la connexion

Avant d'ajouter le formulaire d'inscription html, complétons le backend en ajoutant l'itinéraire de validation de la fonctionnalité de double opt-in. Cette route utilise la variable s que nous avons créée précédemment qui génère le jeton secret sensible au temps. Voir la documentation pour plus de détails
L'âge maximum correspond aux secondes précédant l'expiration du lien. Dans ce cas, l'utilisateur dispose de 20 minutes pour confirmer son adresse e-mail.

@app.route('/confirm_email/<token>')
def confirm_email(token):
    try:
        email = s.loads(token, salt='email-confirm', max_age=1200)  # Token expires after 1 hour
    except SignatureExpired:
        return '<h1>The token is expired!</h1>'

    # Update field in database
    user = User.query.filter_by(email=email).first_or_404()
    user.validated = True
    db.session.commit()

    return '<h1>Email address confirmed!</h1>'

Copier après la connexion

Maintenant, l'instruction principale omniprésente qui indique à Python d'exécuter le script si le fichier est exécuté directement (par opposition à un module importé) :

if __name__ == '__main__':
    app.run(debug=True)
Copier après la connexion

Avant de terminer ce code back-end, nous avons encore besoin du code HTML front-end pour la saisie de l'utilisateur. Nous allons le faire avec le modèle Jinja intégré de Flask. Créez un fichier nommé templates/signup.html dont le nom doit correspondre à l'itinéraire que vous avez créé précédemment dans app.py. Par défaut, Jinja utilise le répertoire /templates pour les fichiers html. Vous pouvez modifier ce paramètre mais pour ce tutoriel, nous allons utiliser le répertoire /templates de l'application.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Email Sign Up</title>
</head>
<body>
    <h1>Sign Up</h1>
    <form action="{{ url_for('signup') }}" method="POST">
        <input type="email" name="email" placeholder="Enter your email" required>
        <input type="password" name="password" placeholder="Enter your password" required>
        <input type="hidden" name="bot_check"> 
        <input type="submit" value="Sign Up">
    </form>
    {% with messages = get_flashed_messages(with_categories=true) %}
      {% if messages %}
        <ul>
          {% for category, message in messages %}
            <li>{{ message }}</li>
          {% endfor %}
        </ul>
      {% endif %}
    {% endwith %}
</body>
</html>

Copier après la connexion

Votre code devrait fonctionner à partir de ce point lorsque vous exécutez la commande flask avec le débogage activé. Cela vous permettra de voir les erreurs éventuelles dans la ligne de commande ainsi que dans la fenêtre du navigateur :

flask --app app.py --debug run 
Copier après la connexion

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 de ce site Web
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

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 !

Article chaud

<🎜>: Bubble Gum Simulator Infinity - Comment obtenir et utiliser les clés royales
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
<🎜>: Grow A Garden - Guide de mutation complet
3 Il y a quelques semaines By DDD
Nordhold: Système de fusion, expliqué
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Comment déverrouiller le grappin
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Tutoriel Java
1676
14
Tutoriel PHP
1278
29
Tutoriel C#
1257
24
Python vs C: courbes d'apprentissage et facilité d'utilisation Python vs C: courbes d'apprentissage et facilité d'utilisation Apr 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é.

Apprendre Python: 2 heures d'étude quotidienne est-elle suffisante? Apprendre Python: 2 heures d'étude quotidienne est-elle suffisante? Apr 18, 2025 am 12:22 AM

Est-ce suffisant pour apprendre Python pendant deux heures par jour? Cela dépend de vos objectifs et de vos méthodes d'apprentissage. 1) Élaborer un plan d'apprentissage clair, 2) Sélectionnez les ressources et méthodes d'apprentissage appropriées, 3) la pratique et l'examen et la consolidation de la pratique pratique et de l'examen et de la consolidation, et vous pouvez progressivement maîtriser les connaissances de base et les fonctions avancées de Python au cours de cette période.

Python vs. C: Explorer les performances et l'efficacité Python vs. C: Explorer les performances et l'efficacité Apr 18, 2025 am 12:20 AM

Python est meilleur que C dans l'efficacité du développement, mais C est plus élevé dans les performances d'exécution. 1. La syntaxe concise de Python et les bibliothèques riches améliorent l'efficacité du développement. Les caractéristiques de type compilation et le contrôle du matériel de CC améliorent les performances d'exécution. Lorsque vous faites un choix, vous devez peser la vitesse de développement et l'efficacité de l'exécution en fonction des besoins du projet.

Python vs C: Comprendre les principales différences Python vs C: Comprendre les principales différences Apr 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.

Quelle partie fait partie de la bibliothèque standard Python: listes ou tableaux? Quelle partie fait partie de la bibliothèque standard Python: listes ou tableaux? Apr 27, 2025 am 12:03 AM

PythonlistSaReparmentofthestandardLibrary, tandis que les coloccules de colocède, tandis que les colocculations pour la base de la Parlementaire, des coloments de forage polyvalent, tandis que la fonctionnalité de la fonctionnalité nettement adressée.

Python: automatisation, script et gestion des tâches Python: automatisation, script et gestion des tâches Apr 16, 2025 am 12:14 AM

Python excelle dans l'automatisation, les scripts et la gestion des tâches. 1) Automatisation: La sauvegarde du fichier est réalisée via des bibliothèques standard telles que le système d'exploitation et la fermeture. 2) Écriture de script: utilisez la bibliothèque PSUTIL pour surveiller les ressources système. 3) Gestion des tâches: utilisez la bibliothèque de planification pour planifier les tâches. La facilité d'utilisation de Python et la prise en charge de la bibliothèque riche en font l'outil préféré dans ces domaines.

Python pour l'informatique scientifique: un look détaillé Python pour l'informatique scientifique: un look détaillé Apr 19, 2025 am 12:15 AM

Les applications de Python en informatique scientifique comprennent l'analyse des données, l'apprentissage automatique, la simulation numérique et la visualisation. 1.Numpy fournit des tableaux multidimensionnels et des fonctions mathématiques efficaces. 2. Scipy étend la fonctionnalité Numpy et fournit des outils d'optimisation et d'algèbre linéaire. 3. Pandas est utilisé pour le traitement et l'analyse des données. 4.Matplotlib est utilisé pour générer divers graphiques et résultats visuels.

Python pour le développement Web: applications clés Python pour le développement Web: applications clés Apr 18, 2025 am 12:20 AM

Les applications clés de Python dans le développement Web incluent l'utilisation des cadres Django et Flask, le développement de l'API, l'analyse et la visualisation des données, l'apprentissage automatique et l'IA et l'optimisation des performances. 1. Framework Django et Flask: Django convient au développement rapide d'applications complexes, et Flask convient aux projets petits ou hautement personnalisés. 2. Développement de l'API: Utilisez Flask ou DjangorestFramework pour construire RestulAPI. 3. Analyse et visualisation des données: utilisez Python pour traiter les données et les afficher via l'interface Web. 4. Apprentissage automatique et AI: Python est utilisé pour créer des applications Web intelligentes. 5. Optimisation des performances: optimisée par la programmation, la mise en cache et le code asynchrones

See all articles