Django编写一个简单有用户管理权限的设备维护管理系統,包含设备基本信息,维护记录
时间: 2024-03-20 10:41:23 浏览: 21
好的,我可以为您提供一个简单的实现方案。首先,我们需要创建一个 Django 项目,并且创建一个应用程序来管理设备信息和维护记录。
1. 创建 Django 项目和应用程序
在命令行中输入以下命令来创建 Django 项目:
```
django-admin startproject device_management
```
然后,在项目目录下创建一个名为 "devices" 的应用程序:
```
cd device_management
python manage.py startapp devices
```
2. 设计数据库模型
我们需要设计两个模型来存储设备信息和维护记录。在 "devices/models.py" 文件中添加以下代码:
```python
from django.db import models
class Device(models.Model):
name = models.CharField(max_length=50)
description = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def __str__(self):
return self.name
class MaintenanceRecord(models.Model):
device = models.ForeignKey(Device, on_delete=models.CASCADE)
description = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def __str__(self):
return self.description
```
这里我们定义了两个模型类 "Device" 和 "MaintenanceRecord",并且使用了 Django 提供的 ForeignKey 来实现设备和维护记录之间的关联。
3. 创建视图函数
我们需要创建视图函数来处理设备信息和维护记录的增删改查操作。在 "devices/views.py" 文件中添加以下代码:
```python
from django.shortcuts import render, get_object_or_404, redirect
from django.contrib.auth.decorators import login_required
from .models import Device, MaintenanceRecord
@login_required
def device_list(request):
devices = Device.objects.all()
return render(request, 'devices/device_list.html', {'devices': devices})
@login_required
def device_detail(request, pk):
device = get_object_or_404(Device, pk=pk)
records = MaintenanceRecord.objects.filter(device=device)
return render(request, 'devices/device_detail.html', {'device': device, 'records': records})
@login_required
def device_create(request):
if request.method == 'POST':
name = request.POST['name']
description = request.POST['description']
device = Device.objects.create(name=name, description=description)
return redirect('device_detail', pk=device.pk)
else:
return render(request, 'devices/device_form.html')
@login_required
def device_update(request, pk):
device = get_object_or_404(Device, pk=pk)
if request.method == 'POST':
name = request.POST['name']
description = request.POST['description']
device.name = name
device.description = description
device.save()
return redirect('device_detail', pk=device.pk)
else:
return render(request, 'devices/device_form.html', {'device': device})
@login_required
def device_delete(request, pk):
device = get_object_or_404(Device, pk=pk)
device.delete()
return redirect('device_list')
@login_required
def record_create(request, pk):
device = get_object_or_404(Device, pk=pk)
if request.method == 'POST':
description = request.POST['description']
record = MaintenanceRecord.objects.create(device=device, description=description)
return redirect('device_detail', pk=device.pk)
else:
return render(request, 'devices/record_form.html', {'device': device})
@login_required
def record_update(request, device_pk, record_pk):
device = get_object_or_404(Device, pk=device_pk)
record = get_object_or_404(MaintenanceRecord, pk=record_pk)
if request.method == 'POST':
description = request.POST['description']
record.description = description
record.save()
return redirect('device_detail', pk=device.pk)
else:
return render(request, 'devices/record_form.html', {'device': device, 'record': record})
@login_required
def record_delete(request, device_pk, record_pk):
device = get_object_or_404(Device, pk=device_pk)
record = get_object_or_404(MaintenanceRecord, pk=record_pk)
record.delete()
return redirect('device_detail', pk=device.pk)
```
这里我们定义了一些视图函数来处理设备信息和维护记录的增删改查操作,以及展示设备列表和设备详情。
4. 编写模板文件
我们需要编写模板文件来渲染设备信息和维护记录的界面。在 "devices/templates/devices" 目录下创建以下文件:
- device_list.html
```html
{% extends "base.html" %}
{% block content %}
<h2>Device List</h2>
<ul>
{% for device in devices %}
<li><a href="{% url 'device_detail' pk=device.pk %}">{{ device.name }}</a></li>
{% endfor %}
</ul>
<a href="{% url 'device_create' %}">Create Device</a>
{% endblock %}
```
- device_detail.html
```html
{% extends "base.html" %}
{% block content %}
<h2>{{ device.name }}</h2>
<p>{{ device.description }}</p>
<h3>Maintenance Records</h3>
<ul>
{% for record in records %}
<li>
{{ record.description }}
<a href="{% url 'record_update' device.pk record.pk %}">Edit</a>
<a href="{% url 'record_delete' device.pk record.pk %}">Delete</a>
</li>
{% endfor %}
</ul>
<a href="{% url 'record_create' device.pk %}">Add Record</a>
<br><br>
<a href="{% url 'device_list' %}">Back to Device List</a>
{% endblock %}
```
- device_form.html
```html
{% extends "base.html" %}
{% block content %}
<h2>{% if device %}Edit Device{% else %}Create Device{% endif %}</h2>
<form method="post">
{% csrf_token %}
<label for="name">Name:</label>
<input type="text" name="name" value="{% if device %}{{ device.name }}{% endif %}">
<br>
<label for="description">Description:</label>
<textarea name="description">{% if device %}{{ device.description }}{% endif %}</textarea>
<br>
<input type="submit" value="Save">
</form>
<br><br>
<a href="{% url 'device_list' %}">Back to Device List</a>
{% endblock %}
```
- record_form.html
```html
{% extends "base.html" %}
{% block content %}
<h2>{% if record %}Edit Record{% else %}Create Record{% endif %}</h2>
<form method="post">
{% csrf_token %}
<label for="description">Description:</label>
<textarea name="description">{% if record %}{{ record.description }}{% endif %}</textarea>
<br>
<input type="submit" value="Save">
</form>
<br><br>
<a href="{% url 'device_detail' pk=device.pk %}">Back to Device Detail</a>
{% endblock %}
```
5. 配置 URL 路由
最后,我们需要配置 URL 路由来将请求分发到对应的视图函数中。在 "devices/urls.py" 文件中添加以下代码:
```python
from django.urls import path
from . import views
urlpatterns = [
path('', views.device_list, name='device_list'),
path('device/<int:pk>/', views.device_detail, name='device_detail'),
path('device/create/', views.device_create, name='device_create'),
path('device/<int:pk>/update/', views.device_update, name='device_update'),
path('device/<int:pk>/delete/', views.device_delete, name='device_delete'),
path('device/<int:pk>/record/create/', views.record_create, name='record_create'),
path('device/<int:device_pk>/record/<int:record_pk>/update/', views.record_update, name='record_update'),
path('device/<int:device_pk>/record/<int:record_pk>/delete/', views.record_delete, name='record_delete'),
]
```
然后,在 "device_management/urls.py" 文件中配置项目级别的 URL 路由:
```python
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('devices.urls')),
path('accounts/', include('django.contrib.auth.urls')),
]
```
6. 运行项目
现在我们可以运行项目并访问设备管理系统了。在命令行中输入以下命令来启动开发服务器:
```
python manage.py runserver
```
然后在浏览器中访问 "http://127.0.0.1:8000" 即可进入设备列表页面。
需要注意的是,我们在视图函数中添加了 login_required 装饰器来控制用户访问权限,因此在访问设备管理系统之前,需要先创建一个用户并登录。可以通过 Django 自带的管理命令来创建超级用户:
```
python manage.py createsuperuser
```
然后在浏览器中访问 "http://127.0.0.1:8000/admin",使用创建的超级用户进行登录,即可进入管理后台,创建新的用户并分配权限。