Python Web开发技巧VIII

这篇具有很好参考价值的文章主要介绍了Python Web开发技巧VIII。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

ModelSerializer和Serializer区别是什么

从queryset中取出某个models的字段值

Q对象进行模糊匹配

HTTP方式-如何模糊搜索JSON字段中的某个KEY值呢?

showmigrations

合并两个或多个queryset


ModelSerializer和Serializer区别是什么

        都是DRF中用于序列化和反序列化数据的组件。主要区别在于:ModelSerializer是针对Django模型(models)的快捷方式,它自动根据模型生成相应的序列化器字段和验证器。而Serializer则是一个通用的序列化器,需要手动定义字段和验证器。

  1. ModelSerializer
    • 针对Django模型的快捷方式。
    • 自动生成序列化器字段,根据模型中的字段类型选择相应的序列化器字段类型。
    • 自动生成验证器,根据模型中的字段约束(如uniquemax_length等)创建相应的验证器。
    • 自动生成create()update()方法,用于创建和更新模型实例。
    • 需要定义一个Meta类,指定模型类和序列化器字段。
  2. Serializer
    • 通用的序列化器,适用于任何类型的数据。
    • 需要手动定义序列化器字段和验证器。
    • 需要手动实现create()update()方法(如果需要的话)。
    • 不需要定义Meta类。

大多数情况下,如果处理的数据与Django模型相关,那么ModelSerializer会更方便,它可以自动处理很多事情,减少了手动编写代码的工作。如果处理的数据与Django模型无关,或需要自定义序列化和验证逻辑,那么使用通用的Serializer可能更合适。

【注:serializers.Serializer 类不会自动使用 Meta 类。】

从queryset中取出某个models的字段值

from myapp.models import MyModel

# 获取MyModel的QuerySet
queryset = MyModel.objects.all()
# 从QuerySet中获取某个字段(例如'field1')的值
field_values = queryset.values_list('field1', flat=True)
# 保证单个元素获取
field_value = queryset.values_list('field1', flat=True).first

flat=True表示返回一个单个值的列表,而不是元组

# 使用flat=True
result = queryset.values_list('field_name', flat=True)
# 返回结果类似:[value1, value2, value3, ...]

# 不使用flat=True
result = queryset.values_list('field_name')
# 返回结果类似:[(value1,), (value2,), (value3,), ...]

Python Web开发技巧VIII,后端,开发,python,开发语言

 而次数subject.values_list("follow_up_count", flat=True).first则直接为0。

Q对象进行模糊匹配

如 icontainsiexactstartswith 等

from django.db.models import Q
from myapp.models import MyModel

# 获取 name 包含 'John' 或 'Jane' 的对象(不区分大小写)
result = MyModel.objects.filter(Q(name__icontains='John') | Q(name__icontains='Jane'))

# 获取 name 以 'J' 开头的对象(不区分大小写)
result = MyModel.objects.filter(Q(name__istartswith='J'))

# 获取 name 等于 'John' 或 'Jane' 的对象(不区分大小写)
result = MyModel.objects.filter(Q(name__iexact='John') | Q(name__iexact='Jane'))

        往往我们使用Q对象时,对应的搜索框可以使用不止一个字段的检索,这时如何提供查询效率和简便代码呢?
        我们一般采取先创建Q对象,如何按OR的方式塞入,再往里面创建不同的Q对象添加,最后一次filter执行,一般为优化代码,还同时把函数嵌套在函数里,例如一下这种写法:

def create_q_object(field_name, search_terms):
    q_object = Q()
    q_object.connector = "OR"
    for term in search_terms.split(","):
        q_object.children.append((f"{field_name}__icontains", term))
    return q_object

query_set = self.get_queryset().filter(enabled=True)
con = Q()

if "name" in validated_data:
    con.add(create_q_object("name", validated_data["name"]), "AND")

if "age" in validated_data:
    con.add(create_q_object("age", validated_data["age"]), "AND")

query_set = query_set.filter(con)

注:

icontains:不区分大小写的子字符串搜索

contains: 区分大小写的子字符串搜索

HTTP方式-如何模糊搜索JSON字段中的某个KEY值呢?

假设场景:

        数据库中存储字段user值为{name: hh, age: 18},在搜索栏中使用name=h,name通过序列化

        器,请问如何用Q对象对其进行模糊搜索,把对应匹配的字段数据返回。

核心代码:

# 注:JSONField不支持__icontains查询,根据场景这里的user字段是JSONField
users = User.objects.filter(Q(user__contains={'name': name}))

showmigrations

python manager.py showmigrations会根据迁移的记录展示是否迁移(与django_migrations表相关联)

合并两个或多个queryset

用union

queryset = queryset1.union(queryset2)

另外exists()属性可直接判断一个Queryset是否为空文章来源地址https://www.toymoban.com/news/detail-618424.html

到了这里,关于Python Web开发技巧VIII的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【python】基础开发技巧

    目录 闭包 基础代码  nonlocal 装饰器 基础代码  语法糖写法 设计模式 单例模式 工厂模式 多线程、进程 探究互斥锁对多线程速度的影响 网络通信编程 服务端开发 客户端开发 正则(RE) 递归 递归遍历文件 一:闭包的定义: 目的:保证变量不会因为外部函数调用而销毁。 1:

    2023年04月08日
    浏览(37)
  • Python开发小技巧

    Python开发简洁小技巧 同时遍历两个列表 同时遍历两个列表,比如as = [\\\"张三\\\", \\\"李四\\\", \\\"王五\\\"],bs = [\\\"zhangsan\\\", \\\"lisi\\\", \\\"wangwu\\\"],往往对应列表顺序元素有对应关系,使用zip: 笛卡尔积遍历 同时遍历列表构造全部组合,比如as = [\\\"a\\\", \\\"b\\\"],bs = [\\\"1\\\", \\\"2\\\"],我们希望得到的结果是a,1和a

    2023年04月10日
    浏览(52)
  • Python爬虫开发入门及开发技巧大全

    get方法 post方法 这在某些情况下比较有用, 比如IP被封了,或者比如IP访问的次数受到限制等等。 是的没错,如果想同时用代理和cookie, 那就加入proxy_support然后operner改为 ,如下: 某些网站反感爬虫的到访,于是对爬虫一律拒绝请求。 这时候我们需要伪装成浏览器, 这可以

    2023年04月15日
    浏览(37)
  • 后端开发必知的11个线程安全小技巧

      对于从事后端开发的同学来说,线程安全问题是我们每天都需要考虑的问题。   线程安全问题通俗地讲主要是在多线程的环境下,不同线程同时读和写公共资源(临界资源)导致的数据异常问题。   比如:变量a=0,线程1给该变量+1,线程2也给该变量+1。此时,线程3获取

    2024年02月15日
    浏览(38)
  • Python前后端分离之Django框架最基本后端CRUD开发

    目录   Django介绍: 开发准备 后端编写Django项目里的app模块 编写models.py文件(写模型):  编写序列化文件(serializers.py) 编写视图(Views) 新建urls.py文件,填写路径 ​编辑 进行迁移: 前端: 编写接口文件api.js 编写CRUD文件 编写index.vue文件 前端界面使用: 运行项目: 提

    2024年01月23日
    浏览(64)
  • 为什么 OpenAI 团队采用 Python 开发他们的后端服务?

    Python,年龄可能比很多读者都要大,但是它在更新快速的编程界却一直表现出色,甚至有人把它比作是编程界的《葵花宝典》,只是Python的速成之法相较《葵花宝典》有过之而无不及。 Python简洁,高效的特点,大大提升了程序员的编码速度,极大的提高了程序员的办公效率,

    2024年02月02日
    浏览(44)
  • Python 开发工具 Pycharm —— 使用技巧Lv.1

    Basic code completion Ctrl+空格 is available in the search field when you search for text in the current file Ctrl+F, so there is no need to type the entire string 基本代码完成Ctrl +空格可在搜索领域当你搜索文本在当前文件Ctrl + F,所以没有必要整个字符串类型 To make your printouts (File | Print) nice and informative, use

    2024年02月14日
    浏览(40)
  • Python 开发工具 Pycharm —— 使用技巧Lv.2

    pydoc 是python自带的一个文档生成工具,使用pydoc可以很方便的查看类和方法结构 本文主要介绍:1.查看文档的方法、2.html文档说明、3.注释方法、 **方法1:**启动本地服务,在web上查看文档 命令【python3 -m pydoc -p 1234】 通过http://localhost:1234来访问查看文档 说明: 1、-p指定启动

    2024年02月14日
    浏览(45)
  • Python 开发工具 Pycharm —— 使用技巧Lv.3

    1: 鼠标左键单击红点是断点行 2:甲虫样式是进行调试方式运行,鼠标左键单击点击 3: 单步运行图标,点击让程序运行一行 4: 步入步出,可以进入当前代码行函数内 5:重新运行,修改之后或者运行完成后想要再次运行 点此再次运行

    2024年02月13日
    浏览(37)
  • Python开发工具PyCharm使用技巧——键盘快捷键指南

    JetBrains PyCharm是一种Python IDE,其带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具。此外,该IDE提供了一些高级功能,以用于Django框架下的专业Web开发。 PyCharm有大多数与编辑、导航、重构、调试和其他任务相关命令的键盘快捷键,记住这些快捷键可以帮助

    2024年04月09日
    浏览(81)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包