Django 详解

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、用户认证等功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飞滕人生TYF

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值