当前位置: 首页 > news >正文

Django 后端架构开发:分页器到中间件开发

🚀 Django 后端架构开发:分页器到中间件开发 🚀


🔹 应用样式:上下翻页

分页功能在处理大量数据时非常有用。通过上下翻页,我们可以让用户轻松浏览数据。以下是一个展示产品列表的分页示例:

from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from django.shortcuts import render
from .models import Product  # 假设我们有一个Product模型def product_list_view(request):product_list = Product.objects.all()  # 获取所有产品数据paginator = Paginator(product_list, 10)  # 每页显示10条产品page_number = request.GET.get('page')  # 获取当前页码try:products = paginator.page(page_number)  # 获取当前页的数据except PageNotAnInteger:# 如果页码不是整数,显示第一页products = paginator.page(1)except EmptyPage:# 如果页码超出范围,显示最后一页products = paginator.page(paginator.num_pages)return render(request, 'product_list.html', {'products': products})

代码解析:

  • Product.objects.all():从数据库中获取所有产品记录。
  • Paginator(product_list, 10):创建Paginator对象,每页显示10条产品数据。
  • paginator.page(page_number):获取当前页的数据。如果页码不合法,默认显示第一页;如果页码超出范围,显示最后一页。
  • render(request, 'product_list.html', {'products': products}):将产品数据传递到模板进行渲染。

业务示例:

在一个电子商务网站中,我们需要分页展示产品列表。用户可以通过“上一页”和“下一页”按钮轻松浏览不同页面的产品。


🔹 自定义分页器:模拟滴滴官网博客频道

自定义分页器可以实现特定的分页需求。以下是一个自定义分页器的示例,模拟滴滴官网的博客频道分页效果:

from django.core.paginator import Paginatorclass CustomPaginator(Paginator):def __init__(self, *args, **kwargs):super().__init__(*args, **kwargs)self.page_range = range(1, self.num_pages + 1)  # 自定义页码范围def blog_list_view(request):blog_list = Blog.objects.all()  # 获取所有博客文章paginator = CustomPaginator(blog_list, 5)  # 每页显示5篇博客文章page_number = request.GET.get('page')try:blogs = paginator.page(page_number)except PageNotAnInteger:blogs = paginator.page(1)except EmptyPage:blogs = paginator.page(paginator.num_pages)return render(request, 'blog_list.html', {'blogs': blogs})

代码解析:

  • CustomPaginator(Paginator):继承Paginator类,自定义分页功能。
  • self.page_range:设置自定义的分页范围,显示所有页码。
  • paginator.page(page_number):获取指定页码的博客文章。

业务示例:

模拟博客频道的分页展示,可以在博客系统中使用这个自定义分页器来处理复杂的分页需求。


🔹 分页器:集结项目案例实战

在实际开发中,我们常需要处理复杂的分页配置。以下是一个实战示例,展示如何在项目中使用分页器处理复杂的分页需求:

from django.core.paginator import Paginatordef project_list_view(request):project_list = Project.objects.filter(status='active')  # 获取所有活跃项目paginator = Paginator(project_list, 20)  # 每页显示20个项目page_number = request.GET.get('page')try:projects = paginator.page(page_number)except PageNotAnInteger:projects = paginator.page(1)except EmptyPage:projects = paginator.page(paginator.num_pages)return render(request, 'project_list.html', {'projects': projects})

代码解析:

  • Project.objects.filter(status='active'):筛选出状态为“活跃”的项目。
  • Paginator(project_list, 20):每页显示20个项目。
  • render(request, 'project_list.html', {'projects': projects}):将项目数据传递到模板进行渲染。

业务示例:

在项目管理系统中,分页展示活跃的项目列表,可以帮助用户快速浏览和管理项目。


🔹 分页器:创建项目生成测试数据

生成测试数据有助于验证分页功能的效果。以下代码展示了如何生成测试数据并验证分页功能:

import random
from django.core.management.base import BaseCommand
from myapp.models import Blogclass Command(BaseCommand):help = 'Generate test data for Blog model'def handle(self, *args, **kwargs):for _ in range(100):  # 生成100条测试博客数据Blog.objects.create(title=f'Test Blog {random.randint(1, 1000)}',content='This is a test blog content.',status=random.choice(['published', 'draft']))self.stdout.write(self.style.SUCCESS('Successfully generated test data'))

代码解析:

  • BaseCommand:Django管理命令的基类,用于生成测试数据。
  • Blog.objects.create():创建100条测试数据,包括随机标题、内容和状态。
  • self.stdout.write(self.style.SUCCESS('Successfully generated test data')):输出成功消息。

业务示例:

在开发阶段生成大量测试数据,用于验证博客系统分页功能的效果。


🔹 django分页器:Page类

Page类是 Django 分页器的一部分,用于表示分页后的数据页面。以下是一个展示Page类用法的示例:

from django.core.paginator import Paginatordef page_class_view(request):item_list = Item.objects.all()paginator = Paginator(item_list, 10)page_number = request.GET.get('page')try:page = paginator.page(page_number)except PageNotAnInteger:page = paginator.page(1)except EmptyPage:page = paginator.page(paginator.num_pages)context = {'page': page,'is_first': page.number == 1,'is_last': page.number == paginator.num_pages,'has_next': page.has_next(),'has_previous': page.has_previous(),}return render(request, 'page_class_template.html', context)

代码解析:

  • paginator.page(page_number):获取指定页码的页面对象。
  • page.number == 1:判断是否为第一页。
  • page.has_next():判断是否有下一页。

业务示例:

用于展示具有分页功能的数据,适合处理需要显示分页信息的页面,如商品列表、评论区等。


🔹 web生命周期:请求发送与路由转发

了解 Web 请求的生命周期对于优化和调试 Web 应用至关重要。以下代码展示了请求发送和路由转发的基本流程:

# views.py
from django.http import HttpResponsedef hello_view(request):return HttpResponse("Hello, World!")# urls.py
from django.urls import path
from . import viewsurlpatterns = [path('hello/', views.hello_view, name='hello_view'),
]

代码解析:

  • path('hello/', views.hello_view, name='hello_view'):定义 URL 路由,将 /hello/ 请求映射到 hello_view 函数。
  • hello_view(request):处理请求并返回响应。

业务示例:

可以用于测试简单的视图函数和路由配置。了解请求发送和路由转发的过程,有助于设计高效的 Web 应用架构。


🔹 web请求参数分析:服务器相关协议

对 Web 请求参数的分析包括对 HTTP 协议和其他相关协议的理解。以下是一个分析请求参数的示例:

from django.http import HttpResponsedef request_analysis_view(request):user_agent = request.META.get('HTTP_USER_AGENT', 'Unknown')accept_language = request.META.get('HTTP_ACCEPT_LANGUAGE', 'Unknown')response_content = f"User-Agent: {user_agent}\nAccept-Language: {accept_language}"return HttpResponse(response_content)

代码解析:

  • request.META.get('HTTP_USER_AGENT'):获取用户代理信息。
  • request.META.get('HTTP_ACCEPT_LANGUAGE'):获取接受的语言信息。

业务示例:

用于分析和记录用户的请求信息。适用于需要根据用户的浏览器或语言设置调整内容的场景。


🔹 web生命周期:HTTP协议

HTTP协议是 Web 通信的基础,理解其工作原理对于开发和调试 Web 应用至关重要。以下代码展示了处理 HTTP 请求的基本方式:

from django.http import HttpResponsedef http_protocol_view(request):if request.method == 'GET':return HttpResponse("This is a GET request.")elif request.method == 'POST':return HttpResponse("This is a POST request.")else:return HttpResponse("Unsupported request method.")

代码解析:

  • request.method:获取请求方法,判断是 GET 还是 POST 请求。

业务示例:

用于处理不同类型的 HTTP 请求,适用于需要根据请求方法执行不同逻辑的场景,如用户登录和数据提交。


🔹 自定义中间件:处理 CSRF

CSRF(跨站请求伪造)保护是 Web 应用安全的重要组成部分。以下是自定义中间件处理 CSRF 保护的示例:

from django.utils.deprecation import MiddlewareMixin
from django.http import HttpResponseForbiddenclass CSRFProtectionMiddleware(MiddlewareMixin):def process_request(self, request):# 简单的 CSRF 保护示例if request.method == 'POST' and not request.META.get('HTTP_X_CSRFTOKEN'):return HttpResponseForbidden("CSRF token missing or incorrect.")return None

代码解析:

  • process_request(self, request):在请求处理过程中检查 CSRF 令牌,如果缺少则返回403错误。

业务示例:

用于保护 Web 应用免受 CSRF 攻击。适用于需要强安全性的应用,如在线表单提交。


相关文章:

Django 后端架构开发:分页器到中间件开发

🚀 Django 后端架构开发:分页器到中间件开发 🚀 🔹 应用样式:上下翻页 分页功能在处理大量数据时非常有用。通过上下翻页,我们可以让用户轻松浏览数据。以下是一个展示产品列表的分页示例: fr…...

亲测解决The client socket has failed to connect to

这个问题是因为深度学习的程序(服务)跟本地主机连接不上,解决方法是确认rank起始数为0。 报错原文 [W socket.cpp:663] [c10d] The client socket has failed to connect to [csdn-xiaohu]:12345 (errno: 22 - Invalid argument).解决方法 …...

Intel ACRN 安装WIN10 VM

上一篇帖子记录了ACRN运行rt linux,这篇帖子记录一下最近倒腾出来的WIN10。目前架构如下 ACRN可以把它理解为一个基于Linux类似软件的Type1 Hypervisor,基于Linux去做而不是baremetal是为了更方便去配置资源。 首先我们得有两台电脑,一台是开…...

贷齐乐案例

源码分析&#xff1a; <?php // 设置 HTTP 头部&#xff0c;指定内容类型为 text/html&#xff0c;字符集为 utf-8 header("Content-type: text/html; charsetutf-8"); // 引入数据库配置文件 require db.inc.php; // 定义函数 dhtmlspecialchars&#xff0c;用…...

[Qt][Qt 网络][下]详细讲解

目录 1.TCP Socket1.核心API概览2.回显服务器3.回显客户端 2.HTTP Client3.其他模块 1.TCP Socket 1.核心API概览 核⼼类是两个&#xff1a;QTcpServer和QTcpSocketQTcpServer用于监听端口&#xff0c;和获取客户端连接 listen(const QHostAddress&, quint16 port)&#…...

十三、OpenCVSharp的目标检测

文章目录 简介一、传统目标检测方法1. 基于滑动窗口的检测2. 特征提取与分类器结合(如 HOG + SVM)3. 级联分类器二、基于深度学习的目标检测1. YOLO 系列算法2. SSD 算法3. Faster R-CNN 算法三、深度学习目标检测模型的训练和部署四、目标检测的性能评估指标1. 准确率、召回…...

STM32标准库学习笔记-6.定时器-输入捕获

参考教程&#xff1a;【STM32入门教程-2023版 细致讲解 中文字幕】 定时器输入捕获 IC&#xff08;Input Capture&#xff09;输入捕获输入捕获模式下&#xff0c;当通道输入引脚出现指定电平跳变时&#xff0c;当前CNT的值将被锁存到CCR中&#xff0c;可用于测量PWM波形的频率…...

vue前端可以完整的显示编辑子级部门,用户管理可以为用户分配角色和部门?

用户和角色是一对多的关系用户和部门是多对多得关系<template><div class="s"><!-- 操作按钮 --><div class="shang"><el-input v-model="searchText" placeholder="请输入搜索关键词" style="width:…...

量化交易的基石:ExchangeSdk

作为长期混迹在合约市场的老韭菜来说&#xff0c;已不能满足与手动下单来亏钱&#xff0c;必须得通过脚本来加速&#xff0c;为了达到这个目的就产生了项目。目前封装的主要是合约的API接口&#xff0c;不支持现货交易。 Github: https://github.com/silently9527/exchange-sdk…...

【区块链+金融服务】基于区块链的一站式绿色金融开放平台 | FISCO BCOS应用案例

科技的进步为绿色金融发展提供了新的机遇&#xff0c;但银行、企业、第三方金融机构等在进行绿色金融业务操作过程中&#xff0c; 存在着相关系统和服务平台建设成本高、迭代难度大、数据交互弱、适配难等痛点。 基于此&#xff0c;中碳绿信采用国产开源联盟链底层平台 FISCO …...

使用Python实现深度学习模型:智能娱乐与虚拟现实技术

介绍 智能娱乐与虚拟现实(VR)技术正在改变我们的娱乐方式。通过深度学习模型,我们可以创建更加沉浸式和智能化的娱乐体验。本文将介绍如何使用Python和深度学习技术来实现智能娱乐与虚拟现实的应用。 环境准备 首先,我们需要安装一些必要的Python库: pip install pand…...

亚马逊云科技产 Amazon Neptune 图数据库服务体验

目录 图数据库为什么使用图数据库Amazon Neptune实践登陆创建 S3 存储桶notebook图神经网络快速构建加载数据配置端点Gremlin 查询删除环境删除 S3 存储桶 总结 图数据库 图数据库是一种专门用于存储和处理图形数据结构的数据库管理系统。图形数据结构由节点&#xff08;Node&…...

【网络安全】重置密码token泄露,实现账户接管

未经许可&#xff0c;不得转载。 文章目录 正文 正文 对某站点测试过程中&#xff0c;登录账户触发忘记密码功能点&#xff0c;其接口、请求及响应如下&#xff1a; PUT /api/v1/people/forgot_password 可以看到&#xff0c;重置密码token和密码哈希均在响应中泄露。 删除co…...

计算机基础知识复习8.13

cookie和session区别 cookie:是服务器发送到浏览器&#xff0c;并保存在浏览器端的一小块数据 浏览器下次访问服务时&#xff0c;会自动携带该块数据&#xff0c;将其发送给服务器 session:是javaEE标准&#xff0c;用于在服务端记录客户端信息 数据存放在服务端更加安全&a…...

Unity URP无光照下Shadow 制作 <二> 合批处理

闲谈 相信大家在日常工作中发现了一个问题 &#xff0c; urp下虽然可以做到3个Pass 去写我们想要的效果&#xff0c;但是&#xff0c;不能合批&#xff08;不能合批&#xff0c;那不是我们CPU要干冒烟~&#xff01;&#xff09; 好家伙&#xff0c;熊猫老师的偏方来了 &#x…...

微乐校园pf

TOC springboot451微乐校园pf 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大&#xff0c;随着当前时代的信息化&#xff0c;科学化发展&#xff0c;让社会各行业领域都争相使用新的信息技术&#xff0c;对行业内的各种相关数据进行科学化&#xff0c;规范化管理。这…...

文件其他相关函数

symlink 链接文件: file.txt -> hello.c 软链接文件、符号链接文件 硬链接文件 命令行&#xff1a;ln -s 123 softlink 快捷方式 int symlink(const char *oldpath, const char *newpath); 功能: 创建一个链接向oldpath文件的新符号链接文件 参数: oldpath:被链接向…...

SQLALchemy ORM 的关联关系之 ORM 中的多对多

SQLALchemy ORM 的关联关系之 ORM 中的多对多 场景示例实现多对多关系定义模型插入和查询数据总结在 SQLAlchemy ORM 中,多对多(Many-to-Many)关联关系是一种常见的关系类型,它表示两个表中的行可以相互关联,即一个表中的多行可以与另一个表中的多行相关联。为了实现这种关…...

sdkman install慢,采用squid代理

(1)A机器,IP:yy.yy.yy.yy 安装squid yum install squidvi /etc/squid/squid.confacl allowed_ip src xx.xx.xx.xx http_access allow allowed_ip http_access deny allsystemctl restart squid 开放3128端口 (2)B机器&#xff0c;IP:xx.xx.xx.xx, export http_proxyhttp://y…...

实时监控Windows服务器:使用Prometheus和Grafana的终极方案

视频指南 【1】快速上手&#xff1a;在Windows系统上部署Prometheus与Grafana&#xff0c;实时监控性能指标 【2】快速上手&#xff1a;在Windows系统上部署Prometheus与Grafana&#xff0c;实时监控性能指标 1. 下载并安装 Prometheus 下载 Prometheus&#xff1a; 访问 Pro…...

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇&#xff0c;在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下&#xff1a; 【Note】&#xff1a;如果你已经完成安装等操作&#xff0c;可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作&#xff0c;重…...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​&#xff0c;覆盖应用全生命周期测试需求&#xff0c;主要提供五大核心能力&#xff1a; ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一&#xff09; 1. CSI-2层定义&#xff08;CSI-2 Layer Definitions&#xff09; 分层结构 &#xff1a;CSI-2协议分为6层&#xff1a; 物理层&#xff08;PHY Layer&#xff09; &#xff1a; 定义电气特性、时钟机制和传输介质&#xff08;导线&#…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界&#xff1a;MCP协议与服务器的工作原理 MCP&#xff08;Model Context Protocol&#xff09;是一种创新的通信协议&#xff0c;旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天&#xff0c;MCP正成为连接AI与现实世界的重要桥梁。…...

如何在网页里填写 PDF 表格?

有时候&#xff0c;你可能希望用户能在你的网站上填写 PDF 表单。然而&#xff0c;这件事并不简单&#xff0c;因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件&#xff0c;但原生并不支持编辑或填写它们。更糟的是&#xff0c;如果你想收集表单数据&#xff…...

听写流程自动化实践,轻量级教育辅助

随着智能教育工具的发展&#xff0c;越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式&#xff0c;也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建&#xff0c;…...

Python ROS2【机器人中间件框架】 简介

销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中&#xff0c;车辆不再仅仅是传统的交通工具&#xff0c;而是逐步演变为高度智能的移动终端。这一转变的核心支撑&#xff0c;来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒&#xff08;T-Box&#xff09;方案&#xff1a;NXP S32K146 与…...