Django 是一个高级的 Python Web 框架,用于快速开发安全且可维护的 Web 应用。它遵循 “Django for perfectionists with deadlines”(为有期限的完美主义者设计)的理念,提供了一套完整的工具包,帮助开发者快速构建 Web 应用。
1. Django 基础概念
1.1 什么是 Django?
Django 是一个基于 Python 的全栈 Web 框架,具备如下特点:
- MVC 架构(在 Django 中称为 MTV)
- 自带 Admin 后台
- ORM(对象关系映射)
- 强大的 URL 路由系统
- 内置安全机制
- 可扩展性强
1.2 MTV 架构(Model-Template-View)
Django 使用 MTV 模型,与传统的 MVC 模型类似,但有所区别。
- Model(模型): 负责与数据库进行交互,定义数据的结构(如表、字段、关系)。
- Template(模板): 负责前端页面的渲染,包含 HTML 和 Django 模板语言。
- View(视图): 处理业务逻辑,接收请求,返回响应。
示意图:
Client <-> URLconf <-> View <-> Model <-> Database
|
v
Template
2. Django 项目结构
创建一个新的 Django 项目后,项目结构如下:
myproject/
├── manage.py # 项目管理命令工具
├── myproject/
│ ├── __init__.py # Python 包标识文件
│ ├── settings.py # 项目配置文件
│ ├── urls.py # URL 路由配置文件
│ ├── asgi.py # 异步服务器网关接口
│ └── wsgi.py # Web服务器网关接口
├── app1/ # Django 应用
│ ├── migrations/ # 数据库迁移文件
│ ├── admin.py # Django Admin 配置
│ ├── apps.py # 应用配置
│ ├── models.py # 数据模型定义
│ ├── tests.py # 测试代码
│ └── views.py # 视图函数定义
3. Django 项目创建与运行
3.1 安装 Django
pip install django
3.2 创建 Django 项目
django-admin startproject myproject
cd myproject
python manage.py runserver
浏览器打开:http://127.0.0.1:8000
3.3 创建 Django 应用
python manage.py startapp app1
然后需要在 settings.py
中注册此应用:
# settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app1', # 注册应用
]
4. 模型(Model)
4.1 定义一个模型
在 models.py
中定义一个简单的模型:
# app1/models.py
from django.db import models
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.CharField(max_length=50)
published_date = models.DateField()
isbn = models.CharField(max_length=13, unique=True)
def __str__(self):
return self.title
4.2 迁移数据库
python manage.py makemigrations
python manage.py migrate
4.3 在 Admin 后台注册模型
# app1/admin.py
from django.contrib import admin
from .models import Book
@admin.register(Book)
class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'author', 'published_date')
启动 Admin 后台:
python manage.py createsuperuser
python manage.py runserver
访问 http://127.0.0.1:8000/admin
5. 视图(Views)
5.1 创建一个简单视图
# app1/views.py
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello, Django!")
5.2 URL 路由配置
# app1/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
]
5.3 项目 URL 配置
# myproject/urls.py
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('app1.urls')),
]
5.4 启动开发服务器
python manage.py runserver
访问 http://127.0.0.1:8000
6. 模板(Template)
6.1 使用模板渲染页面
创建 templates
目录和 index.html
文件:
app1/
├── templates/
│ └── index.html
index.html
<!DOCTYPE html>
<html>
<head>
<title>Django Example</title>
</head>
<body>
<h1>Welcome to Django!</h1>
<p>{{ message }}</p>
</body>
</html>
views.py
from django.shortcuts import render
def index(request):
return render(request, 'index.html', {'message': 'Hello, Django Template!'})
7. Django ORM(对象关系映射)
7.1 查询所有记录
from app1.models import Book
books = Book.objects.all()
7.2 添加记录
book = Book.objects.create(
title="Django 入门",
author="张三",
published_date="2023-01-01",
isbn="1234567890123"
)
7.3 更新记录
book = Book.objects.get(id=1)
book.title = "Django 进阶"
book.save()
7.4 删除记录
book = Book.objects.get(id=1)
book.delete()
8. Django 表单与用户认证
8.1 表单示例
# forms.py
from django import forms
class BookForm(forms.Form):
title = forms.CharField(max_length=100)
author = forms.CharField(max_length=50)
published_date = forms.DateField()
8.2 用户注册示例
from django.contrib.auth.forms import UserCreationForm
from django.shortcuts import render, redirect
def register(request):
if request.method == 'POST':
form = UserCreationForm(request.POST)
if form.is_valid():
form.save()
return redirect('index')
else:
form = UserCreationForm()
return render(request, 'register.html', {'form': form})
9. 部署 Django 项目
9.1 使用 Gunicorn 部署
pip install gunicorn
gunicorn myproject.wsgi
9.2 使用 Nginx 反向代理
配置一个简单的 Nginx 反向代理到 gunicorn
。
10. 总结
Django 是一个功能强大且开发高效的 Web 框架,适用于中小型以及大型 Web 项目开发。它自带了一整套解决方案,包括 Admin 后台、ORM、用户认证等功能。