一箇中等Django專案的目錄結構包含多個應用、配置檔案、靜態檔案和模板檔案等。
myproject/
├── manage.py # Django專案管理指令碼,用於執行伺服器、遷移資料庫等管理命令
├── myproject/ # 專案配置目錄,包含全域性配置檔案和靜態、模板檔案
│ ├── __init__.py # 標識這是一個Python包
│ ├── asgi.py # ASGI配置檔案,用於部署非同步伺服器
│ ├── settings.py # 專案配置檔案,通常用於簡單專案,對於中型專案建議拆分成多個配置檔案
│ ├── urls.py # 專案的URL路由配置檔案
│ ├── wsgi.py # WSGI配置檔案,用於部署伺服器
│ ├── settings/ # 拆分的配置檔案目錄
│ │ ├── __init__.py # 標識這是一個Python包
│ │ ├── base.py # 基本配置檔案,包含所有環境的通用配置
│ │ ├── development.py # 開發環境的配置檔案
│ │ ├── production.py #生產環境的配置檔案
│ ├── static/ # 靜態檔案目錄,存放CSS、JavaScript和圖片等靜態資源
│ │ ├── css/
│ │ ├── js/
│ │ ├── images/
│ ├── templates/ # 模板檔案目錄,存放HTML模板檔案
│ ├── base.html # 通用的基礎模板,可以在其他模板檔案中繼承
│ ├── ...
│
├── apps/ # 應用目錄,包含專案中的所有Django應用
│ ├── __init__.py # 標識這是一個Python包
│ ├── app1/ # 其中一個Django應用目錄
│ │ ├── __init__.py
│ │ ├── admin.py #註冊Django Admin後臺的模型
│ │ ├── apps.py # 應用配置檔案
│ │ ├── models.py # 資料庫模型定義檔案
│ │ ├── tests.py # 測試檔案
│ │ ├── views.py # 檢視函式或類檢視定義檔案
│ │ ├── urls.py # 應用的URL路由配置檔案
│ │ ├── migrations/ #資料庫遷移檔案目錄
│ │ ├── __init__.py
│ ├── app2/
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── models.py
│ ├── tests.py
│ ├── views.py
│ ├── urls.py
│ ├── migrations/
│ ├── __init__.py
│
├── requirements/ # 依賴檔案目錄,存放不同環境的依賴檔案
│ ├── base.txt #通用依賴檔案
│ ├── development.txt # 開發環境的依賴檔案
│ ├── production.txt # 生產環境的依賴檔案
│
├── .gitignore # Git忽略檔案,列出不需要提交到版本控制系統的檔案或目錄
├── README.md # 專案的README檔案,通常包含專案的簡介、安裝和使用說明等。
以其中一個app應用的建立啟動為例,說明其中涉及的重點和難點
- 建立專案和應用
首先,確保已經啟用了虛擬環境,並在專案目錄下。
source /home/lyh/django/venv/bin/activate
django-admin startproject djangoweb
cd djangoweb
python manage.py startapp blog
- 專案結構
此時的目錄結構如下:
djangoweb/
manage.py
djangoweb/
__init__.py
asgi.py
settings.py
urls.py
wsgi.py
blog/
__init__.py
admin.py
apps.py
models.py
tests.py
views.py
migrations/
__init__.py
- 配置應用
在djangoweb/settings.py
檔案中,新增blog
到INSTALLED_APPS
列表中:
INSTALLED_APPS = [
...
'blog',
]
- 建立模型
在blog/models.py
中,定義一個簡單的部落格文章模型:
from django.db import models
class Post(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.title
- 建立和應用遷移
建立資料庫遷移並應用:
python manage.py makemigrations blog
python manage.py migrate
- 註冊模型到Admin後臺
在blog/admin.py
中註冊模型:
from django.contrib import admin
from .models import Post
admin.site.register(Post)
- 建立檢視
在blog/views.py
中,建立一個簡單的檢視來顯示部落格文章列表:
from django.shortcuts import render
from .models import Post
def index(request):
posts = Post.objects.all()
return render(request, 'blog/index.html', {'posts':posts})
- 建立URL配置
在blog
目錄下建立一個urls.py
檔案,並配置URL:
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
]
在djangoweb/urls.py
中包含blog
應用的URL配置:
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('admin/', admin.site.urls),
path('blog/', include('blog.urls')),
]
- 建立模板
在blog
目錄下建立templates/blog
目錄,並建立index.html
模板檔案:
blog/
templates/
blog/
index.html
在index.html
中新增以下內容:
<!DOCTYPE html>
<html>
<head>
<title>Blog</title>
</head>
<body>
<h1>Blog Posts</h1>
<ul>
{% for post in posts %}
<li>{{ post.title }} - {{ post.created_at }} </li>
{% endfor %}
</ul>
</body>
</html>
- 執行開發伺服器
啟動Django開發伺服器:
python manage.py runserver 0.0.0.0:8000
在瀏覽器中訪問http://192.168.2.101/blog/
,應該會看到一個顯示所有部落格文章的頁面。
重點和難點
- 模型和資料庫遷移:定義模型後,必須建立和應用遷移。這是管理資料庫模式的關鍵步驟,可能會出現遷移衝突或錯誤。
- URL配置:正確配置URL路徑,使得不同應用的URL不衝突,需要注意路徑的包含和名稱空間。
- 模板系統:正確設定模板目錄和檔案,並在檢視中正確渲染模板。需要確保模板路徑和名稱正確。
- 檢視和查詢集:在檢視中處理查詢集,並將資料傳遞給模板渲染。處理複雜查詢可能會影響效能,需要最佳化查詢。
- Admin後臺配置:註冊模型以便在Admin後臺管理資料,這對於除錯和管理資料非常有幫助。
透過以上步驟,可以建立和啟動一個基本的Django應用。