Django求职门户需实现按地区订阅的邮件通知及可调频定时任务
Django求职门户邮件通知服务与定时任务实现
需求概述
为求职门户开发邮件通知服务:当新发布的JobListing的location与UserSubscription的job_location匹配时,向订阅用户推送职位详情;同时通过可配置的定时任务(支持15分钟/1天频率)自动检查新职位并发送通知。
实现步骤
1. 完善模型(避免重复通知)
首先修改JobListing模型,添加字段跟踪该职位是否已发送过通知:
# models.py class JobListing(models.Model): title = models.CharField(max_length=255, null=True) location = models.CharField(max_length=200, default="") description = models.TextField() is_notified = models.BooleanField(default=False) # 新增:标记是否已发送通知
执行迁移命令更新数据库:
python manage.py makemigrations python manage.py migrate
2. 实现邮件发送工具函数
在项目中创建utils/email_utils.py,编写邮件发送逻辑:
# utils/email_utils.py from django.core.mail import send_mail from django.conf import settings def send_job_notification(job, user_subscription): """向订阅用户发送职位通知邮件""" subject = f"新职位推荐:{job.title}" message = f""" 您好{user_subscription.username}, 我们为您找到了匹配您订阅地点({user_subscription.job_location})的职位: 职位名称:{job.title} 工作地点:{job.location} 职位描述:{job.description} 祝您求职顺利! """ send_mail( subject=subject, message=message, from_email=settings.DEFAULT_FROM_EMAIL, recipient_list=[user_subscription.email_id], fail_silently=False, )
同时在settings.py中配置邮件服务(以SMTP为例):
# settings.py EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' EMAIL_HOST = 'your-smtp-host' # 例如:smtp.gmail.com EMAIL_PORT = 587 EMAIL_USE_TLS = True EMAIL_HOST_USER = 'your-email@example.com' EMAIL_HOST_PASSWORD = 'your-email-password' DEFAULT_FROM_EMAIL = 'your-email@example.com'
3. 实现定时任务逻辑
创建tasks.py文件,编写定时任务的核心逻辑:
# tasks.py from .models import JobListing, UserSubscription from .utils.email_utils import send_job_notification def check_new_jobs_and_notify(): """检查未通知的新职位,向匹配用户发送邮件""" # 获取所有未发送通知的职位 new_jobs = JobListing.objects.filter(is_notified=False) for job in new_jobs: # 找到订阅该职位地点的用户(忽略大小写匹配) subscribed_users = UserSubscription.objects.filter(job_location__iexact=job.location) for user in subscribed_users: send_job_notification(job, user) # 标记该职位已发送通知 job.is_notified = True job.save()
4. 配置定时任务(使用django-crontab)
安装依赖
pip install django-crontab
在settings.py中添加应用
# settings.py INSTALLED_APPS = [ # ... 其他应用 'django_crontab', ]
配置定时任务频率
在settings.py末尾添加定时任务配置,支持两种频率(根据需求选择其一或动态切换):
# settings.py # 选项1:每15分钟执行一次 CRONJOBS = [ ('*/15 * * * *', 'your_app_name.tasks.check_new_jobs_and_notify') ] # 选项2:每天凌晨2点执行一次 # CRONJOBS = [ # ('0 2 * * *', 'your_app_name.tasks.check_new_jobs_and_notify') # ]
注册定时任务到系统
执行以下命令将定时任务添加到系统Cron:
python manage.py crontab add
查看/移除定时任务
# 查看已注册的定时任务 python manage.py crontab show # 移除所有定时任务 python manage.py crontab remove
验证功能
- 创建新的
JobListing记录,设置特定location - 创建匹配该location的
UserSubscription记录 - 等待定时任务执行时间(或手动触发任务测试):
python manage.py crontab run <任务哈希值> # 哈希值可通过crontab show查看
- 检查订阅用户的邮箱是否收到通知邮件
内容的提问来源于stack exchange,提问作者chandra shekhar varma ponnaman
相关产品推荐
相关产品推荐

