Django笔记(3)

实现通过网页运行本地脚本,同时将结果反馈到网页上,保存到数据库内.

项目结构:

Django笔记(3)

整体的思路是:表单提交信息,action内填写要转到的网页链接name(在urls.py内设置的):

Django笔记(3)

然后它会执行与之对应的views.py内的函数:

Django笔记(3)

Django笔记(3)

1:再testscript.html写下表单,类型选择post,action内填写想要转到的链接名称.

<form method="post" action="{% url 'polls:scriptresult' %}">
    {% csrf_token %}
    <input type="text" name="script_name" placeholder="script_test">
    <input type="text" name="parameter">
    <input type="submit" value="&#x63D0;&#x4EA4;">
</form>

2:在views.py内写处理表单传递过来的数据的函数,同时在models.py内创建用来存储相关数据的表格.

models.py内:

class ScriptResult(models.Model):
    script_name = models.CharField(max_length=100)
    script_result = models.CharField(max_length=200)
    script_runtime = models.DateTimeField('run time', auto_now=True)

    def __str__(self):
        return self.script_name

这里假设脚本存放在同一路径D:\WebScript\目录下,且启动文件为main.py,目前这个目录下只有一个用来测试的脚本script_test,可以将两个字符串合并,当参数不符合条件时,输出info incorrect

views.py内的函数:

script_list = ['script_test']

def script_result(request):
    # &#x83B7;&#x53D6;&#x8868;&#x5355;&#x4F20;&#x9012;&#x8FC7;&#x6765;&#x7684;&#x811A;&#x672C;&#x540D;&#x79F0;&#x548C;&#x76F8;&#x5173;&#x53C2;&#x6570;
    script_name = request.POST.get('script_name')
    parameter = request.POST.get('parameter')
    # &#x5982;&#x679C;&#x811A;&#x672C;&#x5217;&#x8868;&#x4E2D;&#x6709;&#x8FD9;&#x4E2A;&#x811A;&#x672C;&#xFF0C;&#x5C31;&#x5F00;&#x59CB;&#x5904;&#x7406;&#xFF0C;&#x4F7F;&#x7528;subprocess&#x6A21;&#x5757;&#x6267;&#x884C;&#x811A;&#x672C;&#xFF0C;&#x540C;&#x65F6;&#x63A5;&#x53D7;&#x6B64;&#x547D;&#x4EE4;&#x7684;&#x8F93;&#x51FA;&#xFF0C;&#x5C06;&#x5176;&#x5B58;&#x50A8;&#x8FDB;&#x5165;&#x6570;&#x636E;&#x5E93;
    if script_name in script_list:
        do_something = subprocess.Popen(rf'python D:\WebScript\{script_name}\main.py {parameter}', stdout=subprocess.PIPE, shell=True)
        script_re = do_something.stdout.read().decode().strip()
        script_mysql = ScriptResult(script_name=script_name, script_result=script_re)
        script_mysql.save()
        curr_re = ScriptResult.objects.all()
        return render(request, 'polls/script_result.html', {'path': script_name, 'result': script_re,
                                                            'mysql_script_result': curr_re})
    else:
        return HttpResponse('&#x811A;&#x672C;&#x540D;&#x79F0;&#x9519;&#x8BEF;&#xFF0C;&#x6682;&#x65F6;&#x6CA1;&#x6709;&#x8FD9;&#x4E2A;&#x811A;&#x672C;')

3:在urls.py内创建链接:

path('scirptresult/', views.script_result, name='scriptresult')

第一部分为浏览器搜索栏内显示的链接,这是在polls文件内,所以链接应该为:ip/polls/scriptresult/

第二个是引用的函数,第三个是html文件中填写的名字.

界面如下:

Django笔记(3)

正确执行如下:

Django笔记(3)

脚本不存在:

Django笔记(3)

数据库数据:

Django笔记(3)

Original: https://blog.csdn.net/Sodnrn/article/details/121853952
Author: Sodnrn
Title: Django笔记(3)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/734909/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球