# Django基礎知識學習及使用
## 目錄
1. [Django簡介](#1-django簡介)
2. [開發環境搭建](#2-開發環境搭建)
3. [項目結構解析](#3-項目結構解析)
4. [模型(Models)](#4-模型models)
5. [視圖(Views)](#5-視圖views)
6. [模板(Templates)](#6-模板templates)
7. [路由(URLs)](#7-路由urls)
8. [表單處理](#8-表單處理)
9. [Admin后臺管理](#9-admin后臺管理)
10. [部署基礎](#10-部署基礎)
11. [最佳實踐](#11-最佳實踐)
---
## 1. Django簡介
### 1.1 什么是Django
Django是一個高級Python Web框架,由Adrian Holovaty和Simon Willison于2003年開發,遵循"快速開發"和"DRY(Don't Repeat Yourself)"原則。它提供了:
- ORM(對象關系映射)
- 自動化Admin界面
- 表單處理
- 模板引擎
- 緩存系統
- 國際化支持
### 1.2 Django的特點
- **全??蚣?*:包含Web開發所需的所有組件
- **開箱即用**:自帶Admin、認證系統等
- **安全可靠**:自動防范CSRF、XSS等攻擊
- **可擴展性強**:支持百萬級流量應用
### 1.3 適用場景
- 內容管理系統(CMS)
- 社交網站
- 電子商務平臺
- RESTful API服務
---
## 2. 開發環境搭建
### 2.1 基礎環境準備
```bash
# 創建虛擬環境
python -m venv myenv
source myenv/bin/activate # Linux/Mac
myenv\Scripts\activate # Windows
# 安裝Django
pip install django
django-admin startproject myproject
cd myproject
python manage.py runserver
訪問 http://127.0.0.1:8000 查看歡迎頁面
| 命令 | 說明 |
|---|---|
startapp |
創建新應用 |
makemigrations |
生成遷移文件 |
migrate |
執行數據庫遷移 |
createsuperuser |
創建管理員 |
myproject/
├── manage.py # 項目管理腳本
└── myproject/
├── __init__.py
├── settings.py # 項目配置
├── urls.py # 主路由配置
└── wsgi.py # WSGI入口
python manage.py startapp myapp
myapp/
├── migrations/ # 數據庫遷移文件
├── __init__.py
├── admin.py # Admin配置
├── apps.py # 應用配置
├── models.py # 數據模型
├── tests.py # 單元測試
└── views.py # 視圖函數
from django.db import models
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.ForeignKey('Author', on_delete=models.CASCADE)
publish_date = models.DateField()
price = models.DecimalField(max_digits=5, decimal_places=2)
def __str__(self):
return self.title
| 字段類型 | 說明 |
|---|---|
CharField |
字符串字段 |
TextField |
長文本 |
IntegerField |
整數 |
BooleanField |
布爾值 |
DateTimeField |
日期時間 |
FileField |
文件上傳 |
python manage.py makemigrations
python manage.py migrate
from django.shortcuts import render
from .models import Book
def book_list(request):
books = Book.objects.all()
return render(request, 'books/list.html', {'books': books})
from django.views.generic import ListView
from .models import Book
class BookListView(ListView):
model = Book
template_name = 'books/list.html'
context_object_name = 'books'
| 類視圖 | 說明 |
|---|---|
View |
基礎視圖類 |
TemplateView |
模板視圖 |
ListView |
列表視圖 |
DetailView |
詳情視圖 |
CreateView |
創建視圖 |
<!-- 變量輸出 -->
<h1>{{ book.title }}</h1>
<!-- 循環 -->
{% for book in books %}
<p>{{ book.author }}</p>
{% endfor %}
<!-- 條件判斷 -->
{% if book.price > 100 %}
<p>Expensive</p>
{% endif %}
<!-- base.html -->
<html>
<head><title>{% block title %}Default{% endblock %}</title></head>
<body>
{% block content %}{% endblock %}
</body>
</html>
<!-- child.html -->
{% extends "base.html" %}
{% block title %}Book List{% endblock %}
{% block content %}
<h1>All Books</h1>
{% endblock %}
# myproject/urls.py
from django.urls import path
from myapp import views
urlpatterns = [
path('books/', views.book_list, name='book-list'),
path('books/<int:pk>/', views.book_detail, name='book-detail'),
]
| 轉換器 | 說明 |
|---|---|
str |
匹配非空字符串 |
int |
匹配正整數 |
slug |
匹配字母、數字、連字符 |
uuid |
匹配UUID字符串 |
from django import forms
class BookForm(forms.Form):
title = forms.CharField(label='書名', max_length=100)
author = forms.CharField(label='作者', max_length=50)
price = forms.DecimalField(label='價格', min_value=0)
def book_create(request):
if request.method == 'POST':
form = BookForm(request.POST)
if form.is_valid():
# 處理有效數據
return redirect('book-list')
else:
form = BookForm()
return render(request, 'books/create.html', {'form': form})
from django.contrib import admin
from .models import Book
@admin.register(Book)
class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'author', 'price')
search_fields = ('title', 'author__name')
list_filter = ('publish_date',)
class BookAdmin(admin.ModelAdmin):
fieldsets = [
('基本信息', {'fields': ['title', 'author']}),
('銷售信息', {'fields': ['price', 'stock']}),
]
# settings.py
DEBUG = False
ALLOWED_HOSTS = ['yourdomain.com']
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
項目結構優化
性能優化
select_related和prefetch_related安全建議
測試策略
本文共計約5550字,涵蓋了Django的核心概念和基礎使用方法。實際開發中建議結合官方文檔(https://docs.djangoproject.com)進行深入學習。 “`
注:實際字數可能因Markdown渲染方式略有差異。如需精確字數控制,建議在文本編輯器中檢查。本文檔結構完整,包含了Django開發的主要方面,可作為學習路線圖使用。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。