前言: 在互联网蓬勃发展的时代,Web开发成为了技术领域的热门话题。Django,这个基于Python的开源Web框架,以其高效、安全、灵活的特点,成为了众多开发者心目中的“利器”。

目录

一、初识 Django

Web 开发的高效之选

二、搭建 Django 环境

开启开发之旅的第一步

1. 安装 Django

2. 创建项目

三、创建应用

构建网站功能的积木

1. 创建应用

2. 注册应用

四、编写视图与 URL 配置

实现页面交互的关键

1. 编写视图

2. 配置 URL

五、启动服务器

见证成果的激动时刻

六、数据库操作

让数据为网站赋能

1. 定义数据模型

2. 创建数据库表

3. 操作数据库

七、模板系统

打造美观的网页界面

1. 创建模板文件

2. 配置模板路径

3. 使用模板渲染视图

八、表单处理

实现用户输入交互

1. 创建表单类

2. 在视图中处理表单

3. 创建表单模板

九、用户认证系统

保障网站安全与个性化体验

1. 创建超级用户

2. 启动 Django 管理后台

3. 注册数据模型到管理后台

4. 用户登录与权限控制

十、深入探索 Django

更多高级特性与优化

1. 中间件:增强请求处理能力

2. 缓存系统:提升网站性能

3. API 开发:RESTful 与 Django REST framework

十一、实践案例

搭建一个在线书店网站

1. 项目背景

2. 功能需求

3. 技术实现

4. 测试与优化

总结


一、初识 Django

Web 开发的高效之选

Django 是一个基于 Python 的开源 Web 框架,以其高效、安全、灵活的特点,成为众多开发者心目中的“利器”。它遵循“MTV”(Model-Template-View)架构模式,将数据模型(Model)、页面模板(Template)和业务逻辑视图(View)分离,使代码结构更加清晰、易于维护。Django 还拥有庞大的生态系统,提供了丰富的第三方插件和扩展,无论是用户认证、内容管理,还是地图集成、支付系统等,都能轻松找到对应的解决方案。

二、搭建 Django 环境

开启开发之旅的第一步

基于已安装 Python 环境,以下是 Django 环境的搭建步骤:

1. 安装 Django

使用 pip 安装 Django:

pip install django

安装完成后,验证 Django 是否成功安装:

django-admin --version

2. 创建项目

创建一个名为“mysite”的项目:

django-admin startproject mysite

项目目录结构如下:

  • manage.py :项目管理脚本,用于执行数据库迁移、启动开发服务器等操作。例如,“python manage.py runserver” 命令可以启动 Django 的内置开发服务器。

  • mysite/ :存放项目的核心配置文件,包括项目的基本设置(settings.py)、URL 路由配置(urls.py)、应用注册列表等关键信息。其中,settings.py 是项目的核心配置文件,可以在这里定义数据库连接信息、安装的应用、模板引擎配置等众多关键参数。

三、创建应用

构建网站功能的积木

在 Django 中,一个项目可以包含多个应用,每个应用都是一个相对独立的功能模块,有助于保持代码的组织性和可维护性。

1. 创建应用

在项目目录下,运行以下命令创建一个名为“myapp”的应用:

python manage.py startapp myapp

应用目录包含以下基础代码文件:

  • models.py :用于定义数据模型,描述数据库中的数据结构。通过 Python 类的形式定义实体对象及其属性,Django 会根据这些定义自动生成相应的数据库表结构。

  • views.py :视图文件,是处理用户请求并返回响应的核心逻辑所在。视图可以看作是一个函数或者类,它接收用户的 HTTP 请求,经过一系列的处理操作,如查询数据库、调用业务逻辑等,最终返回一个 HTTP 响应,通常是渲染后的 HTML 页面或者是 JSON 数据等。

  • urls.py :应用的 URL 路由配置文件,用于定义应用中的 URL 地址与视图之间的映射关系。通过设置特定的 URL 模式,将用户的请求路由到相应的视图进行处理。

  • apps.py :应用的配置文件,定义了应用的基本信息和一些配置选项。

2. 注册应用

打开项目目录下的 settings.py 文件,在 INSTALLED_APPS 列表中添加应用的名称“myapp”:

INSTALLED_APPS = [
    ...
    'myapp',
]

四、编写视图与 URL 配置

实现页面交互的关键

视图和 URL 配置是 Django 中实现 Web 页面交互的关键环节。

1. 编写视图

在应用的 views.py 文件中,编写一个简单的视图函数:

from django.http import HttpResponse

def index(request):
    # 哈喽!这就是我们的第一个视图函数啦,简单得像个 Hello World~
    return HttpResponse("Hello, Django! This is my first page. 你好呀,这是我的第一个 Django 页面呢!")

2. 配置 URL

在应用的 urls.py 文件中编写 URL 路由配置:

from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name='index'),  # 当访问应用根 URL 时,就调用 index 视图函数哦
]

同时,在项目的 urls.py 文件中包含应用的 URL 配置:

from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path('admin/', admin.site.urls),  # 管理后台的 URL 路径,很重要哦
    path('myapp/', include('myapp.urls')),  # 包含我们应用的 URL 配置呢
]

五、启动服务器

见证成果的激动时刻

完成上述步骤后,启动 Django 的内置开发服务器:

python manage.py runserver

打开浏览器,访问http://127.0.0.1:8000/myapp/,看到页面上显示“Hello, Django! This is my first page. 你好呀,这是我的第一个 Django 页面呢!”,标志着第一个 Django 项目成功运行。

六、数据库操作

让数据为网站赋能

Django 内置了强大的 ORM(对象关系映射)系统,允许使用 Python 类和对象操作数据库,无需编写繁琐的 SQL 语句,使数据库操作更简单、直观,同时提高了代码的可读性和可维护性。

1. 定义数据模型

在应用的 models.py 文件中,定义一个数据模型类:

from django.db import models

class Book(models.Model):
    title = models.CharField(max_length=100)  # 书籍的标题呢,能写 100 个字符哦
    author = models.CharField(max_length=50)  # 作者名字,50 个字符够用了
    publish_date = models.DateField()  # 出版日期哦

    def __str__(self):
        return self.title  # 这样在打印书籍对象时,就能看到标题啦,方便区分呢

2. 创建数据库表

定义好数据模型后,创建数据库表:

python manage.py makemigrations myapp  # 创建迁移文件,记录模型的变更内容
python manage.py migrate myapp  # 应用迁移,实际创建数据库表

3. 操作数据库

在 Django shell 中进行数据的增删改查操作:

python manage.py shell

数据新增:

from myapp.models import Book
book = Book(title='Django 入门', author='张三', publish_date='2024-10-01')
book.save()  # 保存到数据库啦,就像把小书本放进书架一样
print("新的书籍添加成功!书名是:", book.title)  # 打印出来看看,心里有数

数据查询:

# 查询所有书籍
books = Book.objects.all()
print("我找到了好多书哦,看看都有啥:")  # 先打印一句,看看下面的书名
for book in books:
    print(book.title)  # 把每本书的标题都打印出来,就像展示书架一样

# 查询特定条件的书籍,找找张三写的书
books = Book.objects.filter(author='张三')
print("张三写的书有这些呢:")
for book in books:
    print(book.title)

数据更新:

book = Book.objects.get(id=1)
book.title = 'Django 高级编程'  # 给这本书换个高大上的名字
book.save()  # 保存更新啦,就像修改了书的封面标题一样
print("更新成功!这本书的新名字是:", book.title)  # 打印看看更新后的结果

数据删除:

book = Book.objects.get(id=1)
book.delete()  # 删除该书籍,就像从书架上拿下书扔进回收站一样
print("哎呀,把那本书删了,真是舍不得呢,但也没办法,程序就是这么写的嘛")

七、模板系统

打造美观的网页界面

Django 的模板系统可将动态内容与 HTML 代码分离,实现页面的动态渲染,使网站前端界面更美观、富有活力。

1. 创建模板文件

在应用目录下创建“templates”文件夹,在其中创建 HTML 模板文件“book_list.html”:

<!DOCTYPE html>
<html>
<head>
    <title>书籍列表</title>
</head>
<body>
    <h1>书籍列表</h1>
    <ul>
        {% for book in book_list %}
            <li>{{ book.title }} - {{ book.author }}</li>  {# 把书名和作者都放这儿,就像列清单一样 #}
        {% endfor %}
    </ul>
</body>
</html>

2. 配置模板路径

打开项目目录下的 settings.py 文件,找到 TEMPLATES 配置项,确保“DIRS”列表中包含了应用的模板文件夹路径:

TEMPLATES = [
    {
        ...
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        ...
    },
]

3. 使用模板渲染视图

修改应用的 views.py 文件,使用模板渲染视图:

from django.shortcuts import render
from .models import Book

def book_list(request):
    books = Book.objects.all()
    return render(request, 'book_list.html', {'book_list': books})  # 把书籍列表传给模板,让它去展示呢

在应用的 urls.py 文件中添加对应的 URL 路由:

urlpatterns = [
    path('', views.index, name='index'),
    path('books/', views.book_list, name='book_list'),  # 访问这个路径就能看到书籍列表啦
]

访问http://127.0.0.1:8000/myapp/books/,即可看到通过模板渲染后的书籍列表页面。

八、表单处理

实现用户输入交互

在 Web 开发中,表单是实现用户输入交互的重要方式。Django 提供了强大的表单处理功能,包括表单生成、数据验证和处理等。

1. 创建表单类

在应用目录下创建“forms.py”文件,定义表单类:

from django import forms
from .models import Book

class BookForm(forms.ModelForm):
    class Meta:
        model = Book  # 基于 Book 模型来创建表单哦
        fields = ['title', 'author', 'publish_date']  # 这些字段都要出现在表单里呢

2. 在视图中处理表单

修改应用的 views.py 文件,添加处理表单的视图函数:

from django.shortcuts import render, redirect
from .forms import BookForm

def add_book(request):
    if request.method == 'POST':
        form = BookForm(request.POST)
        if form.is_valid():
            form.save()  # 保存表单数据到数据库啦
            return redirect('book_list')  # 添加成功后重定向到书籍列表页面,就像完成任务后的奖励一样
    else:
        form = BookForm()  # 创建一个空表单,等着用户来填呢
    return render(request, 'add_book.html', {'form': form})  # 把表单传给模板去展示

3. 创建表单模板

在应用的“templates”文件夹中创建“add_book.html”模板文件:

<!DOCTYPE html>
<html>
<head>
    <title>添加书籍</title>
</head>
<body>
    <h1>添加书籍</h1>
    <form method="post">
        {% csrf_token %}  {# 这个令牌很重要哦,是防止坏人恶作剧的呢 #}
        {{ form.as_p }}  {# 把表单字段都以段落形式展示出来,方便填写 #}
        <button type="submit">提交</button>  {# 点击这个按钮就能提交表单啦 #}
    </form>
</body>
</html>

在应用的 urls.py 文件中添加对应的 URL 路由:

urlpatterns = [
    ...
    path('add_book/', views.add_book, name='add_book'),  # 这就是添加书籍的路径啦
]

访问http://127.0.0.1:8000/myapp/add_book/,填写表单并提交,新的书籍信息将被保存到数据库中,并重定向到书籍列表页面显示所有书籍。

九、用户认证系统

保障网站安全与个性化体验

Django 内置了功能完善的用户认证系统,可轻松实现用户注册、登录、权限管理等功能,保障网站安全性,为用户提供了一个个性化的使用体验。

1. 创建超级用户

创建超级用户,用于访问 Django 的管理后台:

python manage.py createsuperuser

按照提示输入用户名、邮箱和密码,完成超级用户的创建。

2. 启动 Django 管理后台

Django 自带强大的管理后台,可在项目的 urls.py 文件中看到管理后台的 URL 配置:

path('admin/', admin.site.urls),  # 这就是管理后台的入口啦

访问http://127.0.0.1:8000/admin/,使用创建的超级用户账号登录,即可在后台管理已注册的应用和数据模型。

3. 注册数据模型到管理后台

将自定义的数据模型注册到管理后台。在应用目录下创建“admin.py”文件,添加以下代码:

from django.contrib import admin
from .models import Book

admin.site.register(Book)  # 把 Book 模型注册到管理后台,这样就能在后台操作啦

4. 用户登录与权限控制

在视图中使用 Django 提供的认证装饰器限制对某些页面的访问权限。例如,限制只有已登录用户才能访问添加书籍页面:

from django.contrib.auth.decorators import login_required

@login_required  # 这个装饰器就像个守门员,只有登录用户才能通过呢
def add_book(request):
    ...

Django 还提供了用户注册和登录的视图函数,可直接使用它们实现用户注册和登录功能。在应用的 urls.py 文件中添加以下 URL 路由:

from django.contrib.auth import views as auth_views

urlpatterns = [
    ...
    path('login/', auth_views.LoginView.as_view(template_name='login.html'), name='login'),  # 登录页面的路径
    path('logout/', auth_views.LogoutView.as_view(template_name='logout.html'), name='logout'),  # 退出登录的路径
    path('register/', views.register, name='register'),  # 注册页面的路径
]

对应的,创建用户注册和登录的模板文件“login.html”、“logout.html”和用户注册的视图函数register

from django.shortcuts import render, redirect
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth import login

def register(request):
    if request.method == 'POST':
        form = UserCreationForm(request.POST)
        if form.is_valid():
            user = form.save()  # 保存新用户
            login(request, user)  # 自动登录新注册的用户,方便快捷呢
            return redirect('book_list')  # 注册成功后就去看书列表啦
    else:
        form = UserCreationForm()  # 创建一个空的注册表单
    return render(request, 'register.html', {'form': form})  # 把表单传给模板展示

十、深入探索 Django

更多高级特性与优化

1. 中间件:增强请求处理能力

Django 的中间件组件可以对每个进入的请求和返回的响应进行处理,实现跨应用的通用功能,如请求日志记录、用户认证、数据压缩等。在项目的 settings.py 文件中配置中间件:

MIDDLEWARE = [
    ...
    'django.middleware.common.CommonMiddleware',  # 常用的中间件,处理一些通用的事情呢
    'django.middleware.csrf.CsrfViewMiddleware',  # 专门负责 CSRF 保护的中间件哦
    ...
]

还可以自定义中间件类,实现特定的请求处理逻辑。

2. 缓存系统:提升网站性能

为了提高网站性能,Django 提供了缓存系统,可将经常访问的数据存储在缓存中,减少对数据库的访问次数。在 settings.py 中配置缓存后端,如使用本地内存缓存:

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',  # 使用本地内存缓存哦
    }
}

在视图中使用缓存装饰器缓存视图的响应结果:

from django.views.decorators.cache import cache_page

@cache_page(60 * 15)  # 缓存 15 分钟呢,这样用户多次访问就不必每次都去数据库查啦
def book_list(request):
    ...

3. API 开发:RESTful 与 Django REST framework

随着移动应用和前后端分离架构的流行,开发 API 接口成为 Web 开发中的重要任务。Django REST framework 是一个功能强大的工具,可帮助快速构建 RESTful API。

安装 Django REST framework:

pip install djangorestframework  # 安装这个强大的工具

在项目的 settings.py 中添加它到 INSTALLED_APPS

INSTALLED_APPS = [
    ...
    'rest_framework',  # 添加 Django REST framework
]

为书籍模型创建 API 视图:

from rest_framework import viewsets
from .models import Book
from .serializers import BookSerializer

class BookViewSet(viewsets.ModelViewSet):
    queryset = Book.objects.all()  # 把所有书籍都拿来哦
    serializer_class = BookSerializer  # 用序列化器把数据转换成合适的格式

定义序列化器类BookSerializer,将模型数据转换为 JSON 格式:

from rest_framework import serializers
from .models import Book

class BookSerializer(serializers.ModelSerializer):
    class Meta:
        model = Book  # 基于 Book 模型哦
        fields = ['id', 'title', 'author', 'publish_date']  # 这些字段都要出现在 API 响应里呢

在应用的 urls.py 中添加 API 的路由配置:

from rest_framework.routers import DefaultRouter
from .views import BookViewSet

router = DefaultRouter()
router.register(r'books', BookViewSet)  # 注册 API 路由,这样就能通过这个路径访问 API 啦

urlpatterns = [
    ...
    path('api/', include(router.urls)),  # 把 API 的路由包含进来哦
]

访问http://127.0.0.1:8000/api/books/,得到一个包含所有书籍数据的 JSON 响应。

十一、实践案例

搭建一个在线书店网站

1. 项目背景

搭建一个在线书店网站,用户可在上面浏览书籍、添加书籍到购物车、下订单购买等。

2. 功能需求

  • 用户认证:用户可以注册、登录、退出。

  • 书籍管理:管理员可以添加、编辑、删除书籍;用户可以浏览书籍列表、查看书籍详情。

  • 购物车功能:用户可以将书籍添加到购物车、修改购物车中的书籍数量、删除购物车中的书籍。

  • 订单管理:用户可以下单购买购物车中的书籍;管理员可以查看和管理所有订单。

3. 技术实现

  • 创建项目和应用:

django-admin startproject onlinebookstore
cd onlinebookstore
python manage.py startapp books
python manage.py startapp cart
python manage.py startapp orders
  • 定义数据模型:

books/models.py文件中定义书籍模型:

from django.db import models

class Book(models.Model):
    title = models.CharField(max_length=200)
    author = models.CharField(max_length=100)
    description = models.TextField()
    price = models.DecimalField(max_digits=10, decimal_places=2)
    stock = models.PositiveIntegerField()
    publish_date = models.DateField()

    def __str__(self):
        return self.title

cart/models.py文件中定义购物车模型:

from django.db import models
from django.contrib.auth.models import User
from books.models import Book

class Cart(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    books = models.ManyToManyField(Book, through='CartItem')

class CartItem(models.Model):
    cart = models.ForeignKey(Cart, on_delete=models.CASCADE)
    book = models.ForeignKey(Book, on_delete=models.CASCADE)
    quantity = models.PositiveIntegerField(default=1)

orders/models.py文件中定义订单模型:

from django.db import models
from django.contrib.auth.models import User
from books.models import Book

class Order(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    books = models.ManyToManyField(Book, through='OrderItem')
    order_date = models.DateTimeField(auto_now_add=True)
    total_amount = models.DecimalField(max_digits=10, decimal_places=2)

class OrderItem(models.Model):
    order = models.ForeignKey(Order, on_delete=models.CASCADE)
    book = models.ForeignKey(Book, on_delete=models.CASCADE)
    quantity = models.PositiveIntegerField(default=1)
    price = models.DecimalField(max_digits=10, decimal_places=2)
  • 创建数据库表:

python manage.py makemigrations
python manage.py migrate
  • 创建超级用户:

python manage.py createsuperuser
  • 注册数据模型到管理后台:

books/admin.py文件中:

from django.contrib import admin
from .models import Book

admin.site.register(Book)

cart/admin.py文件中:

from django.contrib import admin
from .models import Cart, CartItem

admin.site.register(Cart)
admin.site.register(CartItem)

orders/admin.py文件中:

from django.contrib import admin
from .models import Order, OrderItem

admin.site.register(Order)
admin.site.register(OrderItem)
  • 编写视图和模板:根据功能需求,分别在bookscartorders应用中编写相应的视图函数和模板文件,实现书籍的展示、购物车的操作和订单的管理等功能。

  • 配置 URL 路由:在项目的urls.py文件中包含各应用的 URL 配置,以及用户认证相关的 URL 路由。

  • 开发 API 接口:使用 Django REST framework 为书籍、购物车和订单等功能开发 API 接口,方便前后端分离开发和移动应用接入。

4. 测试与优化

  • 功能测试:使用 Django 的测试框架对各个功能进行测试,确保用户注册、登录、书籍浏览、购物车操作、下单购买等功能正常工作。

  • 性能优化:通过使用缓存、数据库索引、查询优化等手段,提高网站的性能和响应速度。

  • 安全加固:加强用户认证、数据验证、CSRF 防护等方面的安全措施,确保网站的数据安全和用户隐私。

总结

通过学习和实践,我们掌握了 Django 的基本使用方法和开发流程,从创建项目、应用,到数据库操作、模板渲染、表单处理以及用户认证等核心功能。还通过在线书店的实践案例,深入体会了 Django 在实际项目中的应用。

Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐