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. EINT DINT ERTM DRTM EALLOW EDIS ESTOP0的理解

    本文参考以下资料整理 https://wenku.baidu.com/view/6b0d6906cf84b9d528ea7a66.html http://pangqicheng123.blog.163 ...

  2. yum本地源和网络源的配置

    一.yum本地源 1. 删除YUM库[root@tianyun ~]# rm    -rf    /etc/yum.repos.d/* 2.挂载安装光盘(临时):[root@tianyun ~]# m ...

  3. javascrpt的string和Boolean类型

    string类型用于表示由零或多个16位unicode字符组成字符序列,即 字符串,字符可以由双引号(“)或单引号(‘)表示 tostring()与 string() 语法:str.tostring( ...

  4. hive排错

    找出错的那个hive实例,看错误日志: 点下面stdout,找Error

  5. Educational Codeforces Round 64 -C(二分)

    题目链接:https://codeforces.com/contest/1156/problem/C 题意:给出n个数和整形数z,定义一对数为差>=z的数,且每个数最多和一个数组成对,求最多有多 ...

  6. Solr 4.4.0利用dataimporthandler导入本地pdf、word等文档

    1. 创建本地目录 $ mkdir /usr/local/contentplatform/solr/solr/core1/file1 $ ls -lh total 88M -rw-r--r-- tnu ...

  7. mybatis 批量操作 ------持续更新

    mybatis 不存在则才进行添加 # 添加的 sql 语句insert into sys_link_post_user(post_id,user_id)# 进行批量添加 (若不需要可以取消 froe ...

  8. spark 运行报错:java.lang.AbstractMethodError

    报错日志如下: Caused by: java.lang.AbstractMethodError: sparkCore.JavaWordCount$2.call(Ljava/lang/Object;) ...

  9. 配置Bean的作用域

    一.Spring中Bean的5个作用域 在Spring 2.0及之后的版本中,Bean的作用域被划分为5种.如下 singleton  默认值.以单例模式创建Bean的实例,即容器中该Bean的实例只 ...

  10. Host xxx is not allowed to connect to this MariaDb server

    直接复制代码,无需修改 第一:// %:表示从任何主机连接到mysql服务器 GRANT ALL PRIVILEGES ON *.* TO 'user'@'%' IDENTIFIED BY 'pass ...