当前位置: 首页 > 新闻资讯  > 实习管理系统

基于Python的厦门学生实习管理系统设计与实现

本文通过对话形式介绍如何使用Python和Django框架在厦门地区构建一个学生实习管理系统,包含具体代码示例。

小明:最近我在厦门的一家科技公司实习,公司需要一个学生实习管理系统来管理实习生的信息和实习进度。我该怎么开始呢?

小李:你有做过类似的项目吗?或者有没有接触过Web开发?

小明:我学过一点Python,但对Web开发不太熟悉。

小李:那我们可以从头开始,用Django框架来搭建这个系统。Django是一个功能强大的Python Web框架,适合快速开发。

小明:听起来不错,那我们需要哪些工具呢?

小李:首先,你需要安装Python环境,然后安装Django。你可以用pip来安装Django,命令是:

学生实习系统

pip install django

小明:明白了。那接下来呢?

小李:创建一个Django项目,然后创建一个应用。比如,我们叫它“internship”。命令如下:

django-admin startproject internship_system

cd internship_system

python manage.py startapp internship

小明:好的,那接下来怎么配置数据库呢?

小李:默认情况下,Django使用SQLite,但如果你想要更稳定的数据库,可以换成MySQL或PostgreSQL。不过先用SQLite试试看吧。

小明:那数据库模型怎么设计呢?

小李:我们先定义几个核心模型,比如学生、实习单位、实习记录等。在internship/models.py中添加如下代码:

from django.db import models

class Student(models.Model):

name = models.CharField(max_length=100)

student_id = models.CharField(max_length=20, unique=True)

major = models.CharField(max_length=100)

email = models.EmailField()

def __str__(self):

return self.name

class Company(models.Model):

name = models.CharField(max_length=100)

address = models.TextField()

contact_person = models.CharField(max_length=100)

phone = models.CharField(max_length=20)

def __str__(self):

return self.name

class InternshipRecord(models.Model):

student = models.ForeignKey(Student, on_delete=models.CASCADE)

company = models.ForeignKey(Company, on_delete=models.CASCADE)

start_date = models.DateField()

end_date = models.DateField()

status = models.CharField(max_length=50, choices=[

('Pending', 'Pending'),

('Approved', 'Approved'),

('Completed', 'Completed'),

('Rejected', 'Rejected')

])

def __str__(self):

return f"{self.student.name} - {self.company.name}"

小明:这些模型看起来很合理。那怎么把这些模型同步到数据库里呢?

小李:运行以下命令生成迁移文件并应用到数据库:

python manage.py makemigrations

python manage.py migrate

小明:这样就完成了数据库的初始化吗?

小李:是的,现在数据库已经创建好了。接下来我们创建一个简单的界面,让用户可以添加学生、公司和实习记录。

小明:那怎么创建视图和模板呢?

小李:我们可以使用Django的视图和模板系统。在internship/views.py中写一些基本的视图函数,例如:

from django.shortcuts import render, redirect

from .models import Student, Company, InternshipRecord

from .forms import StudentForm, CompanyForm, InternshipForm

def add_student(request):

if request.method == 'POST':

form = StudentForm(request.POST)

if form.is_valid():

form.save()

return redirect('student_list')

else:

form = StudentForm()

return render(request, 'add_student.html', {'form': form})

def student_list(request):

students = Student.objects.all()

return render(request, 'student_list.html', {'students': students})

小明:那表单是怎么定义的呢?

小李:我们可以在internship/forms.py中定义表单类,例如:

from django import forms

from .models import Student, Company, InternshipRecord

class StudentForm(forms.ModelForm):

class Meta:

model = Student

fields = ['name', 'student_id', 'major', 'email']

class CompanyForm(forms.ModelForm):

class Meta:

model = Company

fields = ['name', 'address', 'contact_person', 'phone']

class InternshipForm(forms.ModelForm):

class Meta:

model = InternshipRecord

fields = ['student', 'company', 'start_date', 'end_date', 'status']

小明:这样就可以通过表单来添加数据了。那模板怎么写呢?

小李:在templates目录下创建对应的HTML模板,比如add_student.html,内容如下:

<html>

<head><title>Add Student</title></head>

<body>

<h1>Add New Student</h1>

<form method="post">

{{ form.as_p }}

<button type="submit">Submit</button>

</form>

</body>

</html>

小明:那怎么把视图和URL关联起来呢?

小李:在internship/urls.py中定义路由,然后在主项目的urls.py中引入。例如,在internship/urls.py中写:

from django.urls import path

from . import views

urlpatterns = [

path('add-student/', views.add_student, name='add_student'),

path('student-list/', views.student_list, name='student_list'),

]

小明:然后在main urls.py中加入:

from django.contrib import admin

from django.urls import path, include

urlpatterns = [

path('admin/', admin.site.urls),

path('', include('internship.urls')),

]

小明:这样就可以访问页面了。

小李:没错。现在你可以通过浏览器访问 http://127.0.0.1:8000/add-student/ 来添加学生信息。

小明:那如果我要展示所有学生信息呢?

小李:我们已经在views.py中写了student_list函数,只需要创建对应的模板文件student_list.html,内容如下:

<html>

<head><title>Student List</title></head>

<body>

<h1>Student List</h1>

<ul>

{% for student in students %}

<li>{{ student.name }} ({{ student.student_id }})</li>

{% endfor %}

</ul>

</body>

</html>

小明:这太棒了!那如果我要扩展功能,比如按公司查询实习记录呢?

小李:我们可以添加一个搜索功能。在views.py中添加一个search_internship函数,根据公司名称进行过滤,并在模板中添加一个搜索表单。

小明:看来这个系统还有很多可以优化的地方。

小李:是的,比如可以添加用户登录系统、权限管理、数据导出等功能。如果你有兴趣,我们还可以继续扩展。

小明:谢谢你的帮助,我现在对这个系统有了更深的理解。

小李:不客气!希望你在厦门的实习顺利,也祝你的项目成功。

本站部分内容及素材来源于互联网,如有侵权,联系必删!

相关资讯

    暂无相关的数据...