Python Web开发技巧VII

目录

装饰器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也要修改(比如一般是下一个迁移文件用到),即可。

但注意,如果已经migrate的,那么需要在django_migration修改对应表名,如果为migrate那就不需要。

@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 MyModelclass MyModelSerializer(serializers.ModelSerializer):class Meta:model = MyModelfields = ['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 = Userfields = [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.mzph.cn/news/12517.shtml

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

相关文章

数学建模-蒙特卡洛模拟

%% 蒙特卡罗用于模拟三门问题 clear;clc %% &#xff08;1&#xff09;预备知识 % randi([a,b],m,n)函数可在指定区间[a,b]内随机取出大小为m*n的整数矩阵 randi([1,5],5,8) %在区间[1,5]内随机取出大小为5*8的整数矩阵 % 2 5 4 5 3 1 4 2 %…

(无人机方向)ros小白之键盘控制无人机(终端方式)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一&#xff1a;配置pycharm的ros开发环境二&#xff1a;核心代码讲解三 效果演示XTDrone 四 完整代码 前言 ubuntu 18.04 pycharm ros melodic 做一个在终端中…

微信小程序——同一控件的点击与长按事件共存的解决方案

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

植物一区HR | 植物生理组+转录组:揭示豆科植物响应干旱胁迫机制

PlantArray 植物高通量生理学表型监测系统 是一套以植物生理学为基础的高精度&#xff0c;高通量&#xff0c;自动化表型监测系统&#xff0c;集合实验设置、数据分析、决策工具于一身&#xff0c;能够高通量实时动态监测并进行全天候生理及环境参数采集&#xff0c;是进行植物…

网络设备中的配置文件管理

建立强大网络的第一步是为灾难和网络中断做好准备&#xff0c;许多企业在中断期间遭受损失&#xff0c;因为他们缺乏备份计划并且配置管理不达标&#xff0c;使用配置文件管理工具进行适当的配置文件管理不仅有助于处理网络中断&#xff0c;还有助于优化网络性能。 使用配置文…

海尔设计借助亚马逊云科技生成式AI,实现端到端的云上工业设计解决方案

海尔创新设计中心&#xff08;以下简称海尔设计&#xff09;成立于1994年&#xff0c;目前拥有400多名设计师&#xff0c;为海尔智家旗下七大品牌全球的所有产品提供设计创新和模式探索。亚马逊云科技为海尔设计提供了四个完整的云上解决方案&#xff0c;全面替代自有机房&…

Vue3 word如何转成pdf代码实现

&#x1f642;博主&#xff1a;锅盖哒 &#x1f642;文章核心&#xff1a;word如何转换pdf 目录 1.前端部分 2.后端部分 在Vue 3中&#xff0c;前端无法直接将Word文档转换为PDF&#xff0c;因为Word文档的解析和PDF的生成通常需要在后端进行。但是&#xff0c;你可以通过Vu…

HCIA 第二课总结

配置网络设备的明文密钥实验组网 实验拓扑 将一个路由器使用配置口进行连接 sys #进入系统视图模式 sysname RTA #给设备命名 user-interface console 0 #进入用户接口配置界面 authentication-mode password #配置认证模式为密钥认证 set authentication password ciphe…

百题千解计划【CSDN每日一练】订班服(附解析+多种实现方法:Python、Java、C、C++、C#、Go、JavaScript)

如果决意去做一件事了,就不要再问自己和别人值不值得,心甘情愿才能理所当然,理所当然才会义无反顾。 🎯作者主页: 追光者♂🔥 🌸个人简介: 💖[1] 计算机专业硕士研究生💖 🌟[2] 2022年度博客之星人工智能领域TOP4🌟 🏅[3] 阿里云社区特邀专…

LeetCode刷题笔记-287题寻找重复数

LeetCode 287 寻找重复数 难度&#xff1a;中等 题目&#xff1a; 给定一个包含 n 1 个整数的数组 nums &#xff0c;其数字都在 [1, n] 范围内&#xff08;包括 1 和 n&#xff09;&#xff0c;可知至少存在一个重复的整数。 假设 nums 只有 一个重复的整数 &#xff0c;返回…

软件外包开发测试管理工具

测试是软件工程中非常重要的一个环节&#xff0c;在上线前必须需要经过严格的测试才能确保上线后软件系统长时间运行。有大量的软件开发和测试管理工具&#xff0c;每一个工具都有自己的特点&#xff0c;今天和大家分享一些常见的工具&#xff0c;希望对大家有所帮助。北京木奇…

【Spring Boot丨序列化、反序列化】

序列化、反序列化 概述Jackson 序列化和反序列化简介自定义序列化器注册外部序列化程序&#xff1a; 指定类的 Json 序列化、反序列化 主页传送门&#xff1a;&#x1f4c0; 传送 概述 序列化是将对象转换为字节序列的过程&#xff0c;而反序列化则是将字节序列恢复为对象的过…

监听镜像版本变化触发 GitOps工作流

文章目录 前言工作流总览安装和配置 ArgoCD Image Updater创建 Image Pull Secret&#xff08;可选&#xff09;创建 Helm Chart 仓库创建 ArgoCD Application删除旧应用&#xff08;可选&#xff09;配置仓库访问权限创建 ArgoCD 应用 体验 GitOps 工作流总结 前言 在【GitOps…

基于Citespace、vosviewer、R语言的文献计量学可视化分析技术及全流程文献可视化SCI论文高效写作方法

文献计量学是指用数学和统计学的方法&#xff0c;定量地分析一切知识载体的交叉科学。它是集数学、统计学、文献学为一体&#xff0c;注重量化的综合性知识体系。特别是&#xff0c;信息可视化技术手段和方法的运用&#xff0c;可直观的展示主题的研究发展历程、研究现状、研究…

【小波尺度谱】从分段离散小波变换计算小波尺度谱研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

用于系统监控及进程管理python库之psutil

前言 对于一个job级别应用再进行测试的过程中&#xff0c;不可避免测试该服务的一些性能&#xff0c;比如占有cpu的使用量&#xff0c;使用的memory的大小等&#xff0c;比较简单的方式是在服务中起一个并行的线程&#xff0c;每隔一段时间打印这些关注量的大小&#xff0c;之后…

invalid use of incomplete type class ui(new Ui::MainWindow)报错,解决方案

invalid use of incomplete type class ui(new Ui::MainWindow报错&#xff0c;解决方案 原因解决方案 原因 就是在我改控件button的名字的时候&#xff0c;没有选中控件&#xff0c;导致吧mainwindow的名字改了。。。 解决方案 吧mainwindow的名字改回来 MainWindow 完美解…

element 级联 父传子

html代码例子 父组件 <el-cascaderstyle"width: 100%"change"unitIdChange":options"unitOptions"filterablev-model"formInline.unitId":props"unitProps"/></el-form-item>//改变级联传值到这个组件里面<r…

HTML再出发

HTML再出发 注意事项VScode相关排版标签语义化块级元素和行内元素文本标签img标签图片格式超链接 注意事项 VScode相关 vscode必须打开一个文件夹才能使用liveServer&#xff0c;只打开一个文件无法使用liveServer功能。网页编写不标准&#xff0c;缺少head&#xff0c;body等…

Sestra 实用教程(二)方程求解器

目 录 一、前言二、超单元分析三、惯性释放四、模态叠加法4.1 Eigenvalue solvers4.2 Static back substitution 五、模态综合法六、Master-Slave七、参考文献 一、前言 SESAM &#xff08;Super Element Structure Analysis Module&#xff09;是由挪威船级社&#xff08;DNV-…