"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > पायथन के साथ एक एंटी-स्पैम, ऑप्ट-इन ईमेल पंजीकरण बनाएं

पायथन के साथ एक एंटी-स्पैम, ऑप्ट-इन ईमेल पंजीकरण बनाएं

2024-09-01 को प्रकाशित
ब्राउज़ करें:530

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

तो क्या आप एक ऐप बनाना चाहते हैं और कई उपयोगकर्ता प्राप्त करना चाहते हैं?

हम सभी ऐसा करते हैं और यदि आप नौसिखिया हैं तो आपको निम्नलिखित ईमेल साइन-अप सुविधाओं को ध्यान में रखना होगा।

  1. एक मजबूत पासवर्ड के साथ वैध ईमेल पता
  2. बॉट रोकथाम
  3. डबल ऑप्ट-इन साइन-अप

वेब ऐप्स, न्यूज़लेटर्स, मुफ्त डाउनलोड, निजी समूहों के लिए आमंत्रण और लीड जनरेशन के लिए एक ठोस ईमेल साइन-अप प्रणाली आवश्यक है। आइए आपके ऐप तक पहुंच पाने के लिए Auth0, Facebook, या Google जैसी तृतीय पक्ष सेवाओं के उपयोग पर निर्भर न रहें। अपना ऐप डेटा अपना रखें!

शुरू करने के लिए, आपके पास पायथन में कुछ अनुभव होना चाहिए क्योंकि हम MySQL डेटाबेस के साथ फ्लास्क फ्रेमवर्क का उपयोग करने जा रहे हैं। यह सबसे लोकप्रिय सीएमएस वर्डप्रेस का उपयोग करने से अधिक मजेदार होने वाला है। मुफ़्त फ्लास्क एक्सटेंशन के समान क्षमता रखने के लिए आपको कुछ वर्डप्रेस प्लगइन के लिए भुगतान करना होगा। मैंने पहले दोनों पर निर्माण किया है और वेब ऐप्स के लिए पायथन फ्लास्क को प्राथमिकता देता हूं, भले ही वर्डप्रेस वेब ऐप्स बनाने में बहुत सक्षम है।

प्रत्येक कोड स्निपेट की व्याख्या की जाएगी और कोड में कुछ टिप्पणियाँ शामिल की जाएंगी। यदि आपने उपयोगकर्ता-पंजीकरण नहीं बनाया है या आंतरिक कामकाज के बारे में नहीं जानते हैं, तो मैं आपके लिए विवरण का वर्णन करूंगा। यहां उन सुविधाओं का सारांश दिया गया है जिन्हें हम पहले पैराग्राफ में बताए अनुसार लागू करेंगे:

  1. एक वैध ईमेल पता को रेगुलर एक्सप्रेशन या फ्लास्क एक्सटेंशन का उपयोग करके उपयोगकर्ता से इनपुट स्ट्रिंग को पार्स करके जांचा जा सकता है। हम न तो यादृच्छिक पाठ और न ही SQL इंजेक्शन प्रकार के हैक की अनुमति देंगे।

  2. बॉट रोकथाम एक छिपे हुए फ़ील्ड के साथ किया जा सकता है जो उपयोगकर्ता को नहीं दिखाया जाता है लेकिन आमतौर पर कमजोर साइन-अप फॉर्म के लिए क्रॉलिंग बॉट्स द्वारा स्वचालित रूप से भरा जाता है।

  3. डबल ऑप्ट-इन विधि के लिए प्राप्तकर्ता को अपने इनबॉक्स में एक सत्यापन लिंक प्राप्त करके आपको उन्हें ईमेल करने की अनुमति देने की आवश्यकता होती है। इसका उपयोग मुख्य रूप से किसी अन्य को आपके ईमेल पते का उपयोग करने से रोकने के लिए किया जाता है। यह उन परीक्षण उपयोगकर्ताओं को भी रोकता है जो केवल साइन-अप करते हैं और अपने खाते छोड़ देते हैं।

आइए इसे कोड करें!

एक कार्यशील निर्देशिका बनाएं:

mkdir signup
cd signup

python3 -m venvsignup या conda create -nsignup Python3 का उपयोग करके अपना Python वातावरण बनाएं। मुझे कोंडा पसंद है।

अपने उपयोगकर्ताओं को संग्रहीत करने के लिए MySQL तालिका बनाएं। मान्य फ़ील्ड डबल ऑप्ट-इन के लिए है:

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
);

निर्भरताएं स्थापित करें:
पिप फ्लास्क फ्लास्क-मेल सुरक्षित SQLAlchemy फ्लास्क-WTF फ्लास्क-SQLAlchemy mysql-कनेक्टर-पायथन

वैकल्पिक रूप से, आप इसे एक require.txt फ़ाइल में सूचीबद्ध कर सकते हैं और pip install -r require.txt

चला सकते हैं।

निम्नलिखित निर्भरता के साथ app.py फ़ाइल बनाएं:

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

इन पंक्तियों का उपयोग करके अपना स्वयं का सर्वर कॉन्फ़िगरेशन डेटा दर्ज करें:

# 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'] = '[email protected]'
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

आखिरकार, आपकी कॉन्फ़िगरेशन जानकारी एक .env फ़ाइल में होनी चाहिए।

अगला अनुभाग आपके लिए डेटाबेस से पूछताछ करने के लिए SQLAlchemy की ORM संरचना का उपयोग करता है। ध्यान रखें कि वर्ग का नाम आपके डेटाबेस तालिका नाम से मेल खाना चाहिए अन्यथा आपको एक त्रुटि मिलेगी। db.model आपकी तालिका सेटिंग्स का प्रतिनिधित्व करता है जिसमें कॉलम नाम, इसका प्रकार, लंबाई, कुंजी और शून्य मान शामिल हैं:

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)

यदि आपने पहले से मैन्युअल रूप से MySQL डेटाबेस तालिका नहीं बनाई है, तो आप इसे क्लास उपयोगकर्ता कोड ब्लॉक के बाद सीधे इस फ्लास्क कोड के साथ बना सकते हैं:

# Create the database table
with app.app_context():
    db.create_all()

इस ट्यूटोरियल की संक्षिप्तता के लिए, हम इंडेक्स पेज या जिसे आप अपने ऐप होमपेज पर कॉल करना चाहते हैं उसे छोड़ रहे हैं और पेज रूट के लिए पायथन के डेकोरेटर फ़ंक्शन का उपयोग करके केवल साइन-अप पेज दिखा रहे हैं:

@app.route('/')
def index():
    return '

Homepage

' @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='[email protected]', 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')

एचटीएमएल साइन-अप फॉर्म जोड़ने से पहले, आइए डबल ऑप्ट-इन सुविधा को मान्य करने के लिए मार्ग जोड़कर बैकएंड को पूरा करें। यह मार्ग हमारे द्वारा पहले बनाए गए s वेरिएबल का उपयोग करता है जो समय-संवेदनशील, गुप्त टोकन उत्पन्न करता है। विवरण के लिए दस्तावेज़ देखें
अधिकतम आयु लिंक समाप्त होने से पहले सेकंड है, इसलिए इस मामले में, उपयोगकर्ता के पास अपने ईमेल पते की पुष्टि करने के लिए 20 मिनट हैं।

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

The token is expired!

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

Email address confirmed!

'

अब सर्वव्यापी मुख्य कथन के लिए जो पायथन को स्क्रिप्ट निष्पादित करने के लिए कहता है यदि फ़ाइल सीधे निष्पादित की जा रही है (आयातित मॉड्यूल के विपरीत):

if __name__ == '__main__':
    app.run(debug=True)

इस बैक-एंड कोड को पूरा करने से पहले, हमें अभी भी उपयोगकर्ता इनपुट के लिए फ्रंट-एंड HTML की आवश्यकता है। हम फ्लास्क के अंतर्निर्मित जिंजा टेम्पलेट के साथ ऐसा करने जा रहे हैं। templates/signup.html नाम की एक फ़ाइल बनाएं, जिसका नाम आपके द्वारा पहले app.py में बनाए गए रूट से मेल खाना चाहिए। डिफ़ॉल्ट रूप से, जिंजा html फ़ाइलों के लिए निर्देशिका /टेम्पलेट्स का उपयोग करता है। आप इस सेटिंग को बदल सकते हैं लेकिन इस ट्यूटोरियल के लिए, हम ऐप की /टेम्पलेट्स निर्देशिका का उपयोग करने जा रहे हैं।



    Email Sign Up

Sign Up

{% with messages = get_flashed_messages(with_categories=true) %} {% if messages %}
    {% for category, message in messages %}
  • {{ message }}
  • {% endfor %}
{% endif %} {% endwith %}

जब आप डीबगिंग सक्षम होने पर फ्लास्क कमांड चलाते हैं तो आपका कोड इस बिंदु से काम करना चाहिए। यह आपको कमांड लाइन के साथ-साथ ब्राउज़र विंडो में कोई भी त्रुटि देखने की अनुमति देगा:

flask --app app.py --debug run 
विज्ञप्ति वक्तव्य यह आलेख यहां पुन: प्रस्तुत किया गया है: https://dev.to/therutkat/build-an-anti-spam-opt-in-email-registration-with-python-1034?1 यदि कोई उल्लंघन है, तो कृपया स्टडी_गोलंग@163 से संपर्क करें इसे हटाने के लिए .com
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3