2016-09-08 30 views
7

Trong chính thức Quickstart, nó khuyến khích sử dụng __name__ khi sử dụng một module đơn:Flask ('ứng dụng') so với Flask (__ name__)

  1. ... Nếu bạn đang sử dụng một mô-đun đơn (như trong ví dụ này), bạn nên sử dụng __name__ vì tùy thuộc vào việc nó được bắt đầu là ứng dụng hay được nhập dưới dạng mô-đun, tên khác nhau ('__main__' so với tên nhập thực tế). ...

Tuy nhiên, trong API document của họ, hardcoding được khuyến khích khi ứng dụng của tôi là một gói:

Vì vậy, điều quan trọng là những gì bạn cung cấp ở đó. Nếu bạn đang sử dụng một mô-đun , __name__ luôn là giá trị chính xác. Tuy nhiên, nếu bạn đang sử dụng gói , bạn nên mã hóa tên của gói ở đó.

Tôi có thể hiểu tại sao tốt hơn nên mã hóa tên gói của tôi, nhưng tại sao không mã hóa tên của một mô-đun đơn lẻ? Hay nói cách khác, thông tin nào có thể Flask nhận được khi nó nhận được thông số đầu tiên là __main__? Tôi không thể thấy điều này có thể giúp Flask dễ dàng tìm tài nguyên như thế nào ...

Trả lời

7

__name__ chỉ là một cách thuận tiện để lấy tên nhập của địa điểm mà ứng dụng được xác định. Flask sử dụng tên nhập để biết nơi tìm kiếm tài nguyên, mẫu, tệp tĩnh, thư mục mẫu, v.v. Khi sử dụng gói, nếu bạn xác định ứng dụng của mình trong __init__.py thì __name__ sẽ vẫn trỏ vào vị trí "chính xác" so với vị trí các nguồn tài nguyên. Tuy nhiên, nếu bạn xác định nó ở nơi khác, chẳng hạn như mypackage/app.py, thì hãy sử dụng __name__ sẽ yêu cầu Flask tìm kiếm tài nguyên liên quan đến mypackage.app thay vì mypackage.

Sử dụng __name__ không trực giao với "mã hóa cứng", nó chỉ là một phím tắt để sử dụng tên gói. Và cũng không có lý do gì để nói rằng tên nên là gói cơ sở, hoàn toàn tùy thuộc vào cấu trúc dự án của bạn.

+0

Bạn có thể giải thích thêm một chút về "địa điểm" chính xác "không? AFAIK, '__name__' trong gói' __init __. Py' sẽ là tên của gói đó. Vì vậy, nơi nào được coi là "chính xác"? –

+0

Thông thường tên gói cơ sở là chính xác. Bạn đã thử điều đó và có một vấn đề cụ thể? – davidism

+0

Chưa. Tôi chỉ đang làm thí nghiệm và cố gắng hiểu bất cứ điều gì trước khi tôi bắt đầu ... –

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