使用 Python 构建反垃圾邮件、选择加入的电子邮件注册
那么您想构建一个应用程序并获得许多用户吗?
我们都这样做,如果您是初学者,您需要考虑以下电子邮件注册功能。
- 有效的电子邮件地址和强密码
- 机器人预防
- 双重选择加入
可靠的电子邮件注册系统对于网络应用程序、时事通讯、免费赠品下载、私人团体邀请和潜在客户开发至关重要。我们不要依赖使用 Auth0、Facebook 或 Google 等第三方服务来访问您的应用程序。 保留您的应用数据!
首先,您应该有一些 Python 经验,因为我们将使用 Flask 框架和 MySQL 数据库。这比使用最流行的 CMS Wordpress 更有趣。您必须付费购买某些 Wordpress 插件才能具有与免费 Flask 扩展相同的功能。我之前已经在两者上构建过,并且更喜欢使用 Python Flask 来构建 Web 应用程序,尽管 Wordpress 非常有能力制作 Web 应用程序。
每个代码片段都会有解释,并在代码中包含一些注释。如果您还没有建立用户注册或了解内部工作原理,我将为您描述详细信息。以下是我们将按照第一段所述实现的功能的摘要:
有效的电子邮件地址可以通过使用正则表达式或 Flask 扩展解析用户的输入字符串来检查。我们不允许随机文本或 SQL 注入类型的黑客攻击。
机器人预防可以通过隐藏字段来完成,该字段不会向用户显示,但通常由爬行易受攻击的注册表单的机器人自动填充。
双重选择加入方法要求收件人通过接收其收件箱的验证链接来授予您向他们发送电子邮件的权限。这主要用于防止其他人使用您的电子邮件地址。这也可以防止测试用户刚刚注册并放弃其帐户。
让我们用代码来实现吧!
创建工作目录:
mkdir signup cd signup
使用 python3 -m venv signup 或 conda create -n signup 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 );
安装依赖项:
pipflaskflask-mail 安全 SQLAlchemy Flask-WTF Flask-SQLAlchemy mysql-connector-python
或者,您可以在requirements.txt 文件中列出相同的内容并运行 pip install -rrequirements.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'] = '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
最终,您应该将配置信息保存在 .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 数据库表,您可以直接在类 User 代码块之后使用此 Flask 代码来完成此操作:
# Create the database table with app.app_context(): db.create_all()
为了本教程的简洁,我们将跳过索引页面或您想要调用的应用程序主页,而仅使用 Python 的页面路由装饰器函数显示注册页面:
@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')
在添加 html 注册表单之前,让我们通过添加用于验证双重选择加入功能的路由来完成后端。该路由使用我们之前创建的 s 变量,该变量生成时间敏感的秘密令牌。详情请参阅文档
最长期限是链接过期前的秒数,因此在这种情况下,用户有 20 分钟的时间来确认他们的电子邮件地址。
@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>'
现在我们来看看无处不在的 main 语句,它告诉 Python 在直接执行文件(而不是导入模块)时执行脚本:
if __name__ == '__main__': app.run(debug=True)
在完成这个后端代码之前,我们仍然需要用于用户输入的前端 html。我们将使用 Flask 的内置 Jinja 模板来完成此操作。创建一个名为 templates/signup.html 的文件,该文件的名称应与您之前在 app.py 中创建的路由匹配。默认情况下,Jinja 使用目录 /templates 来存放 html 文件。您可以更改此设置,但在本教程中,我们将使用应用程序的 /templates 目录。
<!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>
当您在启用调试的情况下运行 Flask 命令时,您的代码应该可以正常工作。这将允许您在命令行和浏览器窗口中查看任何错误:
flask --app app.py --debug run
以上是使用 Python 构建反垃圾邮件、选择加入的电子邮件注册的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

Python更易学且易用,C 则更强大但复杂。1.Python语法简洁,适合初学者,动态类型和自动内存管理使其易用,但可能导致运行时错误。2.C 提供低级控制和高级特性,适合高性能应用,但学习门槛高,需手动管理内存和类型安全。

每天学习Python两个小时是否足够?这取决于你的目标和学习方法。1)制定清晰的学习计划,2)选择合适的学习资源和方法,3)动手实践和复习巩固,可以在这段时间内逐步掌握Python的基本知识和高级功能。

Python在开发效率上优于C ,但C 在执行性能上更高。1.Python的简洁语法和丰富库提高开发效率。2.C 的编译型特性和硬件控制提升执行性能。选择时需根据项目需求权衡开发速度与执行效率。

Python和C 各有优势,选择应基于项目需求。1)Python适合快速开发和数据处理,因其简洁语法和动态类型。2)C 适用于高性能和系统编程,因其静态类型和手动内存管理。

pythonlistsarepartofthestAndArdLibrary,herilearRaysarenot.listsarebuilt-In,多功能,和Rused ForStoringCollections,而EasaraySaraySaraySaraysaraySaraySaraysaraySaraysarrayModuleandleandleandlesscommonlyusedDduetolimitedFunctionalityFunctionalityFunctionality。

Python在自动化、脚本编写和任务管理中表现出色。1)自动化:通过标准库如os、shutil实现文件备份。2)脚本编写:使用psutil库监控系统资源。3)任务管理:利用schedule库调度任务。Python的易用性和丰富库支持使其在这些领域中成为首选工具。

Python在科学计算中的应用包括数据分析、机器学习、数值模拟和可视化。1.Numpy提供高效的多维数组和数学函数。2.SciPy扩展Numpy功能,提供优化和线性代数工具。3.Pandas用于数据处理和分析。4.Matplotlib用于生成各种图表和可视化结果。

Python在Web开发中的关键应用包括使用Django和Flask框架、API开发、数据分析与可视化、机器学习与AI、以及性能优化。1.Django和Flask框架:Django适合快速开发复杂应用,Flask适用于小型或高度自定义项目。2.API开发:使用Flask或DjangoRESTFramework构建RESTfulAPI。3.数据分析与可视化:利用Python处理数据并通过Web界面展示。4.机器学习与AI:Python用于构建智能Web应用。5.性能优化:通过异步编程、缓存和代码优
