【问题标题】:Trying to run python script from a Django form尝试从 Django 表单运行 python 脚本
【发布时间】:2020-12-23 08:20:37
【问题描述】:

我正在创建一个简单的 ui,它需要 2 个文件作为输入,如果我们按下提交按钮,然后尝试运行 script.py(这是 Python 脚本)并在屏幕或某个输出文件夹上呈现输出

#forms.py

from django import forms
class AwsForm ( forms.Form ):
    Aws_SourceFile = forms.FileField ()
    Aws_RefernceFile = forms.FileField ()

#views.py

from django.shortcuts import render
from .forms import AwsForm
import subprocess

def home_view(request):
    context = {}
    context [ 'form' ] = AwsForm ()
    return render ( request , "home.html" , context )

def submit_view(request):
    info = request.POST [ 'info' ]


def my_view(request):
    if request.method == 'GET':
        form = AwsForm ()
    else:
        if form.is_valid ():
            info = request.POST [ 'info_name' ]
            output = script_function ( info )
            return render ( request , 'myapp/home.html' , {
                'info': info ,
                'output': output ,
            } )
    return render ( request , 'myapp/home.html' , {
        'form': form ,
    } )


def script_function(post_from_form):
    print ( post_from_form )
    return subprocess.check_call ( [ '\script_18122020.py' , post_from_form ] )

#urls.py

from django.contrib import admin
from django.urls import path
from myapp.views import home_view, submit_view

urlpatterns = [
    path('', home_view ),
    path('submit', submit_view),

]

#home.html

{% block main_content %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Homepage</title>
</head>
<body>
    <h1>Welcome to Adwait Algorithm and Aws.</h1>
    <form method="POST" enctype="multipart/form-data">
        <form action="your_view_url" method="post">
    {% csrf_token %}
    {{ form.as_p}}
    <input type="submit" value="Submit">
    </form>

<p> Post Data: {{ info }} </p>
<p> Result: {{ output }} </p>
{% endblock main_content %}

</body>
</html>

我正在尝试获取一个脚本,我想将输出显示到文件夹、html 文件或屏幕上。

【问题讨论】:

    标签: python django


    【解决方案1】:

    您必须更改脚本函数以接受 2 个文件。 还要更改您的模板...

    <form action="your_view_url" method="post">
    

     <form action="my_view" method="post">
    

    将 my_view 添加到您的 urls.py

    forms.py 编辑这两行

    Aws_SourceFile = forms.FileField(upload_to='your_directory_name/')
    Aws_RefernceFile = forms.FileField(upload_to='your_directory_name/')
    

    Views.py .. (my_view) # 您需要将文件的确切位置传递给脚本

    Aws_SourceFile = request.FILES.get('Aws_SourceFile')
    Aws_RefernceFile =request.FILES.get('Aws_RefernceFile')
    
    ASF_dir_file = os.path.join('your_directory_name', Aws_SourceFile.uploadfile.name)
    
    ARF_dir_file = os.path.join('your_directory_name', Aws_RefernceFile.uploadfile.name)
    
    
    output = script_function ( ASF_dir_file, ARF_dir_file )
    
    def script_function(ASF_dir_file, ARF_dir_file):
        
        output_asf = subprocess.check_call ( [ '\script_18122020.py' , ASF_dir_file] )
        output_asr = subprocess.check_call ( [ '\script_18122020.py' , ARF_dir_file] )
         
        return output_asf, output_asf 
    

    【讨论】:

    • 感谢您的回复,但我收到错误文件“D:\Adwait_gui\trimax\trimaxapp\views.py”,第 34 行 ASF_dir_file = os.path.join ("C:\Users\India\ Desktop\asf ",Aws_SourceFile.uploadfile.name) ^ SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXXXX escape
    • 从哪里来的?你能发布一个堆栈跟踪截图吗?
    • 您上传的文件名中是否有空格?
    • 文件 "D:\Adwait_gui\trimax\trimaxapp\views.py",第 34 行 ASF_dir_file = os.path.join ("C:\Users\India\Desktop\asf",Aws_SourceFile.uploadfile .name) ^ SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXXXX escape
    • 你得到了什么 print(Aws_SourceFile.uploadfile.name)
    猜你喜欢
    • 2013-07-05
    • 1970-01-01
    • 2015-10-15
    • 1970-01-01
    • 2013-11-02
    • 2018-08-06
    • 2017-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多