django get_object_or_404

get_object_or_404是django的django shortcuts的方法,用来查询数据,或者抛出一个DoesNotExist的异常

用的是orm中的get方法,

def get_object_or_404(klass, *args, **kwargs):
需要三个参数
klass 是一个model对象或者是一个manage,query对象
*arg和**kwargs是查询使用到的参数(在klass中查询)
from django.shortcuts import get_object_or_404
product = get_object_or_404(Student,pk=1)
Student是要查询的model,后面的pk=1是查询条件,你可以根据你需要查询的情况来写条件
from django.http import Http404

try:
product = Product.objects.get(pk=1)
except MyModel.DoesNotExist:
raise Http404

2.关于rest_framework中serializer的to_internal_value方法

我们可以重写这个方法:

def to_internal_value(self, data): 
其中的data是为经过is_valid验证的数据,就是传入的数据
在函数中我们为你可以对数据做一些操作,或者验证某些东西
代码中可以继承父类中的方法super(UpdateCertificateSerializer, self).to_internal_value(data) def to_internal_value(self, data):if "payload" in data:
        # 在其中我对data中的数据,重新复制了一个数据(因为我需要进行签名验证)
data["payload"] = "%s" %({
"project_name": data["project_name"],
"project_where_to_put": data["project_where_to_put"],
"project_desc": data["project_desc"],
},)
try:
        # 这一块代码是我项目中的,我对数据进行了验证
ids = data.get("ids")
channel = get_object_or_404(Channel, channel_orders__order_order_items__uuid=ids[0])
for uuid in ids:
ch = get_object_or_404(Channel, channel_orders__order_order_items__uuid=uuid)
if channel != ch:
raise serializers.ValidationError(
detail={"ids": ["order_item出错"]},
code="ids"
)
           # 这个函数是我进行签名验证的函数
check_and_get_payload(data, channel.key)           # 返回的对象必须是一个可迭代对象,
          # 1.如果格式是下面这种则会经过validate(self.attrs)方法,而不经过validate_id(self,id)方法
          # return check_and_get_paload(data, channel.key)           # 2.如果的形式如下,之后会经过 validate_id(self,id)和validate(self, attrs)
return super(UpdateCertificateSerializer, self).to_internal_value(data) # 建议使用这种
except Exception as e:
print(e)
raise InvalidValue()
else:
return super(UpdateCertificateSerializer, self).to_internal_value(data)
# 验证签名
def check_and_get_payload(data, key):
payload = data.get("payload")
if not isinstance(payload, bytes):
payload = payload.encode(encoding="utf8")
signature = sign(payload, key)
if data["signature"].encode(encoding="utf8") == signature:
return data # 对payload和key进行base64加密
def sign(message, key):
if not isinstance(key, bytes):
key = key.encode(encoding="utf8")
h = hmac.new(key, message, sha1)
return base64.urlsafe_b64encode(h.digest())

10.django的一些方法理解的更多相关文章

  1. 10.Django基础八之cookie和session

    一 会话跟踪 我们需要先了解一下什么是会话!可以把会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应.例如你给10086打个电话,你就是客户端,而10086服务人员就是服务器 ...

  2. Android 自定义 view(四)—— onMeasure 方法理解

    前言: 前面我们已经学过<Android 自定义 view(三)-- onDraw 方法理解>,那么接下我们还需要继续去理解自定义view里面的onMeasure 方法 推荐文章: htt ...

  3. 合并多个python list以及合并多个 django QuerySet 的方法

    在用python或者django写一些小工具应用的时候,有可能会遇到合并多个list到一个 list 的情况.单纯从技术角度来说,处理起来没什么难度,能想到的办法很多,但我觉得有一个很简单而且效率比较 ...

  4. 安装office2010提示要安装MSXML6.10.1129.0解决方法

    系统win7 32位 安装office2010出现了错误,提示要安装MSXML6.10.1129.0解决方法 1.下载MSXML6.10.1129.0进行安装 2.若本机已安装过不管用: a.在运行里 ...

  5. python得到一个10位随机数的方法及拓展

    https://blog.csdn.net/qq_33324608/article/details/78866760 无意中看到一个写10位随机数的方法,很有想法,然后就从学了一下随机数,相关东西都记 ...

  6. django drf 10大请求序列化方法

    ## 整体单改 路由层.模型层.序列化层不需要做修改,只需要处理视图层:views.py ```python"""1) 单整体改,说明前台要提供修改的数据,那么数据就需要 ...

  7. 10 Django之Ajax请求

    一.什么是Ajax技术? 异步的JavaScript和XML.使用Javascript语言与服务器进行异步交互,传输的数据为XML(更多的使用json数据).Ajax不是一门新的编程语言,而是一种使用 ...

  8. 对iOS后台模式最多10分钟运行时间的进一步理解

    在app进入后台时,系统初始默认是只有10s的处理时间,但如果10s不够,我们可以主动申请,网上流传最多的一个说法是10分钟. 但这种说法有个前提: 那就是iOS7之前,是这样 但从iOS7开始,我们 ...

  9. Android 自定义 view(三)—— onDraw 方法理解

    前言: 上一篇已经介绍了用自己定义的属性怎么简单定义一个view<Android 自定义view(二) -- attr 使用>,那么接下来我们继续深究自定义view,下一步将要去简单理解自 ...

随机推荐

  1. C语言Ⅰ博客作业05

    这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2019-3/homework/9827 我在这个课程的目 ...

  2. [转帖]Ubuntu 18.04 server安装图形界面及realvnc远程桌面连接

    Ubuntu 18.04 server安装图形界面及realvnc远程桌面连接 https://blog.csdn.net/networken/article/details/88938304 转帖 ...

  3. Java计算两个时间的天数差与月数差 LocalDateTime

    /**  * 计算两个时间点的天数差  * @param dt1 第一个时间点  * @param dt2 第二个时间点  * @return int,即要计算的天数差  */ public stat ...

  4. 洛谷 P2384 最短路 题解

    题面 这道题需要用到一个神奇的知识点:log(n*m)=log(n)+log(m): 所以对所有边权取个log,然后算log的最短路的同时维护乘积即可 #include <bits/stdc++ ...

  5. Luogu P4147 玉蟾宫

    题目 就是全0子矩阵. 先预处理每个点上面有多少个连续的0(包括自己). 然后我们枚举下边界(1-n). 我们开一个单调栈,记录一个上界递增的矩形集合. 如果我们扫到了一个比当前栈顶要矮的矩形,那么我 ...

  6. Springboot2.0加载指定配置文件@PropertySource的使用

    1. 在resouces下编写待加载的配置文件 这里使用person.properties # String person.last-name=john # int person.age=112 # ...

  7. vue城市选择组件

    适用于vue的城市选择组件 仓库地址 基本功能: 支持全选.反选以及全部清空. 支持按拼音筛选. 勾选省份将会勾选省份下所有城市. 返回数据可灵活处理. 安装 npm install cn-regio ...

  8. 一遍记住 8 种排序算法与 Java 代码实现

    ☞ 程序员进阶必备资源免费送「21种技术方向!」 ☜ 作者:KaelQ, www.jianshu.com/p/5e171281a387 1.直接插入排序 经常碰到这样一类排序问题:把新的数据插入到已经 ...

  9. [.net core]5.outProcess

    与inProcess比较  OutProcess性能更差,因为此时它使用了两个web服务器  ,内部是kestrel  外部可能是iis apache nginx 等. 使用visual studio ...

  10. java使用Callable创建又返回值的线程

    并发编程使我们可以将程序分为很多个分离的,相互之间独立的任务,通过使用多线程的机制,将每个任务都会有一个执行线程来单独的驱动,一个线程是 进程中一个单一顺序控制流,一个进程可以拥有多个线程,也就相当于 ...