练习题 - Django 4.x Overviewses 框架概述

Django 是一个开放源代码的 web 应用框架,使用 Python 语言编写,旨在帮助开发人员更快地构建和开发 web 应用。Django 以其“快速开发”和“干净、实用”的设计原则著称,使得开发人员可以专注于编写自己的应用和业务逻辑,而不是重复地处理常见的 web 开发任务。Django 4.x 是其最新版本,带来了许多新的功能和改进,以提高性能和可扩展性。

本文旨在通过一些实际的练习题,帮助自学编程的用户深入理解 Django 框架的核心概念和工作原理。我们将从框架的整体结构、核心组件到高级功能进行逐步探索,帮助你更好地掌握 Django 框架,为日后的 web 开发打下坚实的基础。

文章目录

  • Django 框架的基础架构
    • Django 项目的基本结构(难度:低)
    • Django 的模型-视图-模板(MVT)架构(难度:中)
    • 中间件的使用与自定义(难度:高)
  • Django 4.0 综合练习题(难度:高)

Django 框架的基础架构

Django 项目的基本结构(难度:低)

请描述一个新创建的 Django 项目的基本目录结构,并解释每个文件夹和文件的用途。通过理解 Django 项目的结构,掌握如何在项目中组织代码和资源。

新创建的 Django 项目通常包含几个默认的文件夹和文件,这些文件夹和文件为项目提供了基础的功能架构和配置。理解这些文件夹和文件的用途是使用 Django 框架的基础。

myproject/
│
├── myproject/
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
│
├── manage.py
└── app_name/├── __init__.py├── admin.py├── apps.py├── migrations/├── models.py├── tests.py└── views.py

一个 Django 项目的根目录通常包含一个与项目同名的子目录以及一个 manage.py 文件。子目录包含项目的全局配置文件如 settings.py(项目配置)、urls.py(URL 路由配置)、wsgi.py(WSGI 应用入口)。manage.py 是一个命令行工具,用于与 Django 项目进行各种管理操作。每个 Django 应用程序有自己的目录结构,其中包括模型定义文件 models.py,视图定义文件 views.py,以及用于管理应用的 admin.pyapps.py 等文件。

理解 Django 项目的基本目录结构是学习 Django 的第一步,它为你提供了一个组织项目和代码的框架。通过熟悉这些目录和文件,你可以更轻松地管理和扩展 Django 项目。

Django 的模型-视图-模板(MVT)架构(难度:中)

Django 使用模型-视图-模板(MVT)架构来组织代码,请解释 MVT 架构的概念及其工作原理,并实现一个简单的 Django 应用来展示 MVT 架构的基本使用。

MVT 架构是 Django 的核心设计模式,它将业务逻辑、用户界面和数据访问分离开来,使开发和维护更为方便。模型(Model)负责与数据库进行交互,视图(View)处理业务逻辑并返回响应,模板(Template)则负责呈现数据。

# models.py
from django.db import modelsclass Article(models.Model):title = models.CharField(max_length=100)content = models.TextField()# views.py
from django.shortcuts import render
from .models import Articledef article_list(request):articles = Article.objects.all()return render(request, 'articles/list.html', {'articles': articles})# templates/articles/list.html
<!DOCTYPE html>
<html>
<head><title>Articles</title>
</head>
<body><h1>Articles</h1><ul>{% for article in articles %}<li>{{ article.title }}</li>{% endfor %}</ul>
</body>
</html>

models.py 文件定义了一个简单的模型 Article,用于表示数据库中的文章数据。views.py 文件定义了一个视图 article_list,从数据库中获取所有文章并将它们传递给模板进行呈现。在 list.html 模板中,使用 Django 模板语言循环输出所有文章的标题。这个简单的应用展示了 MVT 架构的基本工作原理。

通过使用 MVT 架构,Django 将数据访问、业务逻辑和用户界面分离,帮助开发者更清晰地组织代码。这种架构使得 Django 项目更易于维护和扩展。

中间件的使用与自定义(难度:高)

中间件是 Django 处理请求和响应过程中的钩子。在 Django 中实现一个自定义中间件,该中间件能够记录每个请求的处理时间,并将其打印到服务器控制台。

自定义中间件需要继承 Django 的中间件基类,并实现 __init____call__ 方法。在 __call__ 方法中,记录请求开始处理的时间,在视图处理完成后计算处理时间并输出到控制台。

# middleware.py
import time
from django.utils.deprecation import MiddlewareMixinclass RequestTimeLoggingMiddleware(MiddlewareMixin):def __init__(self, get_response=None):self.get_response = get_responsesuper().__init__(get_response)def __call__(self, request):start_time = time.time()response = self.get_response(request)duration = time.time() - start_timeprint(f"Request to {request.path} took {duration:.2f} seconds")return response# settings.py (add to MIDDLEWARE)
MIDDLEWARE = [**.. other middleware**'myproject.middleware.RequestTimeLoggingMiddleware',
]

RequestTimeLoggingMiddleware 类继承自 MiddlewareMixin 并实现了 __call__ 方法。该方法在请求到达时记录当前时间,执行视图函数后计算请求处理的持续时间,并将其输出到控制台。在 settings.py 文件的 MIDDLEWARE 列表中,将自定义的中间件添加到中间件链的末尾。

通过实现自定义中间件,可以扩展 Django 的功能并在请求处理过程中加入自定义逻辑。中间件是 Django 强大和灵活性的一个体现,熟练掌握中间件的使用有助于开发更复杂的 web 应用。

Django 4.0 综合练习题(难度:高)

你是一位自由职业的开发者,受邀为一家本地餐厅开发一个小型的在线订餐系统。该系统需要包含以下功能模块:用户可以查看菜单并进行下单,管理员可以通过后台管理系统对菜单和订单进行管理和更新。请根据以下要求完成这个项目:

  1. 安装 Django 并创建新项目:创建一个名为 restaurant 的 Django 项目,并在其中创建一个名为 ordering 的应用。
  2. 模型设计:设计三个模型,分别是 MenuItem(菜单项),Order(订单) 和 OrderItem(订单项)。MenuItem 应该包含菜品名称、描述、价格和库存数量;Order 应该包含订单日期、顾客姓名和订单状态;OrderItem 应该包含与菜单项和订单的关联及数量信息。
  3. 数据迁移:完成数据迁移,将模型创建为数据库中的表。
  4. 数据 API 接口:为菜单项和订单创建 RESTful API 接口,允许前端应用进行菜单查看和下单操作。
  5. 数据动态管理:在 Django Admin 中实现对菜单和订单的动态管理功能。
  6. 设置路由、视图和模板:配置 Django 路由和视图,使用户可以通过网页查看菜单、添加订单,并查看订单状态。
  7. Django Admin 设置:配置 Django Admin 界面,使其能够对 MenuItemOrderOrderItem 进行管理。

安装 Django 并创建项目和应用。然后设计模型,进行数据迁移,确保所有数据库表都创建完毕。为模型创建 RESTful API 接口以实现数据交互。在 Django Admin 中注册模型以实现数据动态管理功能。设置路由、视图和模板以支持用户通过网页交互的功能。

安装 Django 并创建项目和应用
通过 pip install django 安装 Django,然后使用 django-admin startproject 命令创建一个名为 restaurant 的项目。使用 python manage.py startapp 命令创建一个应用 ordering

# Step 1: 安装 Django 并创建项目和应用
pip install django
django-admin startproject restaurant
cd restaurant
python manage.py startapp ordering

模型设计
ordering/models.py 中定义了三个模型:MenuItem 表示菜单项,包含名称、描述、价格和库存;Order 表示订单,包含订单日期、顾客姓名和状态;OrderItem 表示订单项,包含与菜单项和订单的关联及数量。

# Step 2: 在 ordering/models.py 中定义模型from django.db import modelsclass MenuItem(models.Model):name = models.CharField(max_length=100)description = models.TextField()price = models.DecimalField(max_digits=5, decimal_places=2)stock = models.PositiveIntegerField()def __str__(self):return self.nameclass Order(models.Model):order_date = models.DateTimeField(auto_now_add=True)customer_name = models.CharField(max_length=100)status = models.CharField(max_length=20, choices=[('Pending', 'Pending'), ('Completed', 'Completed')])def __str__(self):return f'Order {self.id} - {self.customer_name}'class OrderItem(models.Model):menu_item = models.ForeignKey(MenuItem, on_delete=models.CASCADE)order = models.ForeignKey(Order, related_name='items', on_delete=models.CASCADE)quantity = models.PositiveIntegerField()def __str__(self):return f'{self.quantity} x {self.menu_item.name}'

数据迁移
通过运行 python manage.py makemigrationspython manage.py migrate 命令,将模型转换为数据库中的表。

# Step 3: 数据迁移
python manage.py makemigrations
python manage.py migrate

数据 API 接口
使用 Django REST Framework 创建了 API 视图,MenuItemViewSetOrderViewSet 用于处理菜单项和订单的 API 请求。

# Step 4: 在 ordering/views.py 中创建 API 视图 (使用 Django REST Framework)from rest_framework import viewsets
from .models import MenuItem, Order
from .serializers import MenuItemSerializer, OrderSerializerclass MenuItemViewSet(viewsets.ModelViewSet):queryset = MenuItem.objects.all()serializer_class = MenuItemSerializerclass OrderViewSet(viewsets.ModelViewSet):queryset = Order.objects.all()serializer_class = OrderSerializer

数据动态管理
ordering/admin.py 中注册模型,以便在 Django Admin 界面中进行管理。

# Step 5: 在 ordering/admin.py 中注册模型
from django.contrib import admin
from .models import MenuItem, Order, OrderItemadmin.site.register(MenuItem)
admin.site.register(Order)
admin.site.register(OrderItem)

设置路由
restaurant/urls.py 中设置了 API 路由和网页视图路由。

# Step 6: 在 restaurant/urls.py 中设置路由from django.contrib import admin
from django.urls import path, include
from rest_framework.routers import DefaultRouter
from ordering.views import MenuItemViewSet, OrderViewSetrouter = DefaultRouter()
router.register(r'menu', MenuItemViewSet)
router.register(r'orders', OrderViewSet)urlpatterns = [path('admin/', admin.site.urls),path('api/', include(router.urls)),  # API 路由path('', include('ordering.urls')),  # 网页视图路由
]

视图和模板
ordering/views.py 中创建了视图函数来处理菜单列表显示和订单创建。

# Step 7: 在 ordering/views.py 中创建视图函数from django.shortcuts import render
from .models import MenuItem, Orderdef menu_list(request):items = MenuItem.objects.all()return render(request, 'ordering/menu_list.html', {'items': items})def order_create(request):if request.method == 'POST':# 处理表单提交逻辑passreturn render(request, 'ordering/order_form.html')

这个综合练习题涵盖了 Django 项目从安装、模型设计、数据迁移到 API 接口、动态管理、视图和模板配置的所有关键部分。通过完成这个项目,你将深入了解 Django 4.0 的完整开发流程,并掌握如何创建一个功能全面的 Web 应用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/427759.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是CSRF攻击,该如何防护CSRF攻击

CSRF攻击&#xff08;跨站请求伪造&#xff0c;Cross-Site Request Forgery&#xff09;是一种网络攻击手段&#xff0c;攻击者利用已通过身份验证的用户&#xff0c;诱导他们在不知情的情况下执行未授权操作。这种攻击通常发生在用户登录到可信网站并且有活动的会话时&#xf…

Python编码系列—Python组合模式:构建灵活的对象组合

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

cv2.bitwise_or 提取ROI区域

原图如下所示&#xff0c;想提取圆形ROI区域&#xff0c;红色框 img np.ones(ori_img.shape, dtype"uint8") img img * 255 cv2.circle(img, (50,50), 50, 0, -1) self.bitwiseOr cv2.bitwise_or(ori_img, circle)使用一个和原图尺寸一致的图像做mask,图白圆黑 以…

MySQL:索引02——使用索引

目录 引言 1、自动创建索引 2、手动创建索引 2.1 主键索引 2.2 查看索引信息 2.3 唯一索引 2.4 普通索引 2.5 复合索引 3、删除索引 3.1 主键索引 3.2 其他索引 4、查看执行计划 4.1 不加条件&#xff0c;查询所有 4.2 使用主键查询 4.3 子查询使用索引 4.4 普通索…

【架构设计】多级缓存:应用案例与问题解决策略

【架构设计】多级缓存&#xff1a;应用案例与问题解决策略 多级缓存系统的工作原理及其在提升应用性能方面的关键作用。通过对比本地缓存与分布式缓存的特点 | 原创作者/编辑&#xff1a;凯哥Java | 分类&#xff1a;架构设计系列教程 多级缓存…

在基准测试和规划测试中选Flat还是Ramp-up?

Flat测试和Ramp-up测试是各有优势的&#xff0c;下面我们就通过介绍几种实用的性能测试策略来分析这两种加压策略的着重方向。 基准测试 基准测试是一种测量和评估软件性能指标的活动&#xff0c;通过基准测试建立一个已知的性能水平&#xff08;称为基准线&#xff09;&…

WPS生成目录

导航窗格&#xff1a;视图->导航窗格 可修改标题的样式&#xff0c;之后的标题直接套用即可 修改其他标题样式也是这样 添加编号&#xff1a;可以选上面的模版 也可自定义编号 生成目录&#xff1a;引用->目录->选用一个 但是我想把目录插到另一页 当我添加几个标题…

Spark-RDD持久化

一、Spark的三种持久化机制 1、cache 它是persist的一种简化方式&#xff0c;作用是将RDD缓存到内存中&#xff0c;以便后续快速访问&#xff0c;提高计算效率。cache操作是懒执行的&#xff0c;即执行action算子时才会触发。 2、persist 它提供了不同的存储级别&#xff0…

无人机黑飞打击技术详解

随着无人机技术的普及&#xff0c;无人机“黑飞”&#xff08;未经授权或违反规定的飞行&#xff09;现象日益严重&#xff0c;对公共安全、隐私保护及重要设施安全构成了严重威胁。为有效应对这一挑战&#xff0c;各国政府和安全机构纷纷研发并部署了一系列无人机黑飞打击技术…

HTML简介

HTML简介 1.HTML概述2.HTML元素3.HTML属性4.HTML 注释5.HTML颜色 1.HTML概述 HTML 是用来描述网页的一种语言。 HTML 指的是超文本标记语言HTML 不是一种编程语言&#xff0c;而是一种标记语言标记语言是一套标记标签HTML 使用标记标签来描述网页 例子&#xff1a; <htm…

Kotlin cancel CoroutineScope.launch的任务后仍运行

Kotlin cancel CoroutineScope.launch的任务后仍运行 import kotlinx.coroutines.*fun main() {runBlocking {val coroutineScope CoroutineScope(Dispatchers.IO)val job coroutineScope.launch {var i 0while (i < Int.MAX_VALUE) {iprintln(i)}}// 2ms 取消协程delay(…

2.计算机网络基础

2. 计算机网络基础 (1) 计算机网络的定义 计算机网络是指将地理位置不同、具有独立功能的多个计算机系统通过通信线路和设备连接起来,以功能完善的网络软件实现网络中资源共享的系统。最简单的定义是:计算机网络是一些互相连接的、自治的计算机系统的集合。最庞大的计算机网…

在 PostGIS 中进行千万级空间数据的空间查询和关键字查询

一、目的 本测试在探究在有限的计算机配置下&#xff0c;如何高效地对千万级的空间数据进行空间查询和关键字查询。通过实际操作和测试&#xff0c;评估不同查询策略的性能&#xff0c;为处理大规模空间数据提供可行的解决方案。 计算机配置如下&#xff1a; 内存&#xff0…

声网SDK脚本运行错误

文章目录 运行步骤无法运行.bat电脑出现警告--更改执行策略若无出现-更新power shell搜索最新版本的 PowerShell安装新版本 仍无法解决-手动下载第三方库 2024-9-9运行步骤 无法运行.bat 电脑出现警告–更改执行策略 若无出现-更新power shell 搜索最新版本的 PowerShell 在…

记录|如何对批量型的pictureBox组件进行批量Image设置

目录 前言一、问题表述二、批量化处理更新时间 前言 参考文章&#xff1a; 一、问题表述 问题就是上图所示&#xff0c;这些的命名风格统一&#xff0c;只是最后的数字是不同的。所以存在可以批量化进行处理的可能性。 二、批量化处理 private void SetPictureBoxImages(){for…

ElementPlus表单验证报错 formEl.validate is not a function

出现问题的代码 <!-- 密码重置弹框 --><el-dialog v-model"innerVisible" width"500" title"密码重置" append-to-body><el-form ref"ruleFormRef" style"max-width: 600px" :model"passForm" sta…

HarmonyOS元服务与卡片

元服务与卡片 文章目录 一、元服务1.介绍2.常见元服务项目步骤 二、卡片1.介绍2.卡片的创建3.卡片的数据的变更4.卡片的进程间通讯4.1使用工具包4.2使用步骤 5.卡片路由postCardAction&#xff1a;快速拉起后台5.1格式5.2快速拉起指定页面--router5.3调用后台功能--call5.3卡片…

委托的注册和注销

让我们来回顾一下委托的内容。 委托 是一种复杂的数据类型&#xff0c;需要我们先定义出来。当定义好类型后&#xff0c;声明委托变量来使用。 可以装载方法&#xff0c;只可以装载具有相同返回类型和参数列表的方法。 委托变量名&#xff08;参数列表&#xff09;&#xf…

使用Webpack创建vue脚手架并搭建路由---详解

1.使用 vue 库 vue 是一个非常好用的 javascript 库&#xff0c;现在已经发行了 vue 3&#xff0c;我们可以直接导入使用库文件&#xff0c;也可以使用单文件&#xff08;SFC&#xff09;的形式&#xff0c;直接使用库文件会简单一点&#xff0c;我们先来试一下吧。 1.1安装 v…

Qt 模型视图(二):模型类QAbstractItemModel

文章目录 Qt 模型视图(二)&#xff1a;模型类QAbstractItemModel1.基本概念1.1.模型的基本结构1.2.模型索引1.3.行号和列号1.4.父项1.5.项的角色1.6.总结 Qt 模型视图(二)&#xff1a;模型类QAbstractItemModel ​ 模型/视图结构是一种将数据存储和界面展示分离的编程方法。模…