# Hertz Studio Django Utils 模块 ## 概述 Hertz Studio Django Utils 是一个功能丰富的工具类模块,为 Hertz Server Django 项目提供核心的工具函数、响应格式、验证器和加密服务。该模块采用模块化设计,便于维护和扩展。 ## 功能特性 - 🔐 **加密工具**: 提供多种加密算法和密码哈希功能 - 📧 **邮件服务**: 统一的邮件发送接口和验证码邮件模板 - 📋 **响应格式**: 标准化的API响应格式和错误处理 - ✅ **数据验证**: 邮箱、密码、手机号等格式验证 - 🧩 **模块化设计**: 各功能模块独立,便于按需使用 ## 模块结构 ``` hertz_studio_django_utils/ ├── __init__.py # 模块初始化 ├── crypto/ # 加密工具 │ ├── __init__.py │ ├── encryption_utils.py # 通用加密工具 │ └── password_hashers.py # 密码哈希器 ├── email/ # 邮件服务 │ ├── __init__.py │ └── email_service.py # 邮件发送服务 ├── responses/ # 响应格式 │ ├── __init__.py │ └── HertzResponse.py # 统一响应类 └── validators/ # 验证器 ├── __init__.py ├── email_validator.py # 邮箱验证器 ├── password_validator.py # 密码验证器 └── phone_validator.py # 手机号验证器 ``` ## 核心类说明 ### 1. EncryptionUtils 加密工具类 提供多种加密算法和工具函数: ```python from hertz_studio_django_utils.crypto import EncryptionUtils # MD5哈希 hash_value = EncryptionUtils.md5_hash("password", "salt") # SHA256哈希 hash_value = EncryptionUtils.sha256_hash("password", "salt") # 数据加密解密 encrypted = EncryptionUtils.encrypt_data("敏感数据", "password") decrypted = EncryptionUtils.decrypt_data(encrypted, "password") # 生成随机盐值 salt = EncryptionUtils.generate_salt(32) ``` ### 2. MD5PasswordHasher MD5密码哈希器 兼容旧系统的MD5密码加密: ```python from hertz_studio_django_utils.crypto import MD5PasswordHasher hasher = MD5PasswordHasher() encoded_password = hasher.encode("password", "salt") is_valid = hasher.verify("password", encoded_password) ``` ### 3. EmailService 邮件服务类 提供邮件发送功能: ```python from hertz_studio_django_utils.email import EmailService # 发送普通邮件 success = EmailService.send_email( recipient_email="user@example.com", subject="邮件主题", html_content="

HTML内容

", text_content="纯文本内容" ) # 发送验证码邮件 success = EmailService.send_verification_code( recipient_email="user@example.com", recipient_name="用户名", verification_code="123456", code_type="register" ) ``` ### 4. HertzResponse 统一响应类 标准化的API响应格式: ```python from hertz_studio_django_utils.responses import HertzResponse # 成功响应 return HertzResponse.success(data={"user": user_data}, message="操作成功") # 失败响应 return HertzResponse.fail(message="操作失败", data={"error": "详情"}) # 错误响应 return HertzResponse.error(message="系统错误", error=str(e)) # 验证错误 return HertzResponse.validation_error(message="参数错误", errors=serializer.errors) # 自定义响应 return HertzResponse.custom( success=True, message="自定义消息", data={"custom": "data"}, code=200 ) ``` ### 5. 验证器类 提供数据格式验证功能: ```python from hertz_studio_django_utils.validators import ( EmailValidator, PasswordValidator, PhoneValidator ) # 邮箱验证 is_valid, message = EmailValidator.validate_email("test@example.com") normalized_email = EmailValidator.normalize_email(" Test@Example.COM ") # 密码强度验证 is_valid, errors = PasswordValidator.validate_password_strength("Password123!") score = PasswordValidator.calculate_password_score("Password123!") level = PasswordValidator.get_password_strength_level("Password123!") # 手机号验证 is_valid = PhoneValidator.is_valid_china_mobile("13800138000") is_valid, message = PhoneValidator.validate_china_mobile("13800138000") carrier = PhoneValidator.get_mobile_carrier("13800138000") ``` ## 安装和配置 ### 1. 依赖安装 确保已安装以下依赖: ```bash pip install Django>=5.2.6 pip install cryptography>=41.0.0 ``` ### 2. 配置邮件服务 在 `settings.py` 中配置邮件服务: ```python # 邮件配置 EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' EMAIL_HOST = 'smtp.example.com' EMAIL_PORT = 587 EMAIL_USE_TLS = True EMAIL_HOST_USER = 'your-email@example.com' EMAIL_HOST_PASSWORD = 'your-password' DEFAULT_FROM_EMAIL = 'noreply@example.com' ``` ### 3. 配置密码哈希器 在 `settings.py` 中配置密码哈希器: ```python PASSWORD_HASHERS = [ 'django.contrib.auth.hashers.PBKDF2PasswordHasher', 'django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher', 'django.contrib.auth.hashers.Argon2PasswordHasher', 'django.contrib.auth.hashers.BCryptSHA256PasswordHasher', 'hertz_studio_django_utils.crypto.password_hashers.MD5PasswordHasher', # MD5兼容 ] ``` ## 快速开始 ### 1. 导入模块 ```python # 导入整个工具模块 from hertz_studio_django_utils import ( EncryptionUtils, MD5PasswordHasher, EmailService, HertzResponse, EmailValidator, PasswordValidator, PhoneValidator ) # 或按需导入特定功能 from hertz_studio_django_utils.responses import HertzResponse from hertz_studio_django_utils.email import EmailService ``` ### 2. 使用示例 ```python # 在Django视图中使用统一响应 from rest_framework.decorators import api_view from hertz_studio_django_utils.responses import HertzResponse @api_view(['GET']) def user_profile(request): try: user_data = {"username": "testuser", "email": "test@example.com"} return HertzResponse.success(data=user_data, message="获取用户信息成功") except Exception as e: return HertzResponse.error(message="获取用户信息失败", error=str(e)) # 发送验证码邮件 from hertz_studio_django_utils.email import EmailService success = EmailService.send_verification_code( recipient_email="user@example.com", recipient_name="张三", verification_code="654321", code_type="register" ) if success: print("验证码邮件发送成功") else: print("验证码邮件发送失败") ``` ## API接口 ### 加密工具 API | 方法 | 描述 | 参数 | 返回值 | |------|------|------|--------| | `md5_hash(data, salt)` | MD5哈希加密 | data: str, salt: str | str | | `sha256_hash(data, salt)` | SHA256哈希加密 | data: str, salt: str | str | | `encrypt_data(data, password)` | 加密数据 | data: str, password: str | Optional[str] | | `decrypt_data(encrypted_data, password)` | 解密数据 | encrypted_data: str, password: str | Optional[str] | | `generate_salt(length)` | 生成随机盐值 | length: int | str | ### 邮件服务 API | 方法 | 描述 | 参数 | 返回值 | |------|------|------|--------| | `send_email()` | 发送邮件 | recipient_email, subject, html_content, text_content, from_email | bool | | `send_verification_code()` | 发送验证码邮件 | recipient_email, recipient_name, verification_code, code_type | bool | ### 响应格式 API | 方法 | 描述 | 参数 | 返回值 | |------|------|------|--------| | `success()` | 成功响应 | data, message, code | JsonResponse | | `fail()` | 失败响应 | message, data, code | JsonResponse | | `error()` | 错误响应 | message, error, code | JsonResponse | | `unauthorized()` | 未授权响应 | message, code | JsonResponse | | `validation_error()` | 验证错误响应 | message, errors, code | JsonResponse | | `custom()` | 自定义响应 | success, message, data, code, **kwargs | JsonResponse | ### 验证器 API | 类 | 方法 | 描述 | |----|------|------| | `EmailValidator` | `is_valid_email()` | 验证邮箱格式 | | | `validate_email()` | 验证邮箱并返回详细信息 | | | `normalize_email()` | 标准化邮箱地址 | | `PasswordValidator` | `validate_password_strength()` | 验证密码强度 | | | `calculate_password_score()` | 计算密码强度分数 | | | `get_password_strength_level()` | 获取密码强度等级 | | `PhoneValidator` | `is_valid_china_mobile()` | 验证中国大陆手机号 | | | `validate_china_mobile()` | 验证手机号并返回详细信息 | | | `normalize_phone()` | 标准化手机号 | ## 配置参数 ### 邮件服务配置 | 参数 | 默认值 | 描述 | |------|--------|------| | `EMAIL_HOST` | - | SMTP服务器地址 | | `EMAIL_PORT` | 587 | SMTP端口 | | `EMAIL_USE_TLS` | True | 使用TLS加密 | | `EMAIL_HOST_USER` | - | SMTP用户名 | | `EMAIL_HOST_PASSWORD` | - | SMTP密码 | | `DEFAULT_FROM_EMAIL` | - | 默认发件人邮箱 | ### 密码验证配置 | 参数 | 默认值 | 描述 | |------|--------|------| | `min_length` | 8 | 密码最小长度 | | `max_length` | 128 | 密码最大长度 | ## 高级用法 ### 自定义邮件模板 ```python from hertz_studio_django_utils.email import EmailService # 自定义邮件内容 custom_html = """

自定义邮件

您好 {name},这是一封自定义邮件。

""".format(name="张三") success = EmailService.send_email( recipient_email="user@example.com", subject="自定义邮件", html_content=custom_html ) ``` ### 扩展响应格式 ```python from hertz_studio_django_utils.responses import HertzResponse # 扩展自定义响应 class CustomResponse(HertzResponse): @staticmethod def paginated(data, total, page, page_size, message="查询成功"): """分页响应""" pagination = { "total": total, "page": page, "page_size": page_size, "total_pages": (total + page_size - 1) // page_size } return HertzResponse.success( data={"items": data, "pagination": pagination}, message=message ) # 使用扩展响应 return CustomResponse.paginated( data=users, total=100, page=1, page_size=20, message="用户列表查询成功" ) ``` ## 测试 ### 单元测试示例 ```python from django.test import TestCase from hertz_studio_django_utils.validators import EmailValidator class EmailValidatorTest(TestCase): def test_valid_email(self): """测试有效邮箱地址""" is_valid, message = EmailValidator.validate_email("test@example.com") self.assertTrue(is_valid) self.assertEqual(message, "邮箱地址格式正确") def test_invalid_email(self): """测试无效邮箱地址""" is_valid, message = EmailValidator.validate_email("invalid-email") self.assertFalse(is_valid) self.assertEqual(message, "邮箱地址格式不正确") ``` ### 运行测试 ```bash python manage.py test hertz_studio_django_utils.tests ``` ## 安全考虑 1. **密码安全**: 使用强密码哈希算法,避免明文存储密码 2. **加密安全**: 使用安全的加密算法和随机盐值 3. **输入验证**: 对所有输入数据进行严格验证 4. **错误处理**: 避免泄露敏感错误信息 5. **邮件安全**: 使用TLS加密邮件传输 ## 常见问题 ### Q: 邮件发送失败怎么办? A: 检查邮件配置是否正确,包括SMTP服务器、端口、用户名和密码。 ### Q: MD5密码哈希是否安全? A: MD5被认为是不安全的哈希算法,仅用于兼容旧系统。新系统应使用更安全的算法如bcrypt或Argon2。 ### Q: 如何自定义响应格式? A: 可以继承 `HertzResponse` 类并添加自定义方法。 ### Q: 验证器是否支持国际手机号? A: 目前主要支持中国大陆手机号验证,国际手机号验证功能有限。 ## 更新日志 ### v1.0.0 (2024-01-01) - 初始版本发布 - 包含加密工具、邮件服务、响应格式、验证器等核心功能 ## 🔗 相关链接 - [🏠 返回主项目](../README.md) - Hertz Server Django 主项目 - [🔐 认证授权模块](../hertz_studio_django_auth/README.md) - 用户管理和权限控制 - [🖼️ 验证码模块](../hertz_studio_django_captcha/README.md) - 图片和邮箱验证码功能 - [📋 代码风格指南](../CODING_STYLE_GUIDE.md) - 开发规范和最佳实践 - [Django 官方文档](https://docs.djangoproject.com/) - [Django REST Framework 文档](https://www.django-rest-framework.org/) ## 贡献指南 1. Fork 本项目 2. 创建特性分支 (`git checkout -b feature/AmazingFeature`) 3. 提交更改 (`git commit -m 'Add some AmazingFeature'`) 4. 推送到分支 (`git push origin feature/AmazingFeature`) 5. 打开 Pull Request ## 许可证 本项目采用 MIT 许可证 - 查看 [LICENSE](LICENSE) 文件了解详情。 ## 支持 如有问题或建议,请提交 [Issue](https://github.com/your-org/hertz-server-django/issues) 或联系开发团队。