10.django的一些方法理解
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的一些方法理解的更多相关文章
- 10.Django基础八之cookie和session
一 会话跟踪 我们需要先了解一下什么是会话!可以把会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应.例如你给10086打个电话,你就是客户端,而10086服务人员就是服务器 ...
- Android 自定义 view(四)—— onMeasure 方法理解
前言: 前面我们已经学过<Android 自定义 view(三)-- onDraw 方法理解>,那么接下我们还需要继续去理解自定义view里面的onMeasure 方法 推荐文章: htt ...
- 合并多个python list以及合并多个 django QuerySet 的方法
在用python或者django写一些小工具应用的时候,有可能会遇到合并多个list到一个 list 的情况.单纯从技术角度来说,处理起来没什么难度,能想到的办法很多,但我觉得有一个很简单而且效率比较 ...
- 安装office2010提示要安装MSXML6.10.1129.0解决方法
系统win7 32位 安装office2010出现了错误,提示要安装MSXML6.10.1129.0解决方法 1.下载MSXML6.10.1129.0进行安装 2.若本机已安装过不管用: a.在运行里 ...
- python得到一个10位随机数的方法及拓展
https://blog.csdn.net/qq_33324608/article/details/78866760 无意中看到一个写10位随机数的方法,很有想法,然后就从学了一下随机数,相关东西都记 ...
- django drf 10大请求序列化方法
## 整体单改 路由层.模型层.序列化层不需要做修改,只需要处理视图层:views.py ```python"""1) 单整体改,说明前台要提供修改的数据,那么数据就需要 ...
- 10 Django之Ajax请求
一.什么是Ajax技术? 异步的JavaScript和XML.使用Javascript语言与服务器进行异步交互,传输的数据为XML(更多的使用json数据).Ajax不是一门新的编程语言,而是一种使用 ...
- 对iOS后台模式最多10分钟运行时间的进一步理解
在app进入后台时,系统初始默认是只有10s的处理时间,但如果10s不够,我们可以主动申请,网上流传最多的一个说法是10分钟. 但这种说法有个前提: 那就是iOS7之前,是这样 但从iOS7开始,我们 ...
- Android 自定义 view(三)—— onDraw 方法理解
前言: 上一篇已经介绍了用自己定义的属性怎么简单定义一个view<Android 自定义view(二) -- attr 使用>,那么接下来我们继续深究自定义view,下一步将要去简单理解自 ...
随机推荐
- illustrator 偏方
视图 边角构件 - - 这个是显示边角弧度的
- 【Qt开发】qt中涉及到空格包含路径的解决办法
qt中涉及到空格路径,qmake是无法正确编译的. 需要在空格路径前面加上$$quote INCLUDEPATH += $$quote(C:/Program Files/MySQL/MySQL Ser ...
- kubernetes集群node加入不了master错误处理
#如果node加入不了master或者加入成功但是,在master中显示不出来.排查错误:1. 运行,kubelet, 查看日志,一般是kubelet的运行和docker启动方式不匹配.调整:vim ...
- Spring Gateway从入门到精通
1.Spring Gateway过滤器详解 2.Spring Gateway之Predicate详解 3.spring cloud gateway自定义过滤器 4.Spring Cloud Gatew ...
- Spark架构角色及基本运行流程
1. 集群角色 Application:基于spark的用户程序,包含了一个Driver program 和集群中多个Executor Driver Program:运行application的mai ...
- 【7.9校内test】T2 极值问题
这个题真的,毫无思路的说,但是我们会打表啊: lz的打表之路: 当然是手写一个暴力啦(*^▽^*)! 然后滚去配置lemon测试一下暴力可以得多少分qwq: 是的40分呢! 然后其实看上面也能看出来一 ...
- MySQL中的索引优化
MySQL中的SQL的常见优化策略 MySQL中的索引优化 MySQL中的索引简介 过多的使用索引将会造成滥用.因此索引也会有它的缺点.虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行 ...
- 3种Redis分布式锁的对比
我们通常使用的synchronized或者Lock都是线程锁,对同一个JVM进程内的多个线程有效.因为锁的本质 是内存中存放一个标记,记录获取锁的线程是谁,这个标记对每个线程都可见.然而我们启动的多个 ...
- vue单页应用中根据不同城市不同业务添加百度统计代码
问题描述: 我们知道一般的百度统计代码是添加在html的head里的:但是,因为目前项目是用vue开发的单页应用,所以在路由跳转之间不会刷新页面, 统计代码如果放在项目里的index.heml的hea ...
- python2 'ascii'编码问题
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 223: ordinal not in range(128) ...