chào mọi người. Tôi có một thiết lập dự án trang web DJANGO cơ bản với 2 trang. Tôi muốn khách truy cập trang web truy cập một trang và nhấp vào nút. Khi khách truy cập nhấp vào nút, tôi muốn chạy tập lệnh python. Tập lệnh có thể là bất kỳ tập lệnh nào trên GITHUB. Vì vậy, ví dụ kịch bản phế liệu
Sau đó, tôi muốn kết quả của tập lệnh được in thành tệp CSV
Điều này có thể không và tôi sẽ làm như thế nào?
Cảm ơn bạn
Những gì tôi đã thử
Tôi đã thử nhiều hướng dẫn nhưng không có hướng dẫn nào chỉ cách thực hiện việc này. Chủ yếu là họ trả lại đầu ra cho nhật ký giao diện điều khiển
Thêm giải pháp của bạn ở đây
B I U S small BIG code var
& link [^] encode untab case indent outdent
Xem trước 0
thành viên hiện có
hoặc tham gia với chúng tôi
Tải xuống, Bình chọn, Nhận xét, Xuất bản
Email của bạnEmail này đang được sử dụng. Bạn có cần mật khẩu của bạn?
Mật khẩu tùy chọnKhi trả lời câu hỏi, vui lòng.
- Đọc kỹ câu hỏi.
- Hiểu rằng tiếng Anh không phải là ngôn ngữ đầu tiên của mọi người, vì vậy hãy khoan dung với lỗi chính tả và ngữ pháp
- Nếu một câu hỏi được diễn đạt kém thì hãy yêu cầu làm rõ, bỏ qua nó hoặc chỉnh sửa câu hỏi và khắc phục sự cố. Xúc phạm không được chào đón
- Đừng bảo ai đó đọc hướng dẫn. Rất có thể họ có và không nhận được. Đưa ra câu trả lời hoặc chuyển sang câu hỏi tiếp theo
Nội dung này, cùng với bất kỳ tệp và mã nguồn liên quan nào, được cấp phép theo Giấy phép Mở Dự án Code [CPOL]
Tôi có một tập lệnh đang chạy tốt và cho đầu ra ở dạng danh sách các danh sách. Tôi muốn sử dụng dữ liệu đó trong chế độ xem Django của mình. Tôi không nhận được, cách chạy tập lệnh trong chế độ xem django
Tôi đã tạo một thư mục utils bên trong đó, tôi đã đặt tập lệnh. Ngoài ra, tôi đã tạo __init__. py trong thư mục utils. Sau đó, tôi đang nhập nó vào chế độ xem của mình dưới dạng "từ utils. tên tập lệnh nhập tên lớp". Tôi đang vật lộn với điều đó từ lâu và đánh giá cao sự giúp đỡ
Vì vậy, tôi có trên mẫu HTML của mình một nút để tải tệp xls và nút gửi mà tôi muốn nó bắt đầu tập lệnh python bên ngoài bằng tệp này
Đây là dự án của tôi
Trang Chủ. html
Home
{% csrf_token %}
Input xls file :
lượt xem. py
from subprocess import run, PIPE
import sys
def home[request]:
return render[request, 'home.html']
def external[request]:
inp=request.FILES.get['InputFile']
run[[sys.executable,r'pathToMyDjangoProject\script.py', inp], shell=False,stdout=PIPE]
return render[request,'home.html']
url. py
urlpatterns = [
path[r'', views.home],
path['external/', views.external],
]
script. py
def process[excelFile]:
rdr = pd.read_excel[excelFile, header=None].values.tolist[]
for row in rdr:
...
Cuối cùng, trang html dường như đã hoạt động, loại inp là django InMemoryUploadedFile nên tôi đoán nó đã được tải chính xác nhưng lỗi mà tôi gặp phải là
TypeError at /external/
str, byte hoặc os dự kiến. đối tượng PathLike, không phải InMemoryUploadedFile
.
. Phương thức yêu cầu. BƯU KIỆN.
. URL yêu cầu. http. //127. 0. 0. 1. 8000/bên ngoài/.
. Phiên bản Django. 3. 2. 7.
. Loại ngoại lệ. LoạiLỗi.
. Giá trị ngoại lệ. dự kiến str, byte hoặc os. Đối tượng PathLike, không phải InMemoryUploadedFile.
Tôi nghĩ rằng có một vấn đề với kiểu của biến trong hàm run[] nhưng bạn có ý tưởng nào để sửa nó không?
Cảm ơn bạn bằng cách trước,
Vâng, kịch bản của tôi. py dài khoảng 600 dòng. Tôi không tưởng tượng mình sẽ tích hợp nó hoàn toàn vào chức năng bên ngoài của chế độ xem. py
Lưu ý rằng tôi không đề xuất điều đó. Tôi hiển thị external
khi gọi một hàm có tên là process
Và điều gì sẽ xảy ra nếu tôi biến nó thành một hàm python và tôi chỉ cần nhập nó vào chế độ xem. bạn?
Một chức năng là một chức năng. Không có sự khác biệt về ngữ nghĩa cho dù một hàm nằm trong cùng một tệp hay nằm trong một tệp khác và được nhập
Xin chào các bạn, tôi muốn chỉ cho bạn cách chạy tập lệnh Python bên ngoài bên trong môi trường Django để gỡ lỗi, cho các thao tác xử lý dữ liệu, v.v. Bạn có thể sử dụng các mô-đun Django và các mô hình Django của mình bên trong tập lệnh và chạy và chạy mà không gặp bất kỳ lỗi nào. Điều tốt ở đây là bạn không cần tạo các lệnh Django để chạy tập lệnh của mình. Cách này dễ chạy và gỡ lỗi tập lệnh bên ngoài hơn
Bây giờ hãy xem cách Django khởi động
Chúng tôi sử dụng lệnh
from subprocess import run, PIPE
import sys
def home[request]:
return render[request, 'home.html']
def external[request]:
inp=request.FILES.get['InputFile']
run[[sys.executable,r'pathToMyDjangoProject\script.py', inp], shell=False,stdout=PIPE]
return render[request,'home.html']
0 để bắt đầu một dự án Django, chúng tôi kích hoạt nó bằng from subprocess import run, PIPE
import sys
def home[request]:
return render[request, 'home.html']
def external[request]:
inp=request.FILES.get['InputFile']
run[[sys.executable,r'pathToMyDjangoProject\script.py', inp], shell=False,stdout=PIPE]
return render[request,'home.html']
1 như mọi người Django đều biết. Bên trong lệnh này, phương thức from subprocess import run, PIPE
import sys
def home[request]:
return render[request, 'home.html']
def external[request]:
inp=request.FILES.get['InputFile']
run[[sys.executable,r'pathToMyDjangoProject\script.py', inp], shell=False,stdout=PIPE]
return render[request,'home.html']
2 được gọi và bên trong phương thức này, hàm from subprocess import run, PIPE
import sys
def home[request]:
return render[request, 'home.html']
def external[request]:
inp=request.FILES.get['InputFile']
run[[sys.executable,r'pathToMyDjangoProject\script.py', inp], shell=False,stdout=PIPE]
return render[request,'home.html']
3 được cung cấp cho hàm from subprocess import run, PIPE
import sys
def home[request]:
return render[request, 'home.html']
def external[request]:
inp=request.FILES.get['InputFile']
run[[sys.executable,r'pathToMyDjangoProject\script.py', inp], shell=False,stdout=PIPE]
return render[request,'home.html']
4 dưới dạng tham số và được gọiTại đây, một WSGIServer được khởi tạo sẽ trở thành một phần máy chủ của giao thức WSGI. Tham số WSGIRequestHandler được cung cấp vì nó sẽ được gọi bên trong WSGIServer để xử lý các yêu cầu đến
Ngoài ra còn có một phương thức set_app run. Đối tượng trình xử lý cá thể WSGIHandler của chúng tôi được cung cấp dưới dạng tham số. Phương pháp này đặt phần ứng dụng web của giao thức WSGI
Cuối cùng, hàm thực thi phương thức serve_forever và bắt đầu lắng nghe cổng
Bên trong hàm
from subprocess import run, PIPE
import sys
def home[request]:
return render[request, 'home.html']
def external[request]:
inp=request.FILES.get['InputFile']
run[[sys.executable,r'pathToMyDjangoProject\script.py', inp], shell=False,stdout=PIPE]
return render[request,'home.html']
3, hàm os.environ.setdefault["DJANGO_SETTINGS_MODULE", "project.settings"]0 được gọi, nơi phần ứng dụng web được thiết lập
from django.utils.version import get_version VERSION = [4, 0, 0, 'alpha', 0] __version__ = get_version[VERSION] def setup[set_prefix=True]: """ Configure the settings [this happens as a side effect of accessing the first setting], configure logging and populate the app registry. Set the thread-local urlresolvers script prefix if `set_prefix` is True. """ from django.apps import apps from django.conf import settings from django.urls import set_script_prefix from django.utils.log import configure_logging configure_logging[settings.LOGGING_CONFIG, settings.LOGGING] if set_prefix: set_script_prefix[ '/' if settings.FORCE_SCRIPT_NAME is None else settings.FORCE_SCRIPT_NAME ] apps.populate[settings.INSTALLED_APPS]
Tại đây, quá trình ghi nhật ký được định cấu hình và sổ đăng ký ứng dụng được điền
Bây giờ hãy quay lại chủ đề chính của chúng ta. Trước khi chúng tôi chạy
os.environ.setdefault["DJANGO_SETTINGS_MODULE", "project.settings"]1 trong tập lệnh, chúng tôi cần cung cấp cài đặt ở đâu. py trong dự án của chúng tôi