"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > أنشئ برنامجًا لمكافحة البريد العشوائي وتسجيل البريد الإلكتروني باستخدام Python

أنشئ برنامجًا لمكافحة البريد العشوائي وتسجيل البريد الإلكتروني باستخدام Python

تم النشر بتاريخ 2024-09-01
تصفح:572

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

هل ترغب في إنشاء تطبيق والحصول على العديد من المستخدمين؟

كلنا نفعل ذلك، وإذا كنت مبتدئًا، فيجب عليك أن تأخذ ميزات الاشتراك في البريد الإلكتروني التالية بعين الاعتبار.

  1. عنوان بريد إلكتروني صالح بكلمة مرور قوية
  2. منع الروبوتات
  3. الاشتراك المزدوج

يعد نظام تسجيل البريد الإلكتروني القوي ضروريًا لتطبيقات الويب والنشرات الإخبارية وتنزيلات الهدية الترويجية والدعوات إلى المجموعات الخاصة وتوليد العملاء المحتملين. دعونا لا نعتمد على استخدام خدمات الجهات الخارجية مثل Auth0 أو Facebook أو Google للوصول إلى تطبيقك. احتفظ ببيانات تطبيقك ملكًا لك!

لكي تبدأ، يجب أن يكون لديك بعض الخبرة في بايثون لأننا سنستخدم إطار عمل Flask مع قاعدة بيانات MySQL. سيكون هذا أكثر متعة من استخدام Wordpress، نظام إدارة المحتوى الأكثر شهرة. سيتعين عليك الدفع مقابل بعض مكونات Wordpress الإضافية للحصول على نفس القدرة التي يتمتع بها ملحق Flask المجاني. لقد قمت بالبناء مسبقًا على كليهما وأفضل Python Flask لتطبيقات الويب على الرغم من أن Wordpress قادر جدًا على إنشاء تطبيقات الويب.

سيتم شرح كل مقتطف كود ويتضمن بعض التعليقات في الكود. في حالة عدم قيامك بإنشاء تسجيل مستخدم أو معرفة الإجراءات الداخلية، فسوف أصف لك التفاصيل. وفيما يلي ملخص للميزات التي سنقوم بتنفيذها كما ورد في الفقرة الأولى:

  1. يمكن التحقق من عنوان بريد إلكتروني صالح عن طريق تحليل سلسلة الإدخال من المستخدم باستخدام تعبير عادي أو ملحق Flask. لن نسمح بنصوص عشوائية أو نوع حقن SQL للاختراق.

  2. يمكن منع الروبوتات من خلال حقل مخفي لا يظهر للمستخدم ولكن عادةً ما يتم ملؤه تلقائيًا بواسطة الروبوتات التي تزحف إلى نماذج التسجيل الضعيفة.

  3. تتطلب طريقة الاشتراك المزدوج من المستلم أن يمنحك الإذن بإرسال بريد إلكتروني إليه عن طريق تلقي رابط التحقق في صندوق الوارد الخاص به. يُستخدم هذا بشكل أساسي لمنع شخص آخر من استخدام عنوان بريدك الإلكتروني. يمنع هذا أيضًا المستخدمين الاختباريين الذين قاموا بالتسجيل والتخلي عن حساباتهم.

دعونا نقوم بتشفيرها!

إنشاء دليل عمل:


الاشتراك في mkdir الاشتراك في القرص المضغوط
mkdir signup
cd signup
أنشئ بيئة Python الخاصة بك باستخدام python3 -m venv الاشتراك أو conda create -n الاشتراك python3. انا افضل كوندا.

قم بإنشاء جدول MySQL لتخزين المستخدمين لديك. الحقل الذي تم التحقق منه مخصص للاشتراك المزدوج:


إنشاء مستخدمي الجدول ( معرف INT AUTO_INCREMENT المفتاح الأساسي، البريد الإلكتروني VARCHAR(120) ليس فارغًا فريدًا، كلمة المرور VARCHAR(120) ليست فارغة، تم إنشاؤه في TIMESTAMP DEFAULT CURRENT_TIMESTAMP، تم التحقق من صحة BOOLEAN DEFAULT FALSE );
mkdir signup
cd signup
تثبيت التبعيات:

قارورة النقطة قارورة البريد الآمن SQLAlchemy Flask-WTF Flask-SQLAlchemy mysql-connector-python

وبدلاً من ذلك، يمكنك إدراج نفس الملف في ملف require.txt وتشغيل pip install -r require.txt

قم بإنشاء ملف app.py بالتبعيات التالية:


من قارورة استيراد قارورة، render_template، طلب، url_for، إعادة توجيه، فلاش من flask_mail استيراد البريد والرسالة من تاريخ وقت الاستيراد من flask_sqlalchemy قم باستيراد SQLAlchemy من sqlalchemy.sql وظيفة الاستيراد من الاستيراد الخطير URLSafeTimedSerializer، SignatureExpired من werkzeug.security استيراد generator_password_hash، check_password_hash أسرار الاستيراد
mkdir signup
cd signup
أدخل بيانات تكوين الخادم الخاص بك باستخدام هذه السطور:


# تكوينات القارورة سر = Secrets.token_urlsafe(32) app.secret_key = Secret app.config['SECRET_KEY'] = سر # مفتاح سري يتم إنشاؤه تلقائيًا # تكوينات SQLAlchemy SQLALCHEMY_DATABASE_URI = 'mysql mysqlconnector://admin:user@localhost/tablename' # تكوينات البريد الإلكتروني app.config['MAIL_SERVER'] = 'smtp.example.com' app.config['MAIL_PORT'] = 587 app.config['MAIL_USERNAME'] = '[email protected]' app.config['MAIL_PASSWORD'] = 'كلمة المرور الخاصة بك' app.config['MAIL_USE_TLS'] = صحيح app.config['MAIL_USE_SSL'] = خطأ ديسيبل = SQLAlchemy (التطبيق) البريد = البريد (التطبيق) s = URLSafeTimedSerializer(app.config['SECRET_KEY']) # تعيين سر إلى serliazer
mkdir signup
cd signup
في النهاية، يجب أن تكون لديك معلومات التكوين الخاصة بك في ملف .env.

يستخدم القسم التالي بنية ORM الخاصة بـ SQLAlchemy للاستعلام عن قاعدة البيانات نيابةً عنك. لاحظ أن

يجب أن يتطابق اسم الفئة مع اسم جدول قاعدة البيانات الخاصة بك وإلا فسوف تحصل على خطأ. يمثل db.model إعدادات الجدول الخاصة بك والتي تتضمن اسم العمود ونوعه وطوله ومفتاحه وقيمته الخالية:

مستخدم فئة (db.Model): المعرف = db.Column(db.Integer, basic_key=True) البريد الإلكتروني = db.Column(db.String(120)، فريد = صحيح، لاغية = خطأ) كلمة المرور = db.Column(db.String(120), nullable=False) create_at = db.Column(db.DateTime, server_default=db.func.now()) تم التحقق من صحته = db.Column(db.Boolean, default=False)
mkdir signup
cd signup
إذا لم تكن قد أنشأت جدول قاعدة بيانات MySQL يدويًا بالفعل، فيمكنك القيام بذلك باستخدام رمز Flask مباشرة بعد كتلة رمز المستخدم للفئة:


# إنشاء جدول قاعدة البيانات مع app.app_context(): db.create_all()
mkdir signup
cd signup
لإيجاز هذا البرنامج التعليمي، نحن نتخطى صفحة الفهرس أو ما تريد أن نسميه الصفحة الرئيسية لتطبيقك ونعرض فقط صفحة الاشتراك باستخدام وظيفة ديكور بايثون لمسار الصفحة:


@app.route('/') فهرس التعريف (): إرجاع "

الصفحة الرئيسية

" @app.route('/signup', الأساليب=['GET', 'POST']) التسجيل المؤكد (): إذا request.method == 'POST': # التحقق من صحة الحقل المخفي لمنع إرسال الروبوت Hidden_field = request.form.get('hidden_field') إذا كان الحقل المخفي: return redirect(url_for('index')) # تم اكتشاف روبوت، تجاهل الإرسال البريد الإلكتروني = request.form['البريد الإلكتروني'] كلمة المرور = request.form['كلمة المرور'] hashed_password = create_password_hash(كلمة المرور، الطريقة='sha256') # أدخل المستخدم في قاعدة البيانات new_user = المستخدم (البريد الإلكتروني = البريد الإلكتروني، كلمة المرور = كلمة المرور المجزأة) db.session.add(new_user) db.session.commit() # إرسال رسالة تأكيد بالبريد الإلكتروني الرمز المميز = s.dumps(email, salt='email-confirm') msg = الرسالة ("تأكيد بريدك الإلكتروني"، sender='[email protected]'، المستلمون=[email]) الرابط = url_for('confirm_email', الرمز المميز=الرمز المميز, _external=True) msg.body = f'الرابط الخاص بك هو {link}' البريد.إرسال (رسالة) flash('تم إرسال رسالة تأكيد بالبريد الإلكتروني إلى عنوان بريدك الإلكتروني.'، 'نجاح') إعادة التوجيه (url_for('index')) إرجاع render_template('signup.html')
mkdir signup
cd signup
قبل إضافة نموذج تسجيل html، فلنكمل الواجهة الخلفية عن طريق إضافة المسار للتحقق من صحة ميزة الاشتراك المزدوج. يستخدم هذا المسار المتغير s الذي أنشأناه سابقًا والذي يقوم بإنشاء الرمز السري الحساس للوقت. راجع المستندات للحصول على التفاصيل

الحد الأقصى للعمر هو الثواني التي تسبق انتهاء صلاحية الرابط، وفي هذه الحالة، يكون لدى المستخدم 20 دقيقة لتأكيد عنوان بريده الإلكتروني.

@app.route('/confirm_email/') بالتأكيد تأكيد_البريد الإلكتروني (الرمز المميز): يحاول: email = s.loads(token, salt='email-confirm', max_age=1200) # تنتهي صلاحية الرمز المميز بعد ساعة واحدة باستثناء التوقيع منتهي الصلاحية: إرجاع '

انتهت صلاحية الرمز المميز!

' # تحديث الحقل في قاعدة البيانات المستخدم = User.query.filter_by(email=email).first_or_404() user.validated = صحيح db.session.commit() إرجاع "

تم تأكيد عنوان البريد الإلكتروني!

"
mkdir signup
cd signup
الآن بالنسبة للبيان الرئيسي الموجود في كل مكان والذي يخبر Python بتنفيذ البرنامج النصي إذا تم تنفيذ الملف مباشرة (على عكس الوحدة النمطية المستوردة):


إذا __name__ == '__main__': app.run(تصحيح = صحيح)
mkdir signup
cd signup
قبل أن نكمل رمز الواجهة الخلفية هذا، ما زلنا بحاجة إلى HTML للواجهة الأمامية لإدخال المستخدم. سنقوم بذلك باستخدام قالب Jinja المدمج في Flask. قم بإنشاء ملف باسم templates/signup.html والذي يجب أن يتطابق اسمه مع المسار الذي قمت بإنشائه مسبقًا في app.py. افتراضيًا، يستخدم Jinja الدليل /القوالب لملفات html. يمكنك تغيير هذا الإعداد ولكن في هذا البرنامج التعليمي، سنستخدم الدليل /templates الخاص بالتطبيق.


التسجيل بالبريد الإلكترونيالرأس>

الاشتراك

النموذج> {% مع الرسائل = get_flashed_messages(with_categories=true) %} {% إذا كانت الرسائل %}
    {% للفئة، رسالة في الرسائل %}
  • {{ رسالة }}
  • {% النهاية لـ %}
{% نهاية %} {% نهاية مع %} الجسم>
mkdir signup
cd signup
يجب أن يعمل الكود الخاص بك من هذه النقطة عند تشغيل أمر flask مع تمكين تصحيح الأخطاء. سيسمح لك هذا برؤية أي أخطاء في سطر الأوامر وكذلك في نافذة المتصفح:


flask --app app.py --debug run
flask --app app.py --debug run 
بيان الافراج تم إعادة إنتاج هذه المقالة على: https://dev.to/therutkat/build-an-anti-spam-opt-in-email-registration-with-python-1034?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ Study_golang@163 .com لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3