2009-08-17 25 views
7

Tôi có thể lấy hướng dẫn kỹ thuật/chi tiết về cách thức hoạt động của nội bộ django, tức là tôi muốn biết khi có yêu cầu đến từ khách hàng;Tôi có thể lấy thông tin kỹ thuật về cách thức nội bộ của Django hoạt động ở đâu?

  • chức năng django nào nhận được?
  • phần mềm trung gian nào được gọi?
  • đối tượng yêu cầu được tạo ra như thế nào? và lớp/chức năng nào tạo ra nó?
  • Chức năng nào ánh xạ yêu cầu đến chế độ xem cần thiết?
  • Mã/lượt xem của bạn được gọi là

? vv ...

Paul.G

+3

Khi bạn nhìn vào nguồn, bạn đã thấy gì? –

Trả lời

9

Cách dễ nhất để hiểu nội bộ của django, là bằng cách đọc một cuốn sách được viết riêng cho điều đó.

Đọc Pro Django. Nó cung cấp cho bạn một sự hiểu biết sâu sắc về lập trình meta đầu tiên và chứng minh cách nó được sử dụng trong các mô hình django, để tạo ra chúng một cách năng động.

Giao dịch tương tự với nhiều khái niệm python khác và cách django sử dụng nó.

+2

Có, đây là phải đọc! –

+1

Tôi đồng ý. Cuốn sách này cho bạn thấy một số kỹ thuật Python tiên tiến mà Django sử dụng để cung cấp khung công tác hữu ích. –

10

"Sử dụng các nguồn, Luke." Vẻ đẹp của phần mềm nguồn mở là bạn có thể tự mình xem (và sửa đổi) mã.

+1

+1. thường thì đây là câu trả lời không hữu ích; nhưng nguồn Django là __very__ có thể đọc được. – Javier

+1

Đồng ý. Mã nguồn trên các dự án lớn thường khó hiểu trừ khi bạn thực sự đóng góp cho nó một cách thường xuyên. Nhưng Django là mô-đun cao và dễ dàng tập trung vào một yếu tố cụ thể để nghiên cứu. – Soviut

+0

Vâng, đúng vậy. Và chắc chắn người ta nên bắt đầu với tài liệu trực tuyến tuyệt vời như Soviut chỉ ra. Tuy nhiên, đối với mức độ chi tiết ngụ ý bởi câu hỏi, không có thay thế cho việc nhìn vào mã. –

1

Tôi nghi ngờ có hướng dẫn kỹ thuật về chủ đề này. Nó có thể mất một chút đào, nhưng tài liệu API và mã nguồn là các cược tốt nhất của bạn để có thông tin đáng tin cậy, cập nhật.

0

Tài liệu thường đi vào chi tiết khi cần phải giải thích lý do tại sao mọi thứ hoạt động theo cách của chúng. Một trong những mục tiêu thiết kế của Django là không dựa vào "ma thuật" càng nhiều càng tốt. Tuy nhiên, bất cứ khi nào Django thực hiện giả sử điều gì đó (ví dụ như vị trí mẫu trong ứng dụng), giải thích rõ ràng lý do tại sao trong tài liệu và nó luôn xảy ra theo dự đoán.

Hầu hết các câu hỏi của bạn sẽ được trả lời bằng cách triển khai một trang duy nhất.

  1. Yêu cầu được tạo từ khách hàng cho một url cụ thể.
  2. Url sẽ giải quyết chế độ xem nào sẽ gọi dựa trên kết hợp mẫu url.
  3. Yêu cầu được chuyển qua phần mềm trung gian.
  4. Chế độ xem được gọi và thông qua đối tượng yêu cầu một cách rõ ràng.
  5. Chế độ xem rõ ràng gọi mẫu bạn chỉ định và chuyển nó vào ngữ cảnh (biến) mà bạn chỉ định.
  6. Trình xử lý ngữ cảnh mẫu, nếu có, sau đó thêm biến của riêng chúng vào ngữ cảnh.
  7. Ngữ cảnh được chuyển đến mẫu và được hiển thị.
  8. Mẫu trả lại được trả về cho khách hàng.

Django Documentation

Django Book

12

Bên cạnh đọc nguồn, đây là một vài điều tôi đã gắn thẻ và đánh dấu từ một thời gian ngắn trước:

tôi đã tìm thấy James Bennet của blog là một nguồn tuyệt vời cho thông tin về hoạt động django. Cuốn sách của ông, Practical Django Projects, cũng là một phải đọc - mặc dù nó không phải là tập trung vào internals, bạn vẫn sẽ tìm hiểu về cách django hoạt động.

+0

Ồ vâng, blog của James Bennet thật tuyệt vời. Tôi đã đánh dấu rất nhiều trang từ đó. Anh ấy là một nhà văn thực sự tốt, rất rõ ràng. – hughdbrown

6

Đơn giản chỉ cần đọc nguồn có thể là một chút áp đảo, đặc biệt là vì phần trên hầu hết là một chút khó hiểu (làm thế nào máy chủ web đưa ra yêu cầu mã Django). Tôi tìm một cách hay để bắt đầu đọc mã là đặt điểm ngắt trình gỡ lỗi trong chức năng chế độ xem của bạn:

def time(request): 
    import pdb; pdb.set_trace() 
    return HttpResponse(blah blah) 

rồi nhấn URL của bạn. Khi trình gỡ lỗi ngắt tại điểm ngắt của bạn, hãy kiểm tra ngăn xếp:

(Pdb) where 
    c:\abcxyzproject\django\core\management\commands\runserver.py(60)inner_run() 
-> run(addr, int(port), handler) 
    c:\abcxyzproject\django\core\servers\basehttp.py(698)run() 
-> httpd.serve_forever() 
    c:\python25\lib\socketserver.py(201)serve_forever() 
-> self.handle_request() 
    c:\python25\lib\socketserver.py(222)handle_request() 
-> self.process_request(request, client_address) 
    c:\python25\lib\socketserver.py(241)process_request() 
-> self.finish_request(request, client_address) 
    c:\python25\lib\socketserver.py(254)finish_request() 
-> self.RequestHandlerClass(request, client_address, self) 
    c:\abcxyzproject\django\core\servers\basehttp.py(560)__init__() 
-> BaseHTTPRequestHandler.__init__(self, *args, **kwargs) 
    c:\python25\lib\socketserver.py(522)__init__() 
-> self.handle() 
    c:\abcxyzproject\django\core\servers\basehttp.py(605)handle() 
-> handler.run(self.server.get_app()) 
    c:\abcxyzproject\django\core\servers\basehttp.py(279)run() 
-> self.result = application(self.environ, self.start_response) 
    c:\abcxyzproject\django\core\servers\basehttp.py(651)__call__() 
-> return self.application(environ, start_response) 
    c:\abcxyzproject\django\core\handlers\wsgi.py(241)__call__() 
-> response = self.get_response(request) 
    c:\abcxyzproject\django\core\handlers\base.py(92)get_response() 
-> response = callback(request, *callback_args, **callback_kwargs) 
> c:\abcxyzproject\abcxyz\helpers\views.py(118)time() 
-> return HttpResponse(
(Pdb) 

Bây giờ bạn có thể xem tóm tắt đường dẫn từ phần sâu nhất của máy chủ web đến chức năng xem của bạn. Sử dụng lệnh "up" để di chuyển lên ngăn xếp và lệnh "danh sách" và "in" để kiểm tra mã và các biến ở các khung ngăn xếp đó.

Các vấn đề liên quan