python写一个设备管理系统

首页 / 常见问题 / 设备管理系统 / python写一个设备管理系统
作者:设备服务商 发布时间:08-21 18:23 浏览量:9473
logo
织信企业级低代码开发平台
提供表单、流程、仪表盘、API等功能,非IT用户可通过设计表单来收集数据,设计流程来进行业务协作,使用仪表盘来进行数据分析与展示,IT用户可通过API集成第三方系统平台数据。
免费试用

在Python中编写一个设备管理系统可以通过使用Django框架实现。Django提供了强大的ORM、灵活的URL路由、内置的用户认证系统,适用于开发复杂的Web应用。通过创建一个Django项目和一个设备管理应用,我们可以定义设备模型、实现CRUD操作、提供用户认证和权限控制功能。

一、Django框架概述、环境设置

Django框架概述:Django是一个高层次的Python Web框架,鼓励快速开发和干净、实用的设计。Django的主要特点包括:ORM(对象关系映射)、内置的管理界面、灵活的URL路由、强大的用户认证系统和权限控制、良好的文档支持。

环境设置:首先需要安装Python和Django,可以通过pip安装:

pip install django

然后,使用Django命令行工具创建一个新的项目和应用:

django-admin startproject device_management

cd device_management

django-admin startapp devices

这将创建项目和应用的目录结构。接下来,需要在项目的settings.py中注册应用:

INSTALLED_APPS = [

...

'devices',

]

二、定义设备模型、迁移数据库

定义设备模型:devices/models.py中定义设备模型,包括设备名称、型号、序列号、购买日期等字段。

from django.db import models

class Device(models.Model):

name = models.CharField(max_length=100)

model = models.CharField(max_length=100)

serial_number = models.CharField(max_length=100, unique=True)

purchase_date = models.DateField()

def __str__(self):

return self.name

迁移数据库:执行以下命令创建数据库迁移文件并应用迁移:

python manage.py makemigrations

python manage.py migrate

三、创建视图、模板、URL配置

创建视图:devices/views.py中定义视图函数或类视图,用于处理设备的CRUD操作。

from django.shortcuts import render, get_object_or_404, redirect

from .models import Device

from .forms import DeviceForm

def device_list(request):

devices = Device.objects.all()

return render(request, 'devices/device_list.html', {'devices': devices})

def device_detail(request, pk):

device = get_object_or_404(Device, pk=pk)

return render(request, 'devices/device_detail.html', {'device': device})

def device_create(request):

if request.method == 'POST':

form = DeviceForm(request.POST)

if form.is_valid():

form.save()

return redirect('device_list')

else:

form = DeviceForm()

return render(request, 'devices/device_form.html', {'form': form})

def device_update(request, pk):

device = get_object_or_404(Device, pk=pk)

if request.method == 'POST':

form = DeviceForm(request.POST, instance=device)

if form.is_valid():

form.save()

return redirect('device_list')

else:

form = DeviceForm(instance=device)

return render(request, 'devices/device_form.html', {'form': form})

def device_delete(request, pk):

device = get_object_or_404(Device, pk=pk)

if request.method == 'POST':

device.delete()

return redirect('device_list')

return render(request, 'devices/device_confirm_delete.html', {'device': device})

创建模板:devices/templates/devices目录下创建HTML模板文件,如device_list.htmldevice_detail.htmldevice_form.htmldevice_confirm_delete.html

<!-- device_list.html -->

{% extends "base_generic.html" %}

{% block content %}

<h1>Device List</h1>

<ul>

{% for device in devices %}

<li><a href="{% url 'device_detail' device.pk %}">{{ device.name }}</a></li>

{% endfor %}

</ul>

<a href="{% url 'device_create' %}">Add New Device</a>

{% endblock %}

URL配置:devices/urls.py中配置URL模式,并在device_management/urls.py中包含设备应用的URL。

# devices/urls.py

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/new/', views.device_create, name='device_create'),

path('device/<int:pk>/edit/', views.device_update, name='device_update'),

path('device/<int:pk>/delete/', views.device_delete, name='device_delete'),

]

device_management/urls.py

from django.contrib import admin

from django.urls import include, path

urlpatterns = [

path('admin/', admin.site.urls),

path('devices/', include('devices.urls')),

]

四、表单处理、用户认证

表单处理:devices/forms.py中定义设备表单,使用Django的表单类。

from django import forms

from .models import Device

class DeviceForm(forms.ModelForm):

class Meta:

model = Device

fields = ['name', 'model', 'serial_number', 'purchase_date']

用户认证:使用Django内置的用户认证系统来管理用户的登录、注册、权限控制。在device_management/settings.py中配置认证设置,如登录URL、登出URL等。

LOGIN_REDIRECT_URL = '/'

LOGOUT_REDIRECT_URL = '/'

创建用户注册、登录、登出视图和模板,并在URL配置中添加相应的路径。

# device_management/urls.py

from django.contrib.auth import views as auth_views

urlpatterns = [

...

path('accounts/login/', auth_views.LoginView.as_view(), name='login'),

path('accounts/logout/', auth_views.LogoutView.as_view(), name='logout'),

path('accounts/signup/', views.signup, name='signup'),

]

定义用户注册视图和表单。

# devices/views.py

from django.contrib.auth import login, authenticate

from django.contrib.auth.forms import UserCreationForm

from django.shortcuts import render, redirect

def signup(request):

if request.method == 'POST':

form = UserCreationForm(request.POST)

if form.is_valid():

user = form.save()

login(request, user)

return redirect('device_list')

else:

form = UserCreationForm()

return render(request, 'signup.html', {'form': form})

五、权限控制、测试和部署

权限控制:使用Django的权限系统来控制用户对设备管理功能的访问。在视图函数或类视图中使用装饰器限制访问权限。

from django.contrib.auth.decorators import login_required

from django.utils.decorators import method_decorator

@method_decorator(login_required, name='dispatch')

class DeviceListView(ListView):

model = Device

template_name = 'devices/device_list.html'

测试:编写单元测试和功能测试,确保设备管理系统的各项功能正常。在devices/tests.py中定义测试用例,使用Django的测试工具进行测试。

from django.test import TestCase

from .models import Device

class DeviceModelTest(TestCase):

def test_string_representation(self):

device = Device(name="Test Device")

self.assertEqual(str(device), device.name)

部署:选择适合的服务器和数据库,配置项目的生产环境设置,如静态文件、数据库连接等。可以使用Docker容器化部署,或者使用Heroku等平台进行快速部署。

通过上述步骤,一个功能完善的设备管理系统便可实现,包括设备的CRUD操作、用户认证和权限控制、测试和部署等方面。Django框架提供的丰富特性和强大工具,使得开发和维护这样的系统变得高效且便捷

相关问答FAQs:

创建一个设备管理系统是一个非常实用的项目,可以帮助企业有效管理其设备资产。这个系统通常包括设备的添加、删除、修改、查询等功能。以下是一个简单的设备管理系统的Python实现示例,使用Flask框架进行Web开发,并使用SQLite作为数据库。

环境准备

首先,确保你已经安装了以下库:

pip install Flask Flask-SQLAlchemy

项目结构

项目结构可以如下所示:

device_management/
│
├── app.py
├── models.py
├── templates/
│   ├── index.html
│   ├── add_device.html
│   └── edit_device.html
└── static/
    └── styles.css

1. 创建数据库模型

models.py文件中定义设备模型。

from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

class Device(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(100), nullable=False)
    description = db.Column(db.String(200), nullable=True)
    status = db.Column(db.String(50), nullable=False)

    def __repr__(self):
        return f'<Device {self.name}>'

2. 创建Flask应用

app.py文件中创建Flask应用并设置数据库。

from flask import Flask, render_template, request, redirect, url_for
from models import db, Device

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///devices.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db.init_app(app)

with app.app_context():
    db.create_all()

@app.route('/')
def index():
    devices = Device.query.all()
    return render_template('index.html', devices=devices)

@app.route('/add', methods=['GET', 'POST'])
def add_device():
    if request.method == 'POST':
        name = request.form['name']
        description = request.form['description']
        status = request.form['status']
        new_device = Device(name=name, description=description, status=status)
        db.session.add(new_device)
        db.session.commit()
        return redirect(url_for('index'))
    return render_template('add_device.html')

@app.route('/edit/<int:device_id>', methods=['GET', 'POST'])
def edit_device(device_id):
    device = Device.query.get_or_404(device_id)
    if request.method == 'POST':
        device.name = request.form['name']
        device.description = request.form['description']
        device.status = request.form['status']
        db.session.commit()
        return redirect(url_for('index'))
    return render_template('edit_device.html', device=device)

@app.route('/delete/<int:device_id>')
def delete_device(device_id):
    device = Device.query.get_or_404(device_id)
    db.session.delete(device)
    db.session.commit()
    return redirect(url_for('index'))

if __name__ == '__main__':
    app.run(debug=True)

3. 创建HTML模板

templates文件夹中创建index.htmladd_device.htmledit_device.html

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="{{ url_for('static', filename='styles.css') }}">
    <title>设备管理系统</title>
</head>
<body>
    <h1>设备管理系统</h1>
    <a href="{{ url_for('add_device') }}">添加设备</a>
    <table>
        <tr>
            <th>设备名称</th>
            <th>描述</th>
            <th>状态</th>
            <th>操作</th>
        </tr>
        {% for device in devices %}
        <tr>
            <td>{{ device.name }}</td>
            <td>{{ device.description }}</td>
            <td>{{ device.status }}</td>
            <td>
                <a href="{{ url_for('edit_device', device_id=device.id) }}">编辑</a>
                <a href="{{ url_for('delete_device', device_id=device.id) }}">删除</a>
            </td>
        </tr>
        {% endfor %}
    </table>
</body>
</html>

add_device.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>添加设备</title>
</head>
<body>
    <h1>添加设备</h1>
    <form method="POST">
        <label for="name">设备名称:</label>
        <input type="text" name="name" required>
        <label for="description">描述:</label>
        <input type="text" name="description">
        <label for="status">状态:</label>
        <input type="text" name="status" required>
        <button type="submit">添加设备</button>
    </form>
    <a href="{{ url_for('index') }}">返回</a>
</body>
</html>

edit_device.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>编辑设备</title>
</head>
<body>
    <h1>编辑设备</h1>
    <form method="POST">
        <label for="name">设备名称:</label>
        <input type="text" name="name" value="{{ device.name }}" required>
        <label for="description">描述:</label>
        <input type="text" name="description" value="{{ device.description }}">
        <label for="status">状态:</label>
        <input type="text" name="status" value="{{ device.status }}" required>
        <button type="submit">保存更改</button>
    </form>
    <a href="{{ url_for('index') }}">返回</a>
</body>
</html>

4. 样式表

static文件夹中创建styles.css文件并添加一些基本样式。

body {
    font-family: Arial, sans-serif;
    margin: 20px;
}

h1 {
    color: #333;
}

table {
    width: 100%;
    border-collapse: collapse;
}

table, th, td {
    border: 1px solid black;
}

th, td {
    padding: 10px;
    text-align: left;
}

5. 启动应用

在终端中运行以下命令启动应用:

python app.py

访问http://127.0.0.1:5000/来使用设备管理系统。

总结

这个设备管理系统是一个基本的示例,展示了如何使用Flask和SQLite快速构建一个Web应用。你可以根据需要扩展该系统,增加更多功能,比如用户权限管理、设备分类、设备借用管理等。

如果你想更高效地开发应用程序,推荐一个好用的低代码开发平台,可以在短时间内搭建管理软件。5分钟即可搭建一个管理软件,地址是: https://www.informat.cn/(或直接右上角申请体验)x6aj1;

另外,提供100+企业管理系统模板免费使用,无需下载,在线安装,地址是: https://www.informat.cn/(或直接右上角申请体验)7wtn5;

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系邮箱:hopper@cornerstone365.cn 处理,核实后本网站将在24小时内删除。

最近更新

什么电子设备及软件适合读pdf并添加笔记
10-24 16:55
功能测试在连网设备中的角色
10-24 16:55
如何在对嵌入式设备进行自动化测试
10-24 16:55
网络设备配置和故障排除
10-24 16:55
服务器及网络设备集中管理技术是什么
10-24 16:55
golp是什么设备
10-24 16:55
开发一台非标设备,总共需要哪些软件工程师
10-24 16:55
如何处理移动设备的触摸事件
10-24 16:55
linux为什么访问设备数据先要mount
10-24 16:55

立即开启你的数字化管理

用心为每一位用户提供专业的数字化解决方案及业务咨询

  • 深圳市基石协作科技有限公司
  • 地址:深圳市南山区科技中一路大族激光科技中心909室
  • 座机:400-185-5850
  • 手机:137-1379-6908
  • 邮箱:sales@cornerstone365.cn
  • 微信公众号二维码

© copyright 2019-2024. 织信INFORMAT 深圳市基石协作科技有限公司 版权所有 | 粤ICP备15078182号

前往Gitee仓库
微信公众号二维码
咨询织信数字化顾问获取最新资料
数字化咨询热线
400-185-5850
申请预约演示
立即与行业专家交流