W Web Django框架入门.py
本文系统介绍了Python Web框架Django的开发全流程。首先讲解了Django的MTV架构优势,然后逐步演示了环境搭建、项目创建、应用开发等基础操作。重点剖析了数据库ORM操作、模板系统、表单处理和用户认证等核心功能,并通过一个在线书店案例展示了实际项目开发。文章还涉及中间件、缓存系统、RESTful API等高级特性。通过通俗易懂的讲解和代码示例,帮助开发者快速掌握Django开发技能,
前言: 在互联网蓬勃发展的时代,Web开发成为了技术领域的热门话题。Django,这个基于Python的开源Web框架,以其高效、安全、灵活的特点,成为了众多开发者心目中的“利器”。
目录
3. API 开发:RESTful 与 Django REST framework
一、初识 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)
-
编写视图和模板:根据功能需求,分别在
books
、cart
和orders
应用中编写相应的视图函数和模板文件,实现书籍的展示、购物车的操作和订单的管理等功能。 -
配置 URL 路由:在项目的
urls.py
文件中包含各应用的 URL 配置,以及用户认证相关的 URL 路由。 -
开发 API 接口:使用 Django REST framework 为书籍、购物车和订单等功能开发 API 接口,方便前后端分离开发和移动应用接入。
4. 测试与优化
-
功能测试:使用 Django 的测试框架对各个功能进行测试,确保用户注册、登录、书籍浏览、购物车操作、下单购买等功能正常工作。
-
性能优化:通过使用缓存、数据库索引、查询优化等手段,提高网站的性能和响应速度。
-
安全加固:加强用户认证、数据验证、CSRF 防护等方面的安全措施,确保网站的数据安全和用户隐私。
总结
通过学习和实践,我们掌握了 Django 的基本使用方法和开发流程,从创建项目、应用,到数据库操作、模板渲染、表单处理以及用户认证等核心功能。还通过在线书店的实践案例,深入体会了 Django 在实际项目中的应用。

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