Đôi khi bạn có thể cần thực thi tập lệnh python trong trình bao hoặc dự án Django. Có nhiều cách để làm điều này. Trong bài viết này, chúng ta sẽ xem xét các cách khác nhau để chạy tập lệnh python trong Django. Điều này rất hữu ích nếu bạn cần chạy tập lệnh python cho các tác vụ nền trong dự án Django của mình. Trong nhiều trường hợp, các nhà phát triển web sử dụng phương pháp này để thực thi tập lệnh python trong trình bao Django và chạy nó dưới dạng công việc định kỳ để gửi tin nhắn và email tự động đến người dùng của họ
Cách chạy Python Script trong Dự án Django
Dưới đây là các cách khác nhau để chạy tập lệnh Python, ví dụ: kiểm tra. py trong dự án Django. Hầu hết các lệnh sau sử dụng “. /quản lý. py”. Nếu chúng không hiệu quả với bạn, vui lòng thử các lệnh tương tự với “sudo python. /quản lý. py” thay vào đó. Điều này có thể xảy ra do biến Python PATH trong hệ thống Linux của bạn chưa được đặt
1. Sử dụng vỏ
Điều hướng đến thư mục gốc của dự án Django chứa quản lý. py và chạy tập lệnh python bằng lệnh sau. Chúng tôi đã giả định rằng quản lý. py và kiểm tra. py nằm trong cùng một thư mục
$ ./manage.py shell < test.py
Nếu tập lệnh python của bạn nằm trong một thư mục khác, bạn cần cung cấp đường dẫn đầy đủ tới tập lệnh python của mình. Trong ví dụ sau, tập lệnh python của chúng tôi được đặt tại /home/ubuntu/test. py
$ ./manage.py shell < /home/ubuntu/test.py
2. Sử dụng tập tin thực thi
Bạn cũng có thể đăng nhập vào Django shell trước bằng lệnh sau
$ ./manage.py shell
và sau đó sử dụng lệnh execfile để chạy tập lệnh python
>>> execfile['/home/ubuntu/test.py']
Trong python 3+, bạn sẽ cần sử dụng lệnh exec thay vì sử dụng execfile
>>> exec[open['/home/ubuntu/test.py'].read[]]
3. sử dụng quản lý. py
Bạn cũng có thể sử dụng quản lý. py một mình để chạy các tập lệnh python như hình bên dưới
$ ./manage.py /home/ubuntu/test.py
Trong bài viết này, chúng ta đã thấy ba cách khác nhau để chạy tập lệnh python từ trình bao Django. Mặc dù không nên chạy các tập lệnh python từ trình bao Django, nhưng đây là một cách tuyệt vời để chạy các tác vụ nền. Điều này là do khi bạn chạy tập lệnh python từ trình bao Django, nó sẽ cho phép bạn truy cập vào tất cả các mô hình, chế độ xem và chức năng được xác định trong dự án Django của bạn
Bước tiếp theo của bạn là đưa dữ liệu vào cơ sở dữ liệu của bạn. Đối với điều này, bạn sẽ sử dụng trình bao Django để đưa một dự án vào cơ sở dữ liệu của mình. Đi đến thiết bị đầu cuối của bạn và khởi động trình bao Django bằng cách nhập nội dung sau
$ python manage.py shell
Thao tác này sẽ mở ra một thiết bị đầu cuối, nhưng nó đã nhập các cài đặt Django, vì vậy nó cho phép bạn làm việc trực tiếp từ thư mục gốc của dự án Django
Pygator trên
Nhưng thực tế bạn sẽ điền vào cơ sở dữ liệu của mình như thế nào nếu bạn có hàng nghìn triệu hàng mẫu?
Martin Breuss Nhóm RP trên
Câu hỏi hay. Là một dự án mới bắt đầu, điều này giả định rằng bạn đang xây dựng một dự án ví dụ nhỏ và bạn sẽ lấp đầy DB của mình khi bạn xây dựng danh mục đầu tư của mình
Tuy nhiên, Django có khả năng tích hợp với cơ sở dữ liệu hiện có và vì đó là tất cả mã Python, bạn cũng có thể viết một tập lệnh tùy chỉnh để tìm nạp dữ liệu từ nguồn của bạn và chuyển nó vào DB của dự án của bạn
báo động lại trên
Đợi đã. Bạn đã sao chép các tệp hình ảnh từ máy chủ của riêng mình, điều này tất nhiên là tôi không thể làm được. Làm thế nào tôi có thể nhận được bản sao của chúng?
Martin Breuss Nhóm RP trên
@reblark. Tôi đã chụp một số ảnh chụp màn hình ngay trên máy tính của mình và chuyển các tệp đó vào cấu trúc thư mục Django mà bạn thấy ở trên. Đường dẫn mà bạn nhìn thấy trỏ đến đường dẫn tương đối trong dự án Django. Đây có thể là bất kỳ tệp hình ảnh nào bạn có cục bộ, bạn chỉ cần đặt tên khớp
báo động lại trên
VÂNG. Tôi không nhìn thấy ảnh chụp màn hình hoặc cấu trúc và tôi xin lỗi vì không thể đồng bộ nhận xét của mình nhưng thật khó để có thể giao tiếp qua một phiên cụ thể. Bây giờ là 4/11 lúc 11 giờ. 00 AM PST và tôi chỉ muốn bạn biết rằng tôi đã xử lý sự cố cơ sở dữ liệu PyCharm. Một mặt, nó rất bực bội. Mặt khác, tìm ra mọi thứ là rất bổ ích. Tất cả đều điên rồ
Gaurav yadav trên
Có cách nào để chúng tôi có thể nhập dữ liệu thông qua giao diện người dùng không?
Martin Breuss Nhóm RP trên
Có, bạn có thể sử dụng Giao diện quản trị đi kèm với ứng dụng Django
Nếu không, bạn sẽ phải xây dựng Biểu mẫu Django của riêng mình để thu thập thông tin đầu vào của người dùng
Siggi Berg trên
Cơ sở dữ liệu không hoạt động trong dự án của tôi. Đây là giao diện của vỏ Django
from projects.models import Project p1 = Project[title=”test project”,description = “This is a test, 1234”,technologi=”Django”, image=”F-01.jpg”] p1.save
Có gì đó của cô ấy dường như đã đi sai. Dù sao tôi vẫn tiếp tục. Nhưng dường như không có gì được đưa vào cơ sở dữ liệu. ***>> kết quả = Dự án. các đối tượng. tất cả các[]
results
*
Siggi Berg trên
Tôi xin lỗi. Tôi thấy rằng tôi có khoảng trống trong “dự án. lệnh mô hình. Ngoài ra, tôi đã quên [] sau p1. tiết kiệm. Bây giờ mọi thứ đang hoạt động tốt
koutsellisthemistoklis trên
1] Khi bạn viết p1 = Projects[title=’test project’,. ]
người mẫu ở đâu. Đối số mô hình của lớp Dự án?
Ngoài ra, một câu hỏi khác
2] Trong khai báo lớp Dự án, các biến. tiêu đề, mô tả, công nghệ, hình ảnh không nên tự. danh hiệu, bản thân. mô tả, bản thân. công nghệ, bản thân. hình ảnh thay thế?
Martin Breuss Nhóm RP trên
Xin chào @koutsellisthemistoklis
1] Thừa kế
Bạn đang làm gì với đoạn mã dưới đây
from django.db import models
class Project[models.Model]:
# your code
là bạn đang kế thừa các thuộc tính từ lớp
projects.objects.all[]
5 của Django sang mô hình mới mà bạn đang tạo. Do đó, projects.objects.all[]
6 không phải là một đối số mà bạn cần phải vượt qua khi tạo một thể hiện của một lớp. Các lớp hoạt động khác với chức năng trong trường hợp này. Kiểm tra bài viết của chúng tôi về Thừa kế và Thành phần. Hướng dẫn OOP Python và phần trong khóa học liên kết của chúng tôi2] Thiếu
projects.objects.all[]
7 trong Django ModelsCách xác định một lớp trong mô hình Django rất đơn giản và hơi bất thường là do Django có các siêu dữ liệu thực sự đảm nhận công việc tạo lớp của bạn
Điều này cho phép định nghĩa lớp rất rõ ràng và dễ dàng. Lưu ý rằng bạn cũng không cần phải viết một phương thức
projects.objects.all[]
8 rõ ràng cho một lớp mô hìnhTất cả điều này là nhờ vào siêu dữ liệu và khối lượng công việc khổng lồ của Django phía sau hậu trường nhằm giúp bạn phát triển web dễ dàng hơn. ]
okorobright13 trên
[Bảng điều khiển tương tác]
from projects.models import project Traceback [most recent call last]: File “”, line 1, in ImportError: cannot import name ‘project’ from ‘projects.models’ [C:\Users\Dell\PycharmProjects\django-portfol io\projects\models.py]
xin vui lòng làm thế nào tôi có thể giải quyết điều này nhờ tiến bộ
Martin Breuss Nhóm RP trên
Xin chào @okorobright13. Có vẻ như đây có thể là một lỗi đánh máy. Mô hình
from django.db import models
class Project[models.Model]:
# your code
4 của bạn nên được viết hoa thay vì viết thườngBạn muốn nhập lớp
from django.db import models
class Project[models.Model]:
# your code
4 mà bạn đã xác định trong $ ./manage.py shell < /home/ubuntu/test.py
41, do đó, câu lệnh nhập của bạn cần đảm bảo rằng nó thực sự có thể tìm thấy lớp đó. Máy tính rất rõ ràng với chính tả và viết hoa, vì vậy, nó sẽ chỉ tìm thấy nó nếu nó khớp chính xác. ] Hy vọng rằng sửa nóokorobright13 trên
Martin Breuss, cảm ơn rất nhiều, bạn đúng là đang làm việc và tôi đang trong quá trình xử lý, hahahahaha lỗi tin nhắn là bạn của chúng tôi. 1
jacob6 trên
$ ./manage.py shell < /home/ubuntu/test.py
5chuyện gì đang xảy ra ở đó vậy?
jacob6 trên
Đừng bận tâm. tôi tìm thấy lỗi. Hóa ra bạn phải rất chính xác với dấu ngoặc đơn và ký hiệu. =oP
Martin Breuss Nhóm RP trên
Đó là một điều khó khăn, bởi vì mũi tên không chỉ đúng chỗ ở đây
Kiểm tra phần cuối của dòng phía trên nơi mà
$ ./manage.py shell < /home/ubuntu/test.py
42 đang trỏ tới, còn thiếu một thứ nhỏ…Bạn có thể nhận thấy rằng có điều gì đó không ổn bằng cách lời nhắc bắt đầu dòng mà bạn đang viết
$ ./manage.py shell < /home/ubuntu/test.py
72, nó phải bắt đầu bằng một $ ./manage.py shell < /home/ubuntu/test.py
44, nhưng thay vào đó lại bắt đầu bằng một $ ./manage.py shell < /home/ubuntu/test.py
45. Các dấu chấm có nghĩa là nó tiếp tục dòng trênHy vọng rằng sẽ giúp bạn tìm thấy nó. . ]
c4inmypants trên
Hey! So I have a weird question. So in the part after p1.save[] I did results = project.objects.all and when I did >>>results I got this :
Tôi nhận ra sai lầm của mình là đã không thêm dấu [] vào cuối và mọi thứ đều ổn. Vì vậy, câu hỏi của tôi là [] yêu cầu python làm gì? . Ai đó có thể giải thích cho tôi, tôi chỉ rất tò mò
Martin Breuss Nhóm RP trên
Xin chào @c4inmypants và bạn đã làm rất tốt khi tìm ra nó và luôn tò mò. ]
Câu trả lời ngắn gọn cho câu hỏi của bạn là trong Python,
$ ./manage.py shell < /home/ubuntu/test.py
46 thực thi một hàm hoặc một phương thứcHàm và Phương thức
Các hàm và phương thức có một số chức năng được mã hóa trong chúng có thể được truy cập bằng cách gọi chúng. Đó là lý do tại sao sử dụng
$ ./manage.py shell < /home/ubuntu/test.py
46 ở cuối tên của chúng được gọi là Lệnh gọi hàm. Trong trường hợp của bạn, để chính xác, bạn phải nói về một “phương thức” thay vì “chức năng” vì mã thực hiện công việc phụ thuộc vào một đối tượng cụ thể. 🙄 Đừng quá lo lắng về điều đó, tuy nhiên, đối với tình huống này, đó chủ yếu là thuật ngữ. Nhưng nếu muốn, bạn có thể đọc thêm về Sự khác biệt giữa Phương thức và HàmVí dụ của bạn
Vì vậy, khi bạn đọc rằng
$ ./manage.py shell < /home/ubuntu/test.py
46 thực thi phương thức, nó có thể khiến bạn nghĩ rằng cần phải có thứ gì đó để thực thi. Đó là đối tượng mà bạn đang đề cập đến và chứa mã logic. Hãy xem ví dụ của bạn, loại bỏ phép gán biến$ ./manage.py shell3
Ở đây bạn đang tham khảo phương thức
$ ./manage.py shell < /home/ubuntu/test.py
49 trên đối tượng $ ./manage.py shell50 của mình, nhưng bạn không gọi nó. Đối với tất cả những gì Python biết, bạn muốn truy cập phương thức chứ không phải thực thi nó. Vì vậy, nó thực hiện đấu thầu của bạn và cho bạn biết những gì bạn nhận được
$ ./manage.py shell < /home/ubuntu/test.py
7Bạn có thể tìm hiểu sâu hơn về đầu ra này và học hỏi được một chút từ nó, nhưng điểm chính của ví dụ này là
- Tham khảo, không thực hiện. Khi bỏ dấu ngoặc, Python cho phép bạn truy cập vào
$ ./manage.py shell
51 của một số đối tượng nằm trong bộ nhớ máy tính của bạn - Chấp hành. Nếu bạn muốn làm cho phương thức thực hiện công việc của nó, bạn cần gọi nó bằng cách thêm
46 vào cuối, e. g$ ./manage.py shell < /home/ubuntu/test.py
________số 8
redxking trên
Người hướng dẫn đặt truy vấn thành p1 để sau khi chạy.
$ ./manage.py shell53
Chạy.
$ ./manage.py shell < /home/ubuntu/test.py
72sau đó.
$ ./manage.py shell < /home/ubuntu/test.py
78alazejha trên
Thông báo lỗi là
$ ./manage.py shell < /home/ubuntu/test.py
4Tôi đang làm gì sai?
Ricky White Nhóm RP trên
@alazejha Xin chào. Không nhìn thấy mã của bạn, thật khó để nói, nhưng đó có thể là một lỗi đánh máy đơn giản. Bạn đang nhập lớp
from django.db import models
class Project[models.Model]:
# your code
4 hoặc $ ./manage.py shell57?
James trên
Chỉ tò mò nếu có một cách dễ dàng để xem mọi thứ trong đối tượng truy vấn. Vì vậy, trong bài học này bạn có thể làm điều này
$ ./manage.py shell5
Điều đó khá tẻ nhạt mặc dù. Điều duy nhất tôi có thể nghĩ đến là nhìn vào bên trong đối tượng và lọc ra các thuộc tính riêng tư
>>> execfile['/home/ubuntu/test.py']
7Có cách nào tốt hơn hay nếu bạn muốn xem bên trong cơ sở dữ liệu, bạn nên sử dụng một công cụ cơ sở dữ liệu?
Bartosz Zaczyński Nhóm RP trên
@jamesrsmall Thông thường, bạn sẽ sử dụng một lớp dữ liệu, lớp này thực hiện biểu diễn chuỗi ngay lập tức
>>> execfile['/home/ubuntu/test.py']
8Vì các mô hình Django sử dụng bộ mô tả nên chúng không tương thích với các lớp dữ liệu. Tuy nhiên, bạn có thể thử tạo một lớp tùy chỉnh để gói gọn logic của mình
from django.db import models
class Project[models.Model]:
# your code
0Sau đó, trong vỏ Django của bạn
from django.db import models
class Project[models.Model]:
# your code
1Lưu ý rằng đoạn mã này cực kỳ đơn giản và không tính đến việc duyệt đệ quy hoặc thậm chí xử lý các loại dữ liệu khác nhau. Tôi đã từng triển khai kỹ lưỡng điều này trong một trong các dự án của mình, nhưng không thể tìm thấy nó nữa
Có rất nhiều thư viện của bên thứ ba trên PyPI có thể làm những gì bạn đang tìm kiếm. Hãy thử tìm kiếm “repr” hoặc “str”
James trên
@Bartek - rất tuyệt, cảm ơn. Tôi đánh giá cao ví dụ và các liên kết
gburbano92 trên
Xin chào, tôi đang gặp một số khó khăn khi các hình ảnh “hàng ngày”, “dự án thử nghiệm”, “việc cần làm” xuất hiện trong tệp img. Tôi đã hoàn thành theo hướng dẫn tệp kép dự án>img nhưng không có hình ảnh, thông qua máy tính để bàn của tôi, tôi có thể thấy các tệp có trong tệp django portfolio>projects>static>projects>img của mình nên không chắc chắn điều gì gây ra lỗi không hiển thị trong tệp ảo của tôi
crispineda34 trên
Đối với lệnh này, tôi tiếp tục gặp lỗi này. Tôi không chắc chắn chính xác về cách tiến hành. “Dự án lớp mẫu. người mẫu. Dự án không khai báo app_label rõ ràng và không có trong ứng dụng trong INSTALLED_APPS. ”
Bartosz Zaczyński Nhóm RP trên
@ crispineda34 Nếu bạn google thông báo lỗi đó và theo dõi kết quả tìm kiếm đầu tiên, bạn sẽ gặp câu hỏi StackOverflow, câu hỏi này dường như có câu trả lời phù hợp với bạn