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,下一步将要去简单理解自 ...
随机推荐
- git 命令 随记
git merge --abort (--force使用原力!) 通常在合并版本时出现冲突,抛弃合并过程并且尝试还原到合并前的状态,当合并开始时存在未commit的文件,则这些文件无法还原. git ...
- P2429 【制杖题】
这题目名字也是够了... emmmmmm为什么要用线筛??????不感觉很麻烦吗??????既然是智障制杖题,那么肯定要用很简单的算法啦~下面,我就提供一种非常便于理解的膜你算法~~~很明显,做了这题 ...
- 【神经网络与深度学习】Caffe训练执行时爆出的Check failed: registry.count(t ype) == 1 (0 vs. 1) Unknown layer type
自己建立一个工程,希望调用libcaffe.lib ,各种配置好,也能成功编译,但是运行就会遇到报错 F0519 14:54:12.494139 14504 layer_factory.hpp:77] ...
- (转).net中的session与cookies区别及使用方法
cookie数据存放在客户的浏览器上,session数据放在服务器上,cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session 先介绍一 ...
- Leetcode 38.报数 By Python
报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数.其前五项如下: 1. 1 2. 11 3. 21 4. 1211 5. 111221 1 被读作 "one 1" ...
- 迭代器与iterable
迭代器与iterable 最近在学习ES6,有两个概念一直纠缠不清,就是迭代器与iterable,查阅了一些资料,简单来说迭代器就是包含next方法的对象,而iterable是包含可以在其值上迭代的迭 ...
- CF 11D A Simple Task 题解
题面 这道题的数据范围一看就是dfs或状压啦~ 本文以状压的方式来讲解 f[i][j]表示目前的节点是i,已经经历过的节点的状态为j的简单环的个数: 具体的转移方程和细节请看代码: PS:(i& ...
- js 获取ip和城市
<script src="http://pv.sohu.com/cityjson?ie=utf-8"></script>
- cs244a-Introduction to Computer Networking-Unit1
Unit 1 学习目标: how an application use the Internet The structure of the Internet:The 4 layer model The ...
- oracle链接报错shared memory realm does not exist
问题描述: 前两天能够正常链接,今天来了突然不能链接,原因不详. 处理方法: 连接linux进行如下操作: 1.sqlplus /nolog 2.conn / as sysdba 3.startup ...