# Python+Django+MySQL開發實例分析
## 目錄
1. [技術棧概述](#1-技術棧概述)
2. [開發環境搭建](#2-開發環境搭建)
3. [Django項目創建與配置](#3-django項目創建與配置)
4. [MySQL數據庫集成](#4-mysql數據庫集成)
5. [模型設計與ORM實踐](#5-模型設計與orm實踐)
6. [視圖與URL路由](#6-視圖與url路由)
7. [模板系統實戰](#7-模板系統實戰)
8. [用戶認證系統](#8-用戶認證系統)
9. [REST API開發](#9-rest-api開發)
10. [項目部署](#10-項目部署)
11. [性能優化建議](#11-性能優化建議)
12. [常見問題解決方案](#12-常見問題解決方案)
---
## 1. 技術棧概述
### 1.1 Python語言優勢
- 簡潔高效的語法結構
- 豐富的第三方庫生態
- 跨平臺兼容性
- 強大的社區支持
### 1.2 Django框架特點
```python
# Django的MTV模式示例
Model -> 數據存取層
Template -> 表現層
View -> 業務邏輯層
# 創建虛擬環境
python -m venv myenv
source myenv/bin/activate # Linux/Mac
myenv\Scripts\activate # Windows
# 安裝核心包
pip install django mysqlclient
django-admin startproject myproject
cd myproject
python manage.py startapp myapp
# settings.py 關鍵配置
INSTALLED_APPS = [
...
'myapp',
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
]
# settings.py 數據庫配置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'mydatabase',
'USER': 'root',
'PASSWORD': 'yourpassword',
'HOST': 'localhost',
'PORT': '3306',
'OPTIONS': {
'charset': 'utf8mb4',
}
}
}
# 首次遷移
python manage.py makemigrations
python manage.py migrate
# models.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)
class Meta:
db_table = 'library_books'
ordering = ['-publish_date']
class Author(models.Model):
name = models.CharField(max_length=50)
email = models.EmailField(unique=True)
# 復雜查詢示例
from django.db.models import Q, Count
# 多條件查詢
books = Book.objects.filter(
Q(price__lt=50) | Q(title__contains='Python'),
publish_date__year=2023
).select_related('author')
# 聚合查詢
author_stats = Author.objects.annotate(
book_count=Count('book')
).filter(book_count__gt=5)
# views.py
from django.views.generic import ListView, DetailView
from django.views.generic.edit import CreateView, UpdateView
from .models import Book
class BookListView(ListView):
model = Book
template_name = 'book_list.html'
paginate_by = 10
context_object_name = 'books'
class BookCreateView(CreateView):
model = Book
fields = ['title', 'author', 'publish_date', 'price']
success_url = '/books/'
# urls.py
from django.urls import path
from .views import BookListView, BookCreateView
urlpatterns = [
path('books/', BookListView.as_view(), name='book-list'),
path('books/add/', BookCreateView.as_view(), name='book-add'),
]
<!-- base.html -->
<!DOCTYPE html>
<html>
<head>
<title>{% block title %}My Site{% endblock %}</title>
</head>
<body>
<div class="content">
{% block content %}{% endblock %}
</div>
</body>
</html>
<!-- book_list.html -->
{% extends "base.html" %}
{% block title %}Book List{% endblock %}
{% block content %}
<ul>
{% for book in books %}
<li>{{ book.title }} - {{ book.author.name }}</li>
{% endfor %}
</ul>
{% endblock %}
# models.py
from django.contrib.auth.models import AbstractUser
class CustomUser(AbstractUser):
phone = models.CharField(max_length=15)
avatar = models.ImageField(upload_to='avatars/')
# settings.py 中添加
# AUTH_USER_MODEL = 'myapp.CustomUser'
# views.py
from django.contrib.auth.views import LoginView
class CustomLoginView(LoginView):
template_name = 'registration/login.html'
redirect_authenticated_user = True
# serializers.py
from rest_framework import serializers
from .models import Book
class BookSerializer(serializers.ModelSerializer):
class Meta:
model = Book
fields = '__all__'
# views.py
from rest_framework import viewsets
from .models import Book
from .serializers import BookSerializer
class BookViewSet(viewsets.ModelViewSet):
queryset = Book.objects.all()
serializer_class = BookSerializer
# settings.py 生產配置
DEBUG = False
ALLOWED_HOSTS = ['yourdomain.com']
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
; uwsgi.ini
[uwsgi]
chdir = /path/to/your/project
module = myproject.wsgi:application
master = true
processes = 4
socket = /tmp/myproject.sock
vacuum = true
數據庫優化:
select_related和prefetch_related緩存策略: “`python
from django.views.decorators.cache import cache_page
@cache_page(60 * 15) def my_view(request): …
---
## 12. 常見問題解決方案
### 12.1 MySQL連接問題
```python
# 解決中文亂碼
'OPTIONS': {
'charset': 'utf8mb4',
'init_command': "SET sql_mode='STRICT_TRANS_TABLES'"
}
# 安裝django-cors-headers
INSTALLED_APPS = [
...
'corsheaders',
]
MIDDLEWARE = [
'corsheaders.middleware.CorsMiddleware',
...
]
CORS_ORIGIN_ALLOW_ALL = True # 開發環境使用
注:本文為示例框架,實際完整文章應包含更多詳細代碼示例、示意圖、性能對比數據和安全實踐等內容。建議每個章節補充: 1. 具體實現細節 2. 最佳實踐建議 3. 錯誤處理方案 4. 相關擴展知識 “`
這篇文章框架已涵蓋核心開發流程,完整版本需要: 1. 補充每個模塊的詳細實現代碼 2. 添加實際項目案例 3. 插入性能優化數據圖表 4. 增加安全防護方案 5. 補充測試方案 6. 添加部署監控方案
需要繼續擴展哪個部分可以告訴我,我可以提供更詳細的內容補充。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。