Python Web开发技巧VII

news2024/12/26 23:42:32

目录

装饰器inject_serializer

装饰器@atomic

rebase

git 清理add的数据

查看git的当前工作目录

makemigrations文件名称

@action(detail=True, methods=["GET"])

如何只取序列化器的一个字段进行返回

Response和JsonResponse有什么区别

序列化器填表和单字段如何写

序列化器里包含多对象数据-序列化器嵌套序列化器

from django.db.models import Q的Q对象有什么用,是什么


装饰器inject_serializer

        用于动态地将一个序列化器(serializer)注入到Django REST framework(DRF)视图中。

举个例子:

from blue_krill.web.drf_utils import inject_serializer



    @inject_serializer(
        body_in=serializers.SLZ1, out=serializers.SLZ2, tags=["项目A"], operation_summary="获取B"
    )
    def xxx(self, request, args):
        pass

以上,

  1. body_in: 指定请求体的序列化器,这里使用的是 serializers.SLZ1
  2. out: 指定响应体的序列化器,这里使用的是 serializers.SLZ2
  3. tags: 对 API 分类,方便在生成的 API 文档中查找(比如swagger)。这里标签:项目A
  4. operation_summary: 提供 API 的简短描述,这里描述:获取B。 

通过该装饰器,可以让 API 接口更具可读性和规范性,同时也能方便生成 API 文档。

在swagger中的显示就是:

装饰器@atomic

在 Django 中用于确保一个函数或方法在数据库中执行的操作具有原子性。

from django.db.transaction import atomic  # transaction 即事务的意思

@atomic
def create_user_and_profile(username, email, age):
    user = User.objects.create(username=username, email=email)
    profile = UserProfile.objects.create(user=user, age=age)

相当于在视图函数中开了个事务,主要目的是维护DB的一致性和完整性。

rebase

大家可能都是常用merge去合并,这样能保留具体的commit记录,但对不复杂或说不大型的项目,rebase其实更简洁干净些。

git checkout v1
git rebase master

v1合并到master,往往还要解决冲突,就处理后git add <File>然后git rebase

git 清理add的数据

从暂存区中移除单个文件

git restore --staged <file-path>

从暂存区中移除多个文件

git restore --staged <file-path-1> <file-path-2> ...

 从暂存区中移除所有文件(原来冒红冒黄的文件又恢复冒红冒黄):

git restore --staged .

查看git的当前工作目录

场景:比如git add需要直接加文件的方式

git rev-parse --show-toplevel

makemigrations文件名称

为让迁移文件更加清晰目的,迁移文件往往是要命名规范的,指定生成文件名称:

python manage.py makemigrations --name xxxx
python manage.py makemigrations -n xxxx

如果意外直接创建了,那么修改文件名即可,但前缀的0001这种数字不要去修改,关联到这个文件名的name也要修改(比如一般是下一个迁移文件用到),即可。

@action(detail=True, methods=["GET"])

detail标识是否针对单个对象,

@action(detail=True, methods=["GET"]) =》 /users/{id}/get_username/

@action(detail=False, methods=["GET"]) =》 /users/get_username/

如何只取序列化器的一个字段进行返回

from rest_framework import serializers
from myapp.models import MyModel

class MyModelSerializer(serializers.ModelSerializer):
    class Meta:
        model = MyModel
        fields = ['field_name', 'another_field']

# 假设你已经有一个 MyModel 实例
my_model_instance = MyModel.objects.get(pk=1)

# 使用序列化器序列化实例
serializer = MyModelSerializer(my_model_instance)

# 获取序列化后的数据
serialized_data = serializer.data

# 仅提取名为 'field_name' 的字段
field_name_data = serialized_data['field_name']

# 返回或使用 'field_name' 字段的值
return field_name_data

Response和JsonResponse有什么区别

Response 和 JsonResponse 都是用于构建和返回 HTTP 响应的 Django 类,但它们之间存在一些差异。

  1. 来源Response 类来自 Django REST framework(DRF),通常在 DRF 视图和 APIView 中使用。JsonResponse 类是 Django 内置的,用于构建 JSON 响应。

  2. 内容类型Response 类可以处理多种内容类型(如 JSON、XML 等),默认情况下,它会根据客户端请求的 "Accept" 头选择合适的内容类型。JsonResponse 类专门用于构建 JSON 响应,其 "Content-Type" 头始终设置为 "application/json"。

  3. 序列化Response 类可以与 DRF 序列化器一起使用,自动序列化和反序列化数据。JsonResponse 类仅处理已序列化为 JSON 的数据,您需要确保传递给 JsonResponse 的数据是 JSON 可序列化的(例如 Python 字典、列表等)。

如果正使用 Django REST framework 构建 API,建议使用 Response 类。如果您正在使用 Django 的基本视图或类视图,并需要返回 JSON 数据,可以使用 JsonResponse 类

序列化器填表和单字段如何写

class HahaSLZ(serializers.Serializer):
    haha_id = serializers.IntegerField(required=False)

    class Meta:
        model = User
        fields = [field.name for field in User._meta.get_fields()] + ['haha_id']  # 注,直接__all__并不能涵盖haha_id

序列化器里包含多对象数据-序列化器嵌套序列化器

results该字段的类型是 AASLZ,并设置了 many=True 参数,表示这是一个列表,其中包含多个 AASLZ实例。

class AASLZ(serializers.Serializer):
    user = serializers.CharField(help_text="用户", required=True)

class BBSLZ(serializers.Serializer):
    results = AASLZ(help_text="用户列表", many=True)

from django.db.models import Q的Q对象有什么用,是什么

Django 的 Q 对象是一个用于构建更复杂查询的工具。它允许您在查询中使用 OR 语句、NOT 语句以及更高级的查询结构。Q 对象可以与 filter()exclude() 和 get() 等查询方法一起使用。

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

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

相关文章

理解Android中不同的Context

作者&#xff1a;两日的blog Context是什么&#xff0c;有什么用 在Android开发中&#xff0c;Context是一个抽象类&#xff0c;它是Android应用程序环境的一部分。它提供了访问应用程序资源和执行各种操作的接口。可以说&#xff0c;Context是Android应用程序与系统环境进行交…

LoadRunner使用教程

1. LoadRunner简介 LoadRunner是一款广泛使用的性能测试工具 可以对各种应用程序进行性能测试&#xff0c;包括Web应用程序、移动应用程序、企业级应用程序等。它提供了一个综合的性能测试解决方案&#xff0c;包括测试计划设计、脚本录制、测试执行、结果分析和报告生成等功…

三、函数-5.流程函数

一、常见函数 【对比】 二、示例 1、if 和 ifnull -- if(value, t, f) 如果value为true&#xff0c;则返回t&#xff0c;否则返回f ok select if(true, ok, error);-- ifnull(value1, value2) 如果value1不为空&#xff0c;返回value1&#xff0c;否则返回value2&#…

MFC表格控件CListCtrl的改造及用法

1、目的 简单描述MFC的表格控件使用方法。Qt适用习惯了以后MFC用的比较别扭&#xff0c;因此记录一下以备后续复制代码使用。由于MFC原生的CListCtrl比较局限&#xff0c;比如无法改变表格的背景色、文字颜色等设定&#xff0c;因此先对CListCtrl类进行重写&#xff0c;以便满足…

哪些报表工具更适合中国企业?看完本文就知道了

企业级报表工具是指能够处理大量数据、支持多种数据源连接、具有强大的数据分析和可视化功能的工具。进入大数据时代&#xff0c;企业数据量剧增、分析需求精细化且要求高效率、高灵活自主性&#xff0c;一般都采用BI报表工具来做智能化、可视化数据分析&#xff0c;推动企业的…

Neo4j数据库中导入CSV示例数据

本文简要介绍Neo4j数据库以及如何从CSV文件中导入示例数据&#xff0c;方便我们快速学习测试图数据库。首先介绍简单数据模型以及基本图查询概念&#xff0c;然后通过LOAD CSV命令导入数据&#xff0c;生成节点和关系。 环境准备 读者可以快速安装Neo4j Desktop&#xff0c;启…

Mysql中(@i:=@i+1)的介绍

i:i1 表达式 生成伪列实现自增序列 语法&#xff1a; select (i:i1) as ,t.* from table_name t,(select i:0) as j (i:i1)代表定义一个变量&#xff0c;每次叠加 1&#xff1b; (select i:0) as j 代表建立一个临时表&#xff0c;j是随便取的表名&#xff0c;但别名一定…

python和c++哪个更值得学,python和c++学哪个简单

大家好&#xff0c;本文将围绕python和c哪个更值得学展开说明&#xff0c;python和c学哪个简单是一个很多人都想弄明白的事情&#xff0c;想搞清楚c和python哪个好学需要先了解以下几个事情。 1、想学编程&#xff0c;选择Python 还是Java或者C&#xff1f; 首先&#xff0c;我…

MySQL索引失效原因及解决方案

MySQL索引失效原因及解决方案 在使用MySQL数据库时&#xff0c;索引是一种重要的性能优化工具。然而&#xff0c;有时候我们可能会遇到索引失效的情况。本文将介绍几种常见的MySQL索引失效原因以及相应的解决方案&#xff0c;并提供SQL语句的错误示例和正确示例。 1. 字符串字…

HarmonyOS学习路之方舟开发框架—学习ArkTS语言(状态管理 二)

Prop装饰器&#xff1a;父子单向同步 Prop装饰的变量可以和父组件建立单向的同步关系。Prop装饰的变量是可变的&#xff0c;但是变化不会同步回其父组件。 概述 Prop装饰的变量和父组件建立单向的同步关系&#xff1a; Prop变量允许在本地修改&#xff0c;但修改后的变化不会…

tinkerCAD案例:11.制作齿轮

tinkerCAD案例&#xff1a;11.制作齿轮 制作齿轮 Add a cylinder to be the main part of the gear. 添加一个圆柱体作为齿轮的主要部分。 说明 Click and drag a cylinder onto the Workplane. 单击圆柱体并将其拖动到工作平面上。 Change the cylinder dimensions to 35mm …

四、约束-1.概述

一、概念 约束是作用于表中字段上的规则&#xff0c;用于限制存储在表中的数据。 二、目的 保证数据库中数据的正确、有效性和完整性。 三、分类

视觉套件专项活动!与飞桨技术专家一起提升技术实力,更多荣誉奖励等你领取

作为中国最早开源的深度学习框架&#xff0c;飞桨深度践行开源理念&#xff0c;开放拥抱社区&#xff0c;重视生态构建&#xff0c;与开发者和生态伙伴共成长&#xff0c;已成为国内综合竞争力第一的产业级深度学习平台。截至目前&#xff0c;飞桨已凝聚750万名开发者。 在飞桨…

i.MX6ULL(十九) linux gpio子系统

一 简介 pinctrl 子系统重点是设置 PIN( 有的 SOC 叫做 PAD) 的复用 和电气属性&#xff0c; 如果 pinctrl 子系统将一个 PIN 复用为 GPIO 的话&#xff0c;那么接下来就要用到 gpio 子系 统了。gpio 子系统顾名思义&#xff0c;就是用于初始化 GPIO 并且提供相…

idea,选中同一个变量高亮显示

阅读复杂代码时&#xff0c;我们经常因为找不清变量位置&#xff0c;而浪费精力重新去看变量名。 效果展示&#xff1a; 在设置里直接搜索按照步骤&#xff0c;勾选然后修改选中变量时的变量背景颜色和字体颜色 这里是设置选中变量时&#xff0c;其他变量的背景颜色和字体颜色…

终于搞懂!数字化、信息化、智能化,到底有什么不同?

引言 随着科技的飞速发展&#xff0c;数字化、信息化和智能化这三个术语在各行各业中频繁出现。然而&#xff0c;许多人对它们之间的区别并不十分清楚。本文旨在阐明数字化、信息化和智能化的含义&#xff0c;探讨它们在实践中的应用&#xff0c;并梳理其异同之处。 一、数字化…

你不知道的AI绘画变现方式

&#x1f3c6; 文章目标&#xff1a;学习AI绘画变现方式 &#x1f340; 入门篇&#xff1a;你不知道的AI绘画变现方式 ✅ 创作者&#xff1a;熊猫Jay ✨ 个人公众号: 熊猫Jay字节之旅 (文末有链接) &#x1f341; 展望&#xff1a;若本篇讲解内容帮助到您&#xff0c;请帮忙点个…

【科研必备】生态系统碳循环模型CENTURY建模方法

CENTURY模型&#xff0c;主要基于过程的陆地生态系统生物地球化学循环模型。主要用于模拟不同土壤-植被系统间C、N、P和S的长期动态。根据土壤有机质的分解速率&#xff0c;CENTURY模型将土壤总有机碳&#xff08;TOC&#xff09;分成了三个碳库&#xff0c;即活性、慢性和惰性…

Rest API 开发分享

概述 REST 从资源的角度来观察整个网络&#xff0c;分布在各处的资源由URI确定&#xff0c;而客户端的应用通过URI来获取资源的表示方式。获得这些表徵致使这些应用程序转变了其状态。随着不断获取资源的表示方式&#xff0c;客户端应用不断地在转变着其状态&#xff0c;所谓表…

js获取本js文件名称

使用 script 标签的 src 属性&#xff1a; 如果您的 JavaScript 文件是通过 script 标签引入的&#xff0c;您可以使用以下方法来获取当前脚本的文件名&#xff1a; var scripts document.getElementsByTagName(script); var currentScript scripts[scripts.length - 1]; va…