You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

验证功能

  1. 创建新的JobListing记录,设置特定location
  2. 创建匹配该location的UserSubscription记录
  3. 等待定时任务执行时间(或手动触发任务测试):
python manage.py crontab run <任务哈希值>  # 哈希值可通过crontab show查看
  1. 检查订阅用户的邮箱是否收到通知邮件

内容的提问来源于stack exchange,提问作者chandra shekhar varma ponnaman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 19:37:58