Có hai loại "dự án" Django mà tôi có trong ~/projects/
thư mục của mình , cả hai đều có cấu trúc hơi khác nhau.:
- Trang web độc lập
- Ứng dụng cắm
Trang web độc lập
Chủ yếu là các dự án tư nhân, nhưng không phải. Nó thường trông như thế này:
~/projects/project_name/
docs/ # documentation
scripts/
manage.py # installed to PATH via setup.py
project_name/ # project dir (the one which django-admin.py creates)
apps/ # project-specific applications
accounts/ # most frequent app, with custom user model
__init__.py
...
settings/ # settings for different environments, see below
__init__.py
production.py
development.py
...
__init__.py # contains project version
urls.py
wsgi.py
static/ # site-specific static files
templates/ # site-specific templates
tests/ # site-specific tests (mostly in-browser ones)
tmp/ # excluded from git
setup.py
requirements.txt
requirements_dev.txt
pytest.ini
...
Cài đặt
Các thiết lập chính là sản xuất. Các file khác (ví dụ. staging.py
,
development.py
) Tất cả mọi thứ chỉ đơn giản là nhập khẩu từ production.py
và ghi đè lên các biến chỉ cần thiết.
Đối với mỗi môi trường, có các tệp cài đặt riêng, ví dụ: sản xuất, phát triển. Tôi một số dự án tôi cũng đã thử nghiệm (cho người chạy thử), dàn dựng (như một kiểm tra trước khi triển khai cuối cùng) và cài đặt heroku (để triển khai lên heroku).
Yêu cầu
Tôi thay vì chỉ định các yêu cầu trong setup.py trực tiếp. Chỉ những thứ cần thiết cho môi trường phát triển / thử nghiệm mà tôi có requirements_dev.txt
.
Một số dịch vụ (ví dụ: heroku) yêu cầu phải có requirements.txt
trong thư mục gốc.
setup.py
Hữu ích khi triển khai dự án bằng cách sử dụng setuptools
. Nó thêm manage.py
vào PATH
, vì vậy tôi có thể chạy manage.py
trực tiếp (bất cứ nơi nào).
Ứng dụng dành riêng cho dự án
Tôi đã từng đưa các ứng dụng này vào project_name/apps/
thư mục và nhập chúng bằng cách nhập tương đối.
Các tệp mẫu / tĩnh / miền địa phương / thử nghiệm
Tôi đặt các mẫu và tệp tĩnh này vào các mẫu chung / thư mục tĩnh, không phải trong mỗi ứng dụng. Những tệp này thường được chỉnh sửa bởi những người không quan tâm đến cấu trúc mã dự án hoặc python. Nếu bạn là nhà phát triển toàn ngăn xếp làm việc một mình hoặc trong một nhóm nhỏ, bạn có thể tạo mẫu trên mỗi ứng dụng / thư mục tĩnh. Đó thực sự chỉ là vấn đề của hương vị.
Điều tương tự cũng áp dụng cho miền địa phương, mặc dù đôi khi thuận tiện để tạo thư mục miền địa phương riêng biệt.
Các thử nghiệm thường tốt hơn để đặt bên trong mỗi ứng dụng, nhưng thường có nhiều thử nghiệm tích hợp / chức năng kiểm tra nhiều ứng dụng hoạt động cùng nhau, vì vậy thư mục thử nghiệm toàn cầu có ý nghĩa.
Thư mục Tmp
Có thư mục tạm thời trong root dự án, loại trừ khỏi VCS. Nó được sử dụng để lưu trữ phương tiện / tệp tĩnh và cơ sở dữ liệu sqlite trong quá trình phát triển. Mọi thứ trong tmp có thể bị xóa bất cứ lúc nào mà không có vấn đề gì.
Virtualenv
Tôi thích virtualenvwrapper
và đặt tất cả các venvs vào ~/.venvs
thư mục, nhưng bạn có thể đặt nó bên trong tmp/
để giữ nó cùng nhau.
Mẫu dự án
Tôi đã tạo mẫu dự án cho thiết lập này, django-start-template
Triển khai
Triển khai dự án này như sau:
source $VENV/bin/activate
export DJANGO_SETTINGS_MODULE=project_name.settings.production
git pull
pip install -r requirements.txt
# Update database, static files, locales
manage.py syncdb --noinput
manage.py migrate
manage.py collectstatic --noinput
manage.py makemessages -a
manage.py compilemessages
# restart wsgi
touch project_name/wsgi.py
Bạn có thể sử dụng rsync
thay vì git
, nhưng bạn vẫn cần chạy hàng loạt lệnh để cập nhật môi trường của mình.
Gần đây, tôi đã tạo một [django-deploy][2]
ứng dụng, cho phép tôi chạy một lệnh quản lý duy nhất để cập nhật môi trường, nhưng tôi chỉ sử dụng nó cho một dự án và tôi vẫn đang thử nghiệm nó.
Phác thảo và bản nháp
Dự thảo mẫu tôi đặt trong templates/
thư mục toàn cầu . Tôi đoán người ta có thể tạo thư mục sketches/
trong root dự án, nhưng chưa sử dụng nó.
Ứng dụng cắm
Các ứng dụng này thường được chuẩn bị để xuất bản dưới dạng nguồn mở. Tôi đã lấy ví dụ dưới đây từ django-forme
~/projects/django-app/
docs/
app/
tests/
example_project/
LICENCE
MANIFEST.in
README.md
setup.py
pytest.ini
tox.ini
.travis.yml
...
Tên của các thư mục là rõ ràng (tôi hy vọng). Tôi đặt các tệp kiểm tra bên ngoài thư mục ứng dụng, nhưng nó thực sự không quan trọng. Điều quan trọng là cung cấp README
và setup.py
, vì vậy gói dễ dàng được cài đặt thông qua pip
.