小明:嘿,小李,我最近在想,我们师范大学是不是该有个自己的校友会管理系统?现在大家联系都挺困难的。
小李:是啊,确实。尤其是很多老校友,毕业后就失联了。如果有一个系统,可以记录他们的信息、联系方式,还能组织活动,那就太好了。
小明:那你说,这样的系统应该怎么设计呢?是不是需要数据库?还有前端界面?
小李:没错,首先得有个数据库来存储校友的信息,比如姓名、学号、毕业年份、联系方式等等。然后前端要能展示这些数据,还要有添加、修改、删除的功能。
小明:听起来像是一个典型的Web应用。那用什么技术来做呢?
小李:我觉得用Python的话比较合适,特别是Django或者Flask框架。它们都是成熟的Web开发框架,而且社区支持很好。
小明:那具体怎么操作呢?有没有现成的例子?
小李:当然有。我们可以先搭建一个简单的模型,比如用Django来创建一个校友信息表。然后设计一些视图和模板来展示和管理这些数据。
小明:那你能写个代码示例吗?我想看看具体怎么实现。
小李:好的,下面是一个简单的Django项目结构和模型定义。首先我们要创建一个Django项目和应用。
小明:嗯,我好像记得Django需要先安装。那我们需要先安装Django吗?
小李:对,你可以用pip来安装。命令是:`pip install django`。
小明:明白了。那接下来怎么做?
小李:创建项目后,进入项目目录,运行 `python manage.py startapp alumni` 来创建一个名为alumni的应用。
小明:然后呢?
小李:接下来就是在models.py里定义校友信息的模型。比如,我们可以这样写:
from django.db import models
class Alumni(models.Model):
name = models.CharField(max_length=100)
student_id = models.CharField(max_length=20)
graduation_year = models.IntegerField()
email = models.EmailField()
phone = models.CharField(max_length=20)
def __str__(self):
return self.name
小明:这看起来很直观。那之后还需要做哪些事情?
小李:接着,我们需要在admin.py中注册这个模型,这样管理员就可以在后台管理数据了。
小明:那代码怎么写?
小李:如下所示:
from django.contrib import admin
from .models import Alumni
admin.site.register(Alumni)
小明:这样就能在后台看到校友信息了吗?
小李:是的。不过这只是基础部分。我们还需要创建视图和模板,让普通用户也能访问这些数据。
小明:那视图和模板该怎么写?
小李:我们可以在views.py中定义一个函数,用来获取所有校友的信息,然后传递给模板。

小明:那具体的代码是什么样的?
小李:例如,如下代码:
from django.shortcuts import render
from .models import Alumni
def alumni_list(request):
alumni = Alumni.objects.all()
return render(request, 'alumni/list.html', {'alumni': alumni})
小明:然后需要创建一个模板文件,对吧?
小李:没错。在templates/alumni/目录下创建一个list.html文件,内容如下:
校友列表
- {{ alumni.name }} - {{ alumni.student_id }} - {{ alumni.graduation_year }}
{% for alumni in alumni %}
{% endfor %}
小明:这样就能显示所有校友的信息了。
小李:是的。不过为了更好的用户体验,我们还可以添加搜索功能、分页、编辑和删除功能。
小明:那搜索功能怎么实现?
小李:可以在视图中添加一个查询参数,比如`?search=xxx`,然后根据输入过滤结果。
小明:那具体代码怎么写?
小李:例如,修改views.py中的alumni_list函数:
def alumni_list(request):
query = request.GET.get('search')
if query:
alumni = Alumni.objects.filter(name__icontains=query)
else:
alumni = Alumni.objects.all()
return render(request, 'alumni/list.html', {'alumni': alumni})
小明:这样就能实现搜索了。那分页呢?
小李:可以用Django的Paginator类来实现分页。例如,将查询结果分成每页10条。
小明:那代码怎么写?
小李:如下所示:
from django.core.paginator import Paginator
def alumni_list(request):
query = request.GET.get('search')
if query:
alumni_list = Alumni.objects.filter(name__icontains=query)
else:
alumni_list = Alumni.objects.all()
paginator = Paginator(alumni_list, 10)
page_number = request.GET.get('page')
page_obj = paginator.get_page(page_number)
return render(request, 'alumni/list.html', {'page_obj': page_obj})
小明:然后在模板中渲染分页链接。
小李:对,比如在list.html中添加以下代码:
小明:这样分页就完成了。那编辑和删除功能呢?
小李:我们可以为每个校友添加“编辑”和“删除”按钮,点击后跳转到对应的页面。
小明:那怎么处理这些请求?
小李:可以创建两个新的视图,分别用于编辑和删除。例如,在views.py中添加:
from django.shortcuts import get_object_or_404, redirect
def alumni_edit(request, pk):
alumni = get_object_or_404(Alumni, pk=pk)
if request.method == 'POST':
alumni.name = request.POST['name']
alumni.student_id = request.POST['student_id']
alumni.graduation_year = request.POST['graduation_year']
alumni.email = request.POST['email']
alumni.phone = request.POST['phone']
alumni.save()
return redirect('alumni-list')
return render(request, 'alumni/edit.html', {'alumni': alumni})
def alumni_delete(request, pk):
alumni = get_object_or_404(Alumni, pk=pk)
if request.method == 'POST':
alumni.delete()
return redirect('alumni-list')
return render(request, 'alumni/delete.html', {'alumni': alumni})
小明:那模板怎么写?
小李:比如,编辑页面的模板edit.html:
小明:这样就能完成编辑功能了。那删除页面也类似。
小李:是的。最后,我们还需要配置URL路由,把各个视图对应到不同的路径。
小明:那URL怎么设置?
小李:在urls.py中添加如下内容:
from django.urls import path
from . import views
urlpatterns = [
path('', views.alumni_list, name='alumni-list'),
path('edit/
path('delete/
]
小明:这样整个系统就基本完成了。
小李:没错。虽然只是一个基础版本,但已经可以满足大部分需求了。未来还可以扩展更多功能,比如活动发布、通知推送等。
小明:看来这个校友会管理系统真的很有用,尤其对于师范大学来说。
小李:是的,它不仅能帮助校友保持联系,还能增强学校与校友之间的互动。
小明:谢谢你,小李!今天学到了很多。
小李:不客气!如果你有兴趣,我们还可以一起继续优化这个系统。
