Django后台接口开发

一、设计轮播图ORM模型

设计轮播图的ORM(Object-Relational Mapping,对象关系映射)模型,主要是为了在关系型数据库和业务实体对象之间建立一个映射关系。这样,开发者在操作具体的业务对象时,就不需要再编写复杂的SQL语句,而是可以通过简单地操作对象的属性和方法来实现对数据库的操作。

步骤:1、分析并设计数据库模型

           2、完成ORM模型编码

           3、检查ORM模型

           4、模型同步

(一)定义ORM模型

在Django等使用ORM的框架中,通常会在models.py文件中定义ORM模型。

在这个模型中,我们定义了以下字段:

 title:轮播图的标题,使用CharField类型,最大长度为255个字符。

 image:轮播图的图片,使用ImageField类型,并指定了上传目录为carousels/

 link:轮播图点击后跳转的链接,使用URLField类型。

 order:轮播图的排序,使用PositiveIntegerField类型,用于控制轮播图的显示顺序。

 created_atupdated_at:分别表示轮播图的创建时间和更新时间,使用DateTimeField类型,并分别设置了auto_now_add=Trueauto_now=True来自动记录时间。

(二)生成数据库表

在定义了ORM模型之后,需要生成相应的数据库表。这通常通过Django的迁移机制来实现。

  1. 在命令行终端中,进入到项目所在的路径。
  2. 执行命令python manage.py makemigrations来生成迁移脚本文件。
  3. 执行命令python manage.py migrate来将迁移脚本文件映射到数据库中,生成相应的数据库表。

(三)操作数据库

在生成了数据库表之后,就可以通过ORM模型来操作数据库了。例如,可以添加、查询、更新和删除轮播图数据。

        添加数据:可以通过创建一个新的Carousel模型实例,并设置其属性,然后调用save方法来保存数据到数据库中。

        查询数据:可以使用Carousel.objects.all()来查询所有轮播图数据,或者使用Carousel.objects.filter()来根据条件查询数据。

        更新数据:可以通过查询得到某个轮播图实例,然后修改其属性,并再次调用save方法来更新数据。

        删除数据:可以通过查询得到某个轮播图实例,然后调用delete方法来删除数据。

综上所述,设计轮播图的ORM模型需要定义模型类、生成数据库表,并通过ORM模型来操作数据库。这样可以提高开发效率,减少编写SQL语句的工作量,并使代码更加简洁和易于维护。

二、轮播图接口设计及实现

步骤:1、设计接口返回标准:定义接口的返回结构

        2、编写接口代码

        3、模拟HTTP请求,测试验证接口

轮播图(Carousel)是许多网页和移动应用中常见的一种UI组件,用于展示图片、广告、新闻等内容。设计一个轮播图的接口需要考虑到前端展示的需求、后端数据管理的便捷性、以及数据的传输效率。以下是一个简单的轮播图接口设计及实现思路。

接口设计

1、数据模型

首先,定义轮播图的数据模型。假设我们使用JSON格式来表示数据。

 id: 轮播图的唯一标识符。

 title: 轮播图的标题或描述。

 imageUrl: 图片的URL。

 link: 点击图片后跳转的链接。

 startTime 和 endTime: 轮播图展示的开始和结束时间。

 position: 轮播图的显示顺序。

2、接口列表

获取轮播图列表

        URL: /api/carousel

        Method: GET

        Query Parameters:

             page (可选): 分页页码,默认1。limit (可选): 每页数量,默认10。active (可选): 布尔值,过滤当前有效的轮播图(根据startTimeendTime),默认true。        

获取单个轮播图

        URL: /api/carousel/{id}

        Method: GET

   Path Parameters:

    id: 轮播图的唯一标识符。

创建/更新轮播图

        URL: /api/carousel

        Method: POST(创建)/PUT(更新)

删除轮播图

        URL: /api/carousel/{id}

        Method: DELETE

三、关键性名词

(一)paginate_by

在Django中,paginate_by 是一个在类视图(如 ListView)中使用的属性,它指定了分页时每页应显示的对象数量。当你在Django的视图中处理大量数据时,分页是一个重要的功能,因为它可以帮助用户更有效地浏览内容,同时减少加载时间并优化资源使用。

在 ListView 中使用:
paginate_by 通常与 ListView 一起使用,这是一个基于类的视图,用于显示对象的列表。你可以通过设置 paginate_by 属性来指定每页显示的对象数。

在模板中处理分页:
当 paginate_by 被设置时,ListView 会自动处理分页逻辑。在你的模板中,你可以使用Django提供的分页模板标签来显示分页控件。

自定义分页逻辑:
虽然 paginate_by 提供了简单的分页功能,但你可能需要更复杂的分页逻辑。在这种情况下,你可以重写 ListView 的某些方法或使用 Paginator 类来手动实现分页。

注意事项:

        当使用分页时,确保你的查询集(queryset)是可分页的。

        如果你的页面大小(由 paginate_by 指定)大于查询集中的对象数,则只会显示一个页面。

        分页通常与查询字符串参数 page 一起使用,该参数指示当前页码。

通过 paginate_by,Django为开发者提供了一种简单而有效的方法来处理大量数据,并为用户提供流畅的分页浏览体验。

(二)as_view()

在Django中,as_view() 是类视图(class-based views, CBVs)的一个重要方法。Django的类视图是一种基于类的视图系统,它允许你以类的方式定义视图逻辑,而不是传统的函数式视图。as_view() 方法的作用是将类视图转换为一个可调用的视图函数,这个函数可以被Django的URLconf使用。

当你定义一个类视图时,你其实是在定义一个包含视图逻辑的类。然而,Django的URLconf系统期望的是函数,而不是类。因此,as_view() 方法就扮演了桥梁的角色,它将类视图转换为一个函数视图,这样你就可以在URLconf中像使用普通函数视图一样使用它。

MyView 是一个类视图,它定义了一个 get 方法来处理HTTP GET请求。我们通过调用 MyView.as_view() 来创建一个可调用的视图函数,并将其作为第二个参数传递给 path() 函数,以便在URLconf中注册这个视图。

as_view() 方法还可以接受一些可选参数,这些参数允许你进一步自定义类视图的行为。例如,你可以传递 template_name 参数来指定一个模板,这个模板将被用于渲染响应。然而,需要注意的是,这些参数通常是特定于某些基于 TemplateView 或其他通用类视图的子类。

(三)Q

DjangoQ在Django框架中通常指的是一个功能强大的应用程序,它主要用于处理异步任务和定时任务。

DjangoQ是一个为Django项目设计的任务队列和调度系统。它提供了一个易于使用的任务队列,可以处理耗时的操作,如发送电子邮件、图像处理和后台计算等。此外,DjangoQ还支持定时任务功能,允许你在指定的时间间隔或特定时间执行重复或延迟的任务。

异步任务处理:DjangoQ允许你将耗时的任务放在后台执行,从而释放主线程,提高应用程序的响应速度和性能。

定时任务调度:通过DjangoQ,你可以轻松设置定时任务,按照指定的时间间隔或特定时间执行。

可扩展性和灵活性:DjangoQ支持多个后台进程和多个任务队列,可以根据项目的需求进行灵活配置。

直观的管理界面:DjangoQ提供了一个直观的管理界面,用于监视和管理任务,方便开发者进行任务调度和监控。

(四)代码片段

    name = models.CharField('名称', max_length=32)desc = models.CharField('描述', max_length=100,null=True, blank=True)types = models.SmallIntegerField('展现的位置',default=10)img = models.ImageField('图片地址', max_length=255, upload_to='%Y%m/slider')reorder = models.SmallIntegerField('排序字段', default=0, help_text="数字越大越靠前")start_time = models.DateTimeField('生效开始时间',null=True, blank=True)end_time = models.DateTimeField('生效结束的时间', null=True, blank=True)target_url = models.CharField('跳转的地址', max_length=255, null=True, blank=True)is_valid = models.BooleanField('是否有效', default=True)created_at = models.DateTimeField('创建时间', auto_now_add=True)updated_at = models.DateTimeField('修改时间', auto_now=True)

数据类型:CharField(字符字段)

null=True表示该字段在数据库中可以存储NULL值,即可以没有值。

blank=True表示在Django的表单验证中,该字段可以为空。

数据类型:SmallIntegerField(小整数字段)

数据类型:ImageField(图片字段)

upload_to='%Y%m/slider'指定了图片上传的目录结构,根据年份和月份分文件夹存储,并放在slider目录下。

reorder = models.SmallIntegerField('排序字段', default=0, help_text='数字越大越靠前')reorder字段用于排序,数据类型为SmallIntegerField,默认值为0。

target_url = models.CharField('跳转的地址', max_length=255, null=True, blank=True)target_url字段用于存储跳转的地址,数据类型为CharField,最大长度为255个字符。

数据类型:BooleanField(布尔字段)

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

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

相关文章

可编辑97页PPT | 制造企业数字化转型战略咨询及IT总体规划方案

荐言分享:制造企业数字化转型是当前市场环境下的必然趋势,旨在通过引入先进的信息技术,优化业务流程,提升运营效率,增强客户体验,实现可持续发展。这一转型过程涉及多个方面,需要综合考虑企业战…

计算机视觉中的点算子:从零开始构建

Hey小伙伴们!今天我们要聊的是一个非常基础但极其重要的计算机视觉技术——点算子(Point Operators)。点算子主要用于对图像的每个像素进行独立的处理,比如亮度调整、对比度增强、灰度化等。通过这些简单的操作,我们可…

001-Kotlin界面开发之Jetpack Compose Desktop学习路径

Compose Desktop学习之路 学习过程 理解Kotlin的基本语法 Compose Desktop采用Kotlin构建,因此对Kotlin的基本语法有很好的理解是必不可少的。你可以从官方的Kotlin文档开始。 用一句话概括,Kotlin是一种现代的、静态类型的编程语言,它结合…

小金标认证的头戴式蓝牙,QCY H3 Pro耳机,平价高音质的新选择

我发现如今市面上百元级的头戴式无线耳机都有非常出色的音质表现了,这其中国产品牌的表现尤为亮眼,与入耳式耳机相比,头戴式耳机拥有更大的发音单元和更包裹耳朵的耳罩设计,提供了更舒适稳固的佩戴体验,在音质和降噪效…

方法+数组

1. 方法 1. 什么是方法 方法定义: // []表示可写可不写[public] [static] type name ( [type formal , type formal , ...]){方法体;[return value ;] }[修饰符] 返回值类型 方法名称([参数类型 形参 , 参数类型 形参 ...]){方法体代码;[return 返回值…

大语言模型(LLM)入门级选手初学教程 II

模型架构 5.1 输入编码: i. 词元序列编码 Input Embedding Module ii. 位置编码(Position Embedding, PE),Transformer 的编码器结构本身无法识别序列中元素的顺序。 𝒙𝑡 𝒗𝑡 &#x1d491…

【深度学习】实验 — 动手实现 GPT【二】:注意力机制、注意力掩码、多头注意力机制

【深度学习】实验 — 动手实现 GPT【二】:注意力机制、多头注意力机制 注意力机制简单示例:单个元素的情况简单示例:计算所有输入词元的注意力权重推广到所有输入序列词元: 注意力掩码代码实现多头注意力测试 注意力机制 简单示例…

数据库(31)——事务

事务 数据库事务(Database Transaction)是数据库管理系统(DBMS)中执行的一组逻辑操作单元,这些操作要么全部成功执行,要么全部不执行,以保持数据的一致性和完整性。事务是确保数据可靠性的重要机…

Android 获取OAID

获取OAID 老规矩,直接上: implementation com.huawei.hms:opendevice:6.11.0.300 // 要获取华为vaid 和aaid,还需添加opendevice 依赖implementation(name: oaid_sdk_2.5.0, ext: aar) import android.content.Context; import android.util.…

每日互动基于 Apache DolphinScheduler 从容应对ClickHouse 大数据入库瓶颈

引言 大家好,我叫张琦,来自每日互动,担任大数据平台架构师。今天我将分享我们团队在基于Apache DolphinScheduler实现ClickHouse零压入库过程中的实践经验。 这个实践项目涉及到两个关键组件:Apache DolphinScheduler和ClickHous…

[vulnhub] Brainpan1

https://www.vulnhub.com/entry/brainpan-1,51/ 主机发现端口扫描 使用nmap扫描网段类存活主机 因为靶机是我最后添加的,所以靶机IP是166 nmap -sP 192.168.75.0/24 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-1…

数学建模与优化算法:从基础理论到实际应用

数学建模和优化算法,它们不仅帮助我们理解和描述复杂系统的行为,还能找到系统性能最优化的解决方案。本文将从基础的数学理论出发,逐步深入到各种优化算法,并探讨它们在实际问题中的应用。 思维导图文件可获取:https:…

基于Intel Gaudi AI加速器的大语言模型微调与推理优化赛题等你挑战 | CCF BDCI进行时

一年一度的行业盛事2024 CCF大数据与计算智能大赛(简称2024 CCF BDCI)又在激烈进行中啦! 多个赛题等你挑战还没有报名的伙伴们抓紧时间咯,叫上你伙伴练起来吧! 2024 CCF大数据与计算智能大赛 CCF大数据与计算智能大…

使用 FastGPT 工作流搭建 GitHub Issues 自动总结机器人

如今任何项目开发节奏都很快,及时掌握项目动态是很重要滴,GitHub Issues 一般都是开发者和用户反馈问题的主要渠道。 然而,随着 Issue 数量的增加,及时跟进每一个问题会变得越来越困难。 为了解决这个痛点,我们开发了…

Unreal Engine 5 C++(C#)开发:使用蓝图库实现插件(一)认识和了解Build.cs

目录 引言 一、创建一个C插件TextureReader插件 二、Build.cs文件 三、ModuleRules 四、TextureReader插件的构造 4.1ReadOnlyTargetRules的作用 4.2TextureReaderd的构造调用 4.3设置当前类的预编译头文件的使用模式 4.4PublicIncludePaths.AddRange与PrivateInclude…

探索C嘎嘎:初步接触STL

#1024程序员节|征文# 前言: 在前文小编讲述了模版初阶,其实讲述模版就是为了给讲STL提前铺垫,STL是C中很重要的一部分,各位读者朋友要知道它的份量,下面废话不多说,开始走进STL的世界。 目录&am…

指令系统 I(指令的格式、寻址)

一、指令系统 1. 指令集体系结构 指令(机器指令)是指示计算机执行某种操作的命令,是计算机运行的最小功能单位。一台计算机的所有指令的集合构成该机的指令系统,也称指令集。 指令系统是指令集体系结构(ISA&#xf…

如何精准选择Yandex关键词

Hey小伙伴们👋,今天来聊聊如何精准选择Yandex关键词,让你的广告投放效果最大化!🔍 1.使用Yandex关键词工具:Yandex提供了关键词工具,如Yandex Keyword Planner和Yandex Wordstat&#xff0…

快速生成高质量提示词,Image to Prompt 更高效

抖知书老师推荐: 随着 AI 技术的不断发展,视觉信息与语言信息之间的转换变得越来越便捷。在如今的数字化生活中,图像与文字的交互需求愈发旺盛,很多人都希望能轻松将图像内容直接转化为文本描述。今天我们来推荐一款实用的 AI 工…

jmeter附件上传

可以采用录制的方式获取附件上传的http请求 普通参数 附件参数 文件名称: 方式一:如果只添项目名称,默认充jmeter的bin目录下获取 方式二:点击文件名称,再点击浏览,可以自己选择文件信息