### Django+MySQL 学生信息管理系统开发教程
以下是一个详细的新手教程,涵盖学生信息管理系统的增删改查、登录验证、弹出框提示、表格展示以及条件查询功能。
---
#### 1. 环境搭建与项目初始化
确保已安装Python和Django,并创建一个新的Django项目。
```bash
pip install django mysqlclient
django-admin startproject student_management
cd student_management
python manage.py startapp students
```
在`settings.py`中配置MySQL数据库连接[^1]:
```python
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'student_db',
'USER': 'root',
'PASSWORD': 'your_password',
'HOST': 'localhost',
'PORT': '3306',
}
}
```
将`students`应用添加到`INSTALLED_APPS`中。
---
#### 2. 数据库模型设计
定义学生信息的数据库模型。
```python
# models.py
from django.db import models
class Student(models.Model):
s_id = models.CharField(max_length=20, unique=True, verbose_name="学号")
s_name = models.CharField(max_length=30, verbose_name="姓名")
s_gender = models.CharField(max_length=10, choices=[('male', '男'), ('female', '女')], verbose_name="性别")
s_age = models.IntegerField(verbose_name="年龄")
s_major = models.CharField(max_length=50, verbose_name="专业")
def __str__(self):
return self.s_name
```
运行迁移命令以创建数据库表。
```bash
python manage.py makemigrations
python manage.py migrate
```
---
#### 3. 登录验证功能
实现基于用户名和密码的登录验证。
在`settings.py`中启用自定义认证后端:
```python
AUTHENTICATION_BACKENDS = ['students.backends.StudentBackend']
```
创建自定义认证后端。
```python
# backends.py
from django.contrib.auth.backends import BaseBackend
from .models import Student
class StudentBackend(BaseBackend):
def authenticate(self, request, username=None, password=None):
try:
student = Student.objects.get(s_username=username)
if student.s_password == password: # 实际应用中应使用加密
return student
except Student.DoesNotExist:
return None
def get_user(self, user_id):
try:
return Student.objects.get(pk=user_id)
except Student.DoesNotExist:
return None
```
登录视图示例:
```python
# views.py
from django.shortcuts import render, redirect
from django.contrib.auth import authenticate, login
def login_view(request):
if request.method == 'POST':
username = request.POST['username']
password = request.POST['password']
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
return redirect('student_list')
else:
return render(request, 'login.html', {'error': 'Invalid credentials'})
return render(request, 'login.html')
```
登录页面模板:
```html
<!-- login.html -->
<form method="post">
{% csrf_token %}
<input type="text" name="username" placeholder="Username" required>
<input type="password" name="password" placeholder="Password" required>
<button type="submit">Login</button>
</form>
{% if error %}
<script>alert("{{ error }}");</script>
{% endif %}
```
---
#### 4. 表格展示学生信息
通过视图函数查询并展示学生信息。
```python
# views.py
from django.shortcuts import render
from .models import Student
def student_list(request):
students = Student.objects.all()
return render(request, 'student_list.html', {'students': students})
```
前端表格展示:
```html
<!-- student_list.html -->
<table border="1">
<tr>
<th>学号</th>
<th>姓名</th>
<th>性别</th>
<th>年龄</th>
<th>专业</th>
<th>操作</th>
</tr>
{% for student in students %}
<tr>
<td>{{ student.s_id }}</td>
<td>{{ student.s_name }}</td>
<td>{{ student.s_gender }}</td>
<td>{{ student.s_age }}</td>
<td>{{ student.s_major }}</td>
<td>
<a href="{% url 'edit_student' student.id %}">编辑</a> |
<a href="{% url 'delete_student' student.id %}" onclick="return confirm('确认删除?')">删除</a>
</td>
</tr>
{% endfor %}
</table>
```
---
#### 5. 增删改功能
**新增学生信息:**
```python
# views.py
from django.shortcuts import render, redirect
from .forms import StudentForm
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})
```
表单类定义:
```python
# forms.py
from django import forms
from .models import Student
class StudentForm(forms.ModelForm):
class Meta:
model = Student
fields = ['s_id', 's_name', 's_gender', 's_age', 's_major']
```
**编辑学生信息:**
```python
# views.py
def edit_student(request, pk):
student = Student.objects.get(id=pk)
if request.method == 'POST':
form = StudentForm(request.POST, instance=student)
if form.is_valid():
form.save()
return redirect('student_list')
else:
form = StudentForm(instance=student)
return render(request, 'edit_student.html', {'form': form})
```
**删除学生信息:**
```python
# views.py
from django.shortcuts import redirect
from .models import Student
def delete_student(request, pk):
student = Student.objects.get(id=pk)
student.delete()
return redirect('student_list')
```
---
#### 6. 条件查询功能
实现按条件查询学生信息。
```python
# views.py
def search_student(request):
query = request.GET.get('query', '')
students = Student.objects.filter(s_id__icontains=query) | Student.objects.filter(s_major__icontains=query)
return render(request, 'student_list.html', {'students': students})
```
前端搜索框:
```html
<form method="get">
<input type="text" name="query" placeholder="Search by ID or Major">
<button type="submit">Search</button>
</form>
```
---
#### 7. 拓展功能:管理员信息管理
管理员可以修改自己的密码。
```python
# views.py
from django.contrib.auth.hashers import make_password
def change_password(request):
if request.method == 'POST':
new_password = request.POST['new_password']
user = request.user
user.s_password = make_password(new_password)
user.save()
return redirect('login_view')
return render(request, 'change_password.html')
```
---
###