用django开发个功能,运行python脚本文件,支持增删改查,运行终止
时间: 2024-03-02 08:48:01 浏览: 19
好的,您可以参考以下步骤:
1. 首先在Django项目中创建一个新的app,例如命名为“scriptrunner”。
2. 在该app下创建一个名为“scripts”的文件夹,用于存放python脚本文件。
3. 在该app下创建一个名为“models.py”的文件,定义一个名为“Script”的模型,用于存储Python脚本文件的相关信息,例如文件名称、文件路径、运行状态等。
``` python
from django.db import models
class Script(models.Model):
name = models.CharField(max_length=255)
path = models.CharField(max_length=255)
status = models.CharField(max_length=10, default='停止')
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def __str__(self):
return self.name
```
4. 在该app下创建一个名为“forms.py”的文件,定义一个表单类,用于添加和修改Python脚本文件的相关信息。
``` python
from django import forms
from .models import Script
class ScriptForm(forms.ModelForm):
class Meta:
model = Script
fields = ['name', 'path']
```
5. 在该app下创建一个名为“views.py”的文件,定义视图函数,用于处理用户请求,并调用Python脚本文件。
``` python
import os
from django.shortcuts import render, redirect
from django.views.decorators.csrf import csrf_exempt
from django.contrib import messages
from .models import Script
from .forms import ScriptForm
@csrf_exempt
def script_list(request):
scripts = Script.objects.all()
return render(request, 'script_list.html', {'scripts': scripts})
@csrf_exempt
def script_add(request):
if request.method == 'POST':
form = ScriptForm(request.POST)
if form.is_valid():
script = form.save()
messages.success(request, '添加成功!')
return redirect('script_list')
else:
form = ScriptForm()
return render(request, 'script_add.html', {'form': form})
@csrf_exempt
def script_edit(request, script_id):
script = Script.objects.get(id=script_id)
if request.method == 'POST':
form = ScriptForm(request.POST, instance=script)
if form.is_valid():
script = form.save()
messages.success(request, '修改成功!')
return redirect('script_list')
else:
form = ScriptForm(instance=script)
return render(request, 'script_edit.html', {'form': form, 'script': script})
@csrf_exempt
def script_delete(request, script_id):
script = Script.objects.get(id=script_id)
script.delete()
messages.success(request, '删除成功!')
return redirect('script_list')
@csrf_exempt
def script_run(request, script_id):
script = Script.objects.get(id=script_id)
if script.status == '运行中':
messages.error(request, '该脚本正在运行中,请勿重复执行!')
return redirect('script_list')
script.status = '运行中'
script.save()
try:
os.system('python {}'.format(script.path))
messages.success(request, '脚本执行成功!')
except:
messages.error(request, '脚本执行失败!')
script.status = '停止'
script.save()
return redirect('script_list')
```
6. 在该app下创建一个名为“urls.py”的文件,定义URL路由,将请求映射到对应的视图函数。
``` python
from django.urls import path
from . import views
urlpatterns = [
path('', views.script_list, name='script_list'),
path('add/', views.script_add, name='script_add'),
path('edit/<int:script_id>/', views.script_edit, name='script_edit'),
path('delete/<int:script_id>/', views.script_delete, name='script_delete'),
path('run/<int:script_id>/', views.script_run, name='script_run'),
]
```
7. 在该app下创建一个名为“templates”的文件夹,用于存放HTML模板文件。
8. 在“templates”文件夹下创建一个名为“script_list.html”的文件,用于展示Python脚本文件的列表,并提供添加、修改、删除和运行脚本功能。
``` html
{% extends 'base.html' %}
{% block content %}
<h2>Python脚本文件列表</h2>
<a href="{% url 'script_add' %}" class="btn btn-primary">添加脚本文件</a>
<table class="table mt-3">
<thead>
<tr>
<th>#</th>
<th>名称</th>
<th>路径</th>
<th>状态</th>
<th>创建时间</th>
<th>操作</th>
</tr>
</thead>
<tbody>
{% for script in scripts %}
<tr>
<td>{{ script.id }}</td>
<td>{{ script.name }}</td>
<td>{{ script.path }}</td>
<td>{{ script.status }}</td>
<td>{{ script.created_at }}</td>
<td>
<a href="{% url 'script_edit' script.id %}" class="btn btn-sm btn-primary">修改</a>
<a href="{% url 'script_delete' script.id %}" class="btn btn-sm btn-danger" onclick="return confirm('确定要删除吗?')">删除</a>
<a href="{% url 'script_run' script.id %}" class="btn btn-sm btn-success">运行</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endblock %}
```
9. 在“templates”文件夹下创建一个名为“script_add.html”的文件,用于添加Python脚本文件的信息。
``` html
{% extends 'base.html' %}
{% block content %}
<h2>添加Python脚本文件</h2>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit" class="btn btn-primary">添加</button>
</form>
{% endblock %}
```
10. 在“templates”文件夹下创建一个名为“script_edit.html”的文件,用于修改Python脚本文件的信息。
``` html
{% extends 'base.html' %}
{% block content %}
<h2>修改Python脚本文件</h2>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit" class="btn btn-primary">保存</button>
</form>
{% endblock %}
```
11. 最后,在Django项目的“settings.py”文件中添加以下配置。
``` python
INSTALLED_APPS = [
# ...
'scriptrunner',
]
TEMPLATES = [
{
# ...
'APP_DIRS': True,
# ...
},
]
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
```
现在,您可以通过访问URL“/scriptrunner/”来打开Python脚本文件的列表页面,通过页面上的按钮来添加、修改、删除和运行Python脚本文件。在运行Python脚本文件时,系统会自动将其状态设置为“运行中”,待执行完成后再将其状态设置为“停止”。