小李:最近公司要上线一个实习生管理系统,我听说你是做后端开发的,能不能帮我看看怎么开始?
小张:当然可以!首先我们需要明确这个系统的功能需求。比如,实习生信息录入、实习单位管理、任务分配、考核评价等。
小李:听起来不错。那你觉得用什么技术来实现比较好?我们公司是用Python的,可能更熟悉一些。
小张:那太好了,Python在Web开发方面有非常成熟的框架,比如Django或者Flask。Django自带了Admin后台,适合快速开发;而Flask则更轻量,灵活性更高。根据你的需求,我们可以选择其中一个。
小李:我觉得Django更适合我们现在的项目,毕竟有现成的后台管理界面,能节省不少时间。
小张:没错,Django非常适合这种中型项目。接下来,我们需要考虑数据库的设计。实习生的信息包括姓名、性别、学校、专业、联系方式、实习单位、实习岗位、开始和结束时间等。
小李:对,还有实习期间的考核情况,比如出勤率、任务完成度、导师评分这些。
小张:是的,我们可以创建一个模型来存储这些数据。例如,定义一个`Intern`模型,包含上述字段。同时,还需要一个`Company`模型来记录实习单位信息,以及一个`Evaluation`模型来保存考核结果。
小李:那具体代码怎么写呢?你能给我一个例子吗?
小张:当然可以。下面是一个简单的Django模型示例:
# models.py
from django.db import models
class Company(models.Model):
name = models.CharField(max_length=100)
address = models.TextField()
contact_person = models.CharField(max_length=50)
phone = models.CharField(max_length=20)
def __str__(self):
return self.name
class Intern(models.Model):
name = models.CharField(max_length=50)
gender = models.CharField(max_length=10, choices=[('男', '男'), ('女', '女')])
school = models.CharField(max_length=100)
major = models.CharField(max_length=100)
contact = models.CharField(max_length=20)
company = models.ForeignKey(Company, on_delete=models.CASCADE)
position = models.CharField(max_length=100)
start_date = models.DateField()
end_date = models.DateField()
def __str__(self):
return self.name
class Evaluation(models.Model):
intern = models.ForeignKey(Intern, on_delete=models.CASCADE)
score = models.IntegerField()
comment = models.TextField()
date = models.DateField()
def __str__(self):
return f"{self.intern.name} - {self.date}"
小李:明白了,这只是一个基础模型。那接下来怎么处理前端页面呢?
小张:Django本身也支持模板渲染,但如果你想要更现代的前端体验,可以结合Vue.js或React进行前后端分离开发。不过对于初期项目,直接使用Django的模板系统也是可以的。
小李:那我们就先用Django的模板吧。然后,管理员需要能够添加、编辑、删除实习生信息,对吧?
小张:是的,Django Admin已经提供了这些功能,你可以直接访问`/admin`页面进行操作。不过如果想自定义UI,就需要自己编写视图和模板。
小李:那我要怎么让普通用户也能看到部分信息呢?比如实习生的名单、实习单位信息等。
小张:可以通过创建视图和URL路由,将数据展示给前端。比如,写一个视图函数来获取所有实习生信息,并渲染到一个HTML页面上。
小李:好的,那具体代码怎么写呢?
小张:下面是一个简单的视图示例:
# views.py
from django.shortcuts import render
from .models import Intern, Company
def intern_list(request):
interns = Intern.objects.all()
return render(request, 'intern/list.html', {'interns': interns})
def company_detail(request, company_id):
company = Company.objects.get(id=company_id)
return render(request, 'company/detail.html', {'company': company})
小李:明白了,那模板文件应该怎么写呢?
小张:模板文件一般放在`templates`目录下。比如,`intern/list.html`的内容如下:
实习生列表
实习生列表
-
{% for intern in interns %}
- {{ intern.name }} - {{ intern.company.name }} {% endfor %}

小李:这样就能显示实习生信息了。那怎么配置URL呢?
小张:在`urls.py`中定义路由,比如:
# urls.py
from django.urls import path
from . import views
urlpatterns = [
path('interns/', views.intern_list, name='intern_list'),
path('companies//', views.company_detail, name='company_detail'),
]
小李:这样就完成了基本的页面展示。那怎么实现搜索功能呢?比如按姓名或公司名搜索。
小张:可以通过GET请求传递参数,然后在视图中进行过滤。例如,在`intern_list`视图中加入搜索逻辑:
# views.py
from django.shortcuts import render
from .models import Intern, Company
def intern_list(request):
query = request.GET.get('q')
if query:
interns = Intern.objects.filter(name__icontains=query) | \
Intern.objects.filter(company__name__icontains=query)
else:
interns = Intern.objects.all()
return render(request, 'intern/list.html', {'interns': interns, 'query': query})
小李:明白了,这样就可以实现搜索功能了。那接下来要考虑权限控制,比如只有管理员才能添加或修改实习生信息。
小张:是的,Django提供了内置的权限系统,你可以为不同的用户组分配权限。比如,创建一个“管理员”组,并赋予他们添加、修改、删除实习生的权限。
小李:那具体怎么设置呢?
小张:可以在Django Admin中手动添加用户并分配权限,也可以通过代码动态创建。例如:
# 创建管理员组
from django.contrib.auth.models import Group, Permission
from django.contrib.auth import get_user_model
User = get_user_model()
# 创建管理员组
admin_group = Group.objects.create(name='管理员')
# 获取添加、修改、删除权限
add_perm = Permission.objects.get(codename='add_intern')
change_perm = Permission.objects.get(codename='change_intern')
delete_perm = Permission.objects.get(codename='delete_intern')
# 将权限添加到管理员组
admin_group.permissions.add(add_perm, change_perm, delete_perm)
# 创建一个管理员用户并加入该组
user = User.objects.create_superuser('admin', 'admin@example.com', 'password')
user.groups.add(admin_group)
小李:这样就能实现权限控制了。那有没有什么其他需要注意的地方?
小张:除了权限控制,还要注意数据的安全性,比如防止SQL注入、XSS攻击等。Django本身已经做了很多安全措施,但仍需注意表单验证和输入过滤。
小李:明白了,那我们接下来可以测试一下系统了。
小张:是的,建议你先运行一下迁移命令,生成数据库表结构:
python manage.py makemigrations
python manage.py migrate
小李:然后启动服务器,看看能不能正常访问。
小张:没错,启动命令是:
python manage.py runserver
小李:好的,我现在感觉对这个系统有了更清晰的认识,谢谢你的帮助!
小张:不客气!如果有后续功能需求,比如导出Excel、发送邮件通知等,也可以继续问我。
小李:一定!这次的项目应该能顺利上线了。
小张:加油!祝你们项目成功,也希望这个系统能帮助四川地区的实习生更好地管理他们的实习过程。
