小明:最近我在研究就业系统,感觉这个系统挺复杂的,你有没有什么好的建议?
小李:当然有啦!就业系统其实是一个典型的Web应用,主要功能包括用户注册、职位发布、简历投递、匹配推荐等。我们可以用Python的Django框架来开发,这样能快速搭建起系统的基础结构。
小明:那具体的架构是怎样的呢?能不能给我讲讲?
小李:好的。一般我们会采用MVC架构,也就是Model-View-Controller模式。Model负责数据模型,比如用户信息、职位信息;View处理前端展示;Controller处理业务逻辑。
小明:听起来不错。那我应该怎么开始写代码呢?
小李:首先,我们需要创建一个Django项目和应用。假设我们叫它“job_portal”。你可以使用以下命令:
django-admin startproject job_portal
cd job_portal
python manage.py startapp jobs
小明:然后呢?怎么定义数据模型?
小李:在jobs/models.py中,我们可以定义User、Job、Application等模型。例如:
from django.db import models
from django.contrib.auth.models import User
class Job(models.Model):
title = models.CharField(max_length=200)
description = models.TextField()
company = models.CharField(max_length=100)
location = models.CharField(max_length=100)
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.title
class Application(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
job = models.ForeignKey(Job, on_delete=models.CASCADE)
resume = models.FileField(upload_to='resumes/')
applied_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return f"{self.user.username} - {self.job.title}"
小明:这些模型应该要进行迁移吧?
小李:没错。运行以下命令生成数据库表:
python manage.py makemigrations
python manage.py migrate
小明:接下来怎么处理前端页面?
小李:我们可以使用Django的模板系统来创建HTML页面。比如,在jobs/templates/jobs/目录下创建index.html文件,显示所有职位。
职位列表
{% for job in jobs %}
{{ job.title }} - {{ job.company }}
{% endfor %}
小明:那视图部分该怎么写?
小李:在jobs/views.py中,我们可以定义一个视图函数,从数据库获取所有职位并传递给模板:
from django.shortcuts import render
from .models import Job
def job_list(request):
jobs = Job.objects.all()
return render(request, 'jobs/index.html', {'jobs': jobs})
小明:然后需要配置URL路由对吧?
小李:是的。在job_portal/urls.py中添加路径映射:
from django.urls import path
from . import views
from jobs import views as job_views
urlpatterns = [
path('', job_views.job_list, name='job_list'),
]
小明:现在可以访问首页了,但用户怎么申请职位呢?
小李:我们可以为每个职位添加一个申请按钮,点击后跳转到申请页面。申请页面需要让用户上传简历,并提交申请。
小明:那申请页面的视图怎么写?
小李:在views.py中添加一个apply_view函数:
from django.shortcuts import get_object_or_404, redirect
from .models import Job, Application
from .forms import ApplicationForm
def apply_for_job(request, job_id):
job = get_object_or_404(Job, id=job_id)
if request.method == 'POST':
form = ApplicationForm(request.POST, request.FILES)
if form.is_valid():
application = form.save(commit=False)
application.user = request.user
application.save()
return redirect('job_list')
else:

form = ApplicationForm()
return render(request, 'jobs/apply.html', {'form': form, 'job': job})
小明:还需要一个表单来处理用户输入,对吧?
小李:没错。在jobs/forms.py中创建ApplicationForm:
from django import forms
from .models import Application
class ApplicationForm(forms.ModelForm):
class Meta:
model = Application
fields = ['resume']
widgets = {
'resume': forms.FileInput(attrs={'accept': '.pdf,.doc,.docx'})
}
小明:那申请页面的模板怎么写?
小李:在jobs/templates/jobs/apply.html中:
申请 {{ job.title }}
小明:这样就完成了基本的申请流程了?
小李:是的,不过还可以扩展更多功能,比如搜索职位、筛选条件、通知用户申请状态等。
小明:那怎么实现职位搜索功能呢?
小李:可以在视图中根据查询参数过滤职位。例如,修改job_list函数:
def job_list(request):
query = request.GET.get('q')
if query:
jobs = Job.objects.filter(title__icontains=query) | Job.objects.filter(company__icontains=query)
else:
jobs = Job.objects.all()
return render(request, 'jobs/index.html', {'jobs': jobs})
小明:这样用户就可以通过搜索框查找职位了。
小李:没错。另外,为了提升用户体验,我们可以添加分页功能,避免一次加载太多数据。
小明:分页怎么做?
小李:在views.py中引入Paginator类,然后在模板中显示分页导航:
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
def job_list(request):
query = request.GET.get('q')
if query:
jobs = Job.objects.filter(title__icontains=query) | Job.objects.filter(company__icontains=query)
else:
jobs = Job.objects.all()
paginator = Paginator(jobs, 5) # 每页显示5个职位
page = request.GET.get('page')
try:
jobs = paginator.page(page)
except PageNotAnInteger:
jobs = paginator.page(1)
except EmptyPage:
jobs = paginator.page(paginator.num_pages)
return render(request, 'jobs/index.html', {'jobs': jobs})
小明:模板里怎么显示分页导航?
小李:在index.html中添加分页链接:
{% if jobs.has_previous %}
{% endif %}
第 {{ jobs.number }} 页,共 {{ paginator.num_pages }} 页
{% if jobs.has_next %}
{% endif %}
小明:看来这个系统已经初步成型了。
小李:没错,这只是基础功能。如果想让它更完善,还可以加入用户认证、权限管理、邮件通知、数据分析等功能。
小明:那用户认证怎么实现?
小李:Django自带了用户认证系统,我们可以利用它来实现登录、注册、密码重置等功能。
小明:那我可以直接使用Django的内置模板吗?
小李:是的,Django提供了很多现成的视图和模板,比如登录、注册、密码重置等。你只需要在urls.py中配置好路径即可。
小明:明白了。那我是不是还要考虑安全性问题?
小李:是的。比如防止CSRF攻击、XSS攻击、SQL注入等。Django本身已经做了很多安全防护,但你也要注意编写安全的代码。
小明:谢谢你的讲解,我对就业系统的实现有了更深的理解。
小李:不客气,希望你能继续深入学习,开发出更强大的就业平台。
