小李:最近我们学校要开发一个科研项目管理系统,我听说你对Python比较熟悉,能帮我看看怎么开始吗?
小王:当然可以!首先我们需要明确这个系统的主要功能。比如项目申报、审批流程、进度跟踪、成果管理等。
小李:对,特别是我们新乡地区的高校和研究机构,他们需要一个本地化的平台来统一管理科研项目。
小王:没错,我们可以用Django或者Flask这样的Web框架来搭建系统。Django适合快速开发,而且自带了很多功能模块,比如用户认证、数据库操作等。
小李:那具体怎么设计数据库呢?比如项目信息、负责人、时间安排这些字段。
小王:我们可以创建几个模型,比如Project(项目)、Researcher(研究人员)、Task(任务)等。每个模型对应数据库中的表。
小李:那我可以先写一个简单的模型代码吗?
小王:当然可以,下面是一个基本的模型定义示例:
from django.db import models
class Project(models.Model):
title = models.CharField(max_length=200)
description = models.TextField()
start_date = models.DateField()
end_date = models.DateField()
principal_researcher = models.ForeignKey('Researcher', on_delete=models.CASCADE)
def __str__(self):
return self.title
class Researcher(models.Model):
name = models.CharField(max_length=100)
department = models.CharField(max_length=100)
email = models.EmailField()
def __str__(self):
return self.name
class Task(models.Model):
project = models.ForeignKey(Project, on_delete=models.CASCADE)
task_name = models.CharField(max_length=100)
deadline = models.DateField()
status = models.CharField(max_length=50, choices=[
('pending', '待处理'),
('in_progress', '进行中'),
('completed', '已完成')
])
def __str__(self):
return self.task_name
小李:这看起来不错,那接下来是不是需要创建视图和模板?
小王:是的,我们可以用Django的views.py来处理请求,然后用templates来渲染页面。例如,展示所有项目的列表页。
小李:那我可以写一个视图函数来获取所有项目并传递给模板吗?
小王:没错,下面是一个简单的视图示例:
from django.shortcuts import render
from .models import Project
def project_list(request):
projects = Project.objects.all()
return render(request, 'project_list.html', {'projects': projects})
小李:然后我需要在templates目录下创建一个project_list.html文件,用来显示这些数据。
小王:对,这是一个基本的HTML模板结构:
科研项目列表
科研项目列表
{% for project in projects %}
- {{ project.title }} - {{ project.principal_researcher.name }}
{% endfor %}
小李:这样就能展示出所有项目的信息了,那怎么添加新项目呢?
小王:我们可以创建一个表单,让用户输入项目信息,然后提交到服务器进行保存。
小李:那表单应该怎么写?
小王:可以用Django的Form类来定义表单,然后在视图中处理POST请求。
小李:那我可以先定义一个表单类吗?
小王:是的,下面是一个简单的表单示例:
from django import forms
from .models import Project
class ProjectForm(forms.ModelForm):
class Meta:
model = Project
fields = ['title', 'description', 'start_date', 'end_date', 'principal_researcher']
小李:然后在视图中处理表单提交,对吧?
小王:没错,下面是视图的完整代码:
from django.shortcuts import render, redirect
from .models import Project
from .forms import ProjectForm
def add_project(request):
if request.method == 'POST':
form = ProjectForm(request.POST)
if form.is_valid():
form.save()
return redirect('project_list')
else:
form = ProjectForm()
return render(request, 'add_project.html', {'form': form})
小李:那对应的模板应该是一个表单页面,对吧?
小王:是的,下面是一个简单的表单模板:
添加新项目
添加新项目
小李:这样就完成了添加功能,那怎么实现任务管理呢?
小王:我们可以为每个项目添加任务,并设置截止日期和状态。比如在项目详情页中展示任务列表。
小李:那任务的增删改查怎么实现?
小王:同样可以用Django的视图和模板来实现。比如,在项目详情页中展示任务,并提供编辑和删除功能。
小李:那我可以先写一个任务列表视图吗?
小王:当然可以,下面是一个任务列表视图的示例:
from django.shortcuts import get_object_or_404, render
from .models import Project, Task
def project_detail(request, project_id):
project = get_object_or_404(Project, pk=project_id)
tasks = Task.objects.filter(project=project)
return render(request, 'project_detail.html', {'project': project, 'tasks': tasks})
小李:然后在模板中展示任务信息,对吧?
小王:是的,下面是一个任务列表模板的示例:
项目详情
{{ project.title }}
负责人:{{ project.principal_researcher.name }}
任务列表
{% for task in tasks %}
- {{ task.task_name }} - 截止日期:{{ task.deadline }} - 状态:{{ task.status }}
{% endfor %}
小李:那怎么添加任务呢?
小王:可以在项目详情页中添加一个表单,让用户输入任务名称、截止日期和状态。
小李:那我可以再写一个任务表单吗?
小王:是的,下面是一个任务表单的定义:
from django import forms
from .models import Task
class TaskForm(forms.ModelForm):
class Meta:
model = Task
fields = ['task_name', 'deadline', 'status']
小李:然后在视图中处理任务添加逻辑,对吧?
小王:没错,下面是添加任务的视图代码:
from django.shortcuts import get_object_or_404, render, redirect
from .models import Project, Task
from .forms import TaskForm
def add_task(request, project_id):
project = get_object_or_404(Project, pk=project_id)
if request.method == 'POST':
form = TaskForm(request.POST)
if form.is_valid():
task = form.save(commit=False)
task.project = project
task.save()
return redirect('project_detail', project_id=project_id)
else:
form = TaskForm()
return render(request, 'add_task.html', {'form': form, 'project': project})
小李:那对应的模板应该是一个表单页面,对吧?
小王:是的,下面是一个任务添加模板的示例:
添加任务
为 {{ project.title }} 添加任务
小李:这样就实现了任务的添加功能,那怎么实现任务的状态更新呢?
小王:可以通过编辑任务的视图来实现,允许用户修改任务状态。
小李:那我可以写一个任务编辑视图吗?
小王:是的,下面是一个任务编辑视图的示例:
from django.shortcuts import get_object_or_404, render, redirect
from .models import Task
from .forms import TaskForm
def edit_task(request, task_id):
task = get_object_or_404(Task, pk=task_id)
if request.method == 'POST':
form = TaskForm(request.POST, instance=task)
if form.is_valid():
form.save()
return redirect('project_detail', project_id=task.project.id)
else:
form = TaskForm(instance=task)
return render(request, 'edit_task.html', {'form': form, 'task': task})
小李:那对应的模板应该是一个表单页面,对吧?
小王:是的,下面是一个任务编辑模板的示例:
编辑任务
编辑任务:{{ task.task_name }}
小李:这样就完成了任务的编辑功能,那怎么删除任务呢?
小王:可以通过一个删除视图来实现,使用GET请求确认删除,并在POST请求中执行删除操作。

小李:那我可以写一个任务删除视图吗?
小王:是的,下面是一个任务删除视图的示例:
from django.shortcuts import get_object_or_404, redirect
from .models import Task
def delete_task(request, task_id):
task = get_object_or_404(Task, pk=task_id)
if request.method == 'POST':
task.delete()
return redirect('project_detail', project_id=task.project.id)
return render(request, 'delete_task.html', {'task': task})
小李:那对应的模板应该是一个确认页面,对吧?
小王:是的,下面是一个任务删除确认模板的示例:
确认删除
确认删除任务:{{ task.task_name }}
您确定要删除此任务吗?
小李:这样就完成了任务的增删改查功能,那整个系统就可以运行起来了。
小王:是的,现在你可以部署这个系统,让它在新乡地区的科研机构中使用。
小李:那怎么部署呢?
小王:可以用Django的开发服务器测试,也可以使用Nginx + Gunicorn部署到生产环境。
小李:那我可以先用本地测试一下吗?
小王:当然可以,运行`python manage.py runserver`就可以启动开发服务器。
小李:太好了,我现在对这个系统有了更清晰的认识,谢谢你的帮助!
小王:不客气,如果你还有其他问题,随时来找我!
本站部分内容及素材来源于互联网,如有侵权,联系必删!
客服经理