若依框架实现学生请销假管理系统代码
时间: 2024-05-02 14:16:51 浏览: 9
以下是一个简单的学生请销假管理系统的代码示例,使用的是 Django 框架:
### models.py
```python
from django.db import models
from django.contrib.auth.models import User
class Student(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
student_id = models.CharField(max_length=20)
department = models.CharField(max_length=50)
grade = models.CharField(max_length=20)
def __str__(self):
return self.user.username
class Leave(models.Model):
student = models.ForeignKey(Student, on_delete=models.CASCADE)
start_date = models.DateField()
end_date = models.DateField()
reason = models.TextField()
approved = models.BooleanField(default=False)
def __str__(self):
return self.student.user.username + ' - ' + self.reason
```
### forms.py
```python
from django import forms
from .models import Leave
class LeaveForm(forms.ModelForm):
class Meta:
model = Leave
fields = ['start_date', 'end_date', 'reason']
widgets = {
'start_date': forms.DateInput(attrs={'type': 'date'}),
'end_date': forms.DateInput(attrs={'type': 'date'}),
}
```
### views.py
```python
from django.shortcuts import render, redirect
from django.contrib.auth.decorators import login_required
from .models import Student, Leave
from .forms import LeaveForm
@login_required
def home(request):
student = request.user.student
leaves = Leave.objects.filter(student=student)
return render(request, 'leaves/home.html', {'leaves': leaves})
@login_required
def new_leave(request):
student = request.user.student
if request.method == 'POST':
form = LeaveForm(request.POST)
if form.is_valid():
leave = form.save(commit=False)
leave.student = student
leave.save()
return redirect('leaves:home')
else:
form = LeaveForm()
return render(request, 'leaves/new_leave.html', {'form': form})
@login_required
def leave_detail(request, leave_id):
student = request.user.student
leave = Leave.objects.get(id=leave_id)
if student != leave.student:
return redirect('leaves:home')
return render(request, 'leaves/leave_detail.html', {'leave': leave})
@login_required
def leave_approve(request, leave_id):
if not request.user.is_staff:
return redirect('leaves:home')
leave = Leave.objects.get(id=leave_id)
leave.approved = True
leave.save()
return redirect('leaves:home')
```
### urls.py
```python
from django.urls import path
from . import views
app_name = 'leaves'
urlpatterns = [
path('', views.home, name='home'),
path('new_leave/', views.new_leave, name='new_leave'),
path('<int:leave_id>/', views.leave_detail, name='leave_detail'),
path('<int:leave_id>/approve/', views.leave_approve, name='leave_approve'),
]
```
### templates
#### home.html
```html
{% extends 'base.html' %}
{% block content %}
<h1>My Leaves</h1>
<a href="{% url 'leaves:new_leave' %}">New Leave</a>
<ul>
{% for leave in leaves %}
<li>
<a href="{% url 'leaves:leave_detail' leave.id %}">{{ leave.reason }}</a>
{% if leave.approved %}<span style="color: green;">(Approved)</span>{% endif %}
</li>
{% empty %}
<li>No leaves found.</li>
{% endfor %}
</ul>
{% endblock %}
```
#### new_leave.html
```html
{% extends 'base.html' %}
{% block content %}
<h1>New Leave</h1>
<form method="POST">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Submit</button>
</form>
{% endblock %}
```
#### leave_detail.html
```html
{% extends 'base.html' %}
{% block content %}
<h1>Leave Detail</h1>
<p><strong>Reason:</strong> {{ leave.reason }}</p>
<p><strong>Start Date:</strong> {{ leave.start_date }}</p>
<p><strong>End Date:</strong> {{ leave.end_date }}</p>
{% if not leave.approved %}
{% if user.is_staff %}
<a href="{% url 'leaves:leave_approve' leave.id %}">Approve</a>
{% endif %}
{% endif %}
{% endblock %}
```
这里只是一个简单的示例,实际项目中可能需要根据具体需求进行更多的功能扩展。