def

Django rest framework 的认证流程(源码分析)

陌路散爱 提交于 2021-01-19 07:36:59
一、基本流程举例: urlpatterns = [ url(r ' ^admin/ ' , admin.site.urls), url(r ' ^users/ ' , views.HostView.as_view()), ] urls from rest_framework.views import APIView from rest_framework.response import Response class HostView(APIView): def dispatch(self, request, *args, ** kwargs): """ 请求到来之后,都要执行dispatch方法,dispatch方法根据请求方式不同触发 get/post/put等方法 注意:APIView中的dispatch方法有好多好多的功能 """ return super().dispatch(request, *args, ** kwargs) def get(self, request, *args, ** kwargs): return Response( ' GET请求,响应内容 ' ) def post(self, request, *args, ** kwargs): return Response( ' POST请求,响应内容 ' ) def put(self, request

Django Rest Framework(认证、权限、限制访问频率)

倖福魔咒の 提交于 2021-01-19 07:28:19
一、 认证和授权 a. 用户url传入的token认证 from django.conf.urls import url, include from web.viewsimport TestView urlpatterns = [ url(r ' ^test/ ' , TestView.as_view()), ] urls.py # !/usr/bin/env python # -*- coding:utf-8 -*- from rest_framework.views import APIView from rest_framework.response import Response from rest_framework.authentication import BaseAuthentication from rest_framework.permissions import BasePermission from rest_framework.request import Request from rest_framework import exceptions token_list = [ ' sfsfss123kuf3j123 ' , ' asijnfowerkkf9812 ' , ] class TestAuthentication

django Rest Framework----认证/访问权限控制/访问频率限制 执行流程 Authentication/Permissions/Throttling 源码分析

心不动则不痛 提交于 2021-01-19 07:14:31
url: url(r ' books/$ ' ,views.BookView.as_view({ ' get ' : ' list ' , ' post ' : ' create ' })) 为例 当django启动的时候,会调用执行view.BookView.as_view()方法,拿到as_view的返回值view url(r ' books/$ ' ,View.view) 当用户访问books/的时候,会执行View.view(). 执行APIView.dispatch() 当用户访问books/时,django拿到request,然后对request进行了重新封装 并且进行用户认证 url(r ' books/$ ' ,View.view) ---> 执行 self.dispatch() APIView.dispatch() def dispatch(self, request, *args, ** kwargs): ... request = self.initialize_request(request, *args, ** kwargs) self.request = request try : self.initial(request, *args, ** kwargs) .... request = self.initialize_request(request,

6-MySQL高级-索引

拜拜、爱过 提交于 2021-01-19 07:12:30
索引 1. 思考 在图书馆中是如何找到一本书的? 一般的应用系统对比数据库的读写比例在10:1左右(即有10次查询操作时有1次写的操作), 而且插入操作和更新操作很少出现性能问题, 遇到最多、最容易出问题还是一些复杂的查询操作,所以查询语句的优化显然是重中之重 2. 解决办法 当数据库中数据量很大时,查找数据会变得很慢 优化方案:索引 3. 索引是什么 索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。 更通俗的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度 4. 索引目的 索引的目的在于提高查询效率 ,可以类比字典,如果要查“mysql”这个单词,我们肯定需要定位到m字母,然后从下往下找到y字母,再找到剩下的sql。如果没有索引,那么你可能需要把所有单词看一遍才能找到你想要的,如果我想找到m开头的单词呢?或者ze开头的单词呢?是不是觉得如果没有索引,这个事情根本无法完成? 5. 索引原理 除了词典,生活中随处可见索引的例子,如火车站的车次表、图书的目录等。它们的原理都是一样的,通过不断的缩小想要获得数据的范围来筛选出最终想要的结果,同时把随机的事件变成顺序的事件,也就是我们总是通过同一种查找方式来锁定数据。 数据库也是一样,但显然要复杂许多,因为不仅面临着 等值查询,还有范围查询(>、<、between

Django之天天生鲜项目

戏子无情 提交于 2021-01-18 06:32:26
准备工作 1、配置settings.py内置文件 注意: AUTH_USER_MODEL配置参数要在第一次迁移数据库之前配置,否则可能django的认证系统工作不正常 2、创建应用 3、配置主路由 一、用户注册 1、创建用户注册model模型 1)设置模型抽象类 2)进入user应用设置model 这里使用的是django内部AbstractUser用户类 2、显示用户注册页面 方法一:使用FBV请求处理 FBV: (function base views) 就是在视图里使用函数处理请求。 1)定义路由 import . import views url(r'^register$', views.register, name='register') 2)定义注册的视图函数 import re from django.shortcuts import render, redirect from .models import User from django.core.urlresolvers import reverse def register(request): '''显示注册页面''' if request.method == 'GET': return render(request, 'register.html') else: username = request.POST

关于access_token过期的解决办法

半世苍凉 提交于 2021-01-17 11:26:56
最近在做微信的发送模版消息,在测试的时候发现有的时候能够发送,有时候无法发送,查了相关的日志(日志记录发送结果很重要!!),看到了微信返回的错误消息,发现是 invalid credential, access_token is invalid or not latest hint: [QM1DJA0040vr22] ,原来是assess_token过期了。 我想了问题可能出现在下面几点: 测试服和线上服使用同一个app_id和secret来获取,可能会存在其中一方获取的token是旧的; 代码中没有统一的从一个地方来获取,而是直接从官网获取,导致不统一(看了代码,没有发现单独获取token的地方); 请求获取新的token的时候失败(应该不可能,因为请求成功以后会在redis中缓存两个小时,但是发现没过多久又再次失效,因此主要原因应该不是这个); 异步队列等待的时间较长,正好执行的时候token已经更新(应该不可能,获取token是在异步函数中执行,而不是通过函数参数来传递); 但是实在想不出问题确切的原因,也只能先在其基础上进行fix了。 我的做法:是在内层函数中,如果执行失败,并且是access_token过期的异常,则会在request的时候抛出专门的异常。在外围函数如果接收到了这个异常,则会抛出让装饰器接收到,装饰器收到这个异常后会删掉缓存中的token

理解scala的伴生类和伴生对象

*爱你&永不变心* 提交于 2021-01-16 06:40:21
初次接触这两个概念觉得怪怪的。写了段代码测试了一下,帮助自己理解。 scala里面没有 static 关键字。那么如果想实现static的效果要怎么做呢? ==》 可以使用伴生对象 在同一个scala文件中定义一个类,同时定义一个同名的object,那么它们就是伴生类和伴生对象的关系,可以互相直接访问私有的field。 伴生对象通常会使用apply函数定义伴生类的构造方法。 这样在创建伴生类的对象时就可以省略 new 关键字。 //定义一个猫咪类,带两个参数:猫咪的名字和年龄。 class Cat(val name:String,val age:Int) { //在类中定义一个方法,跟猫咪打招呼 。 def sayHello = println(s"hi,${name},I guess you are ${age} years old,and you have ${Cat.clawNum} claws.") // def sayHello = println(s"hi,${name},I guess you are ${age} years old.") } //定义一个猫咪的object,名字和猫咪类的类名必须完全一致。 object Cat{ //object的私有field,描述了爪子的数量。 private val clawNum = 4 // val clawNum =

python:socket网络编程

£可爱£侵袭症+ 提交于 2021-01-16 04:51:39
Socket   网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket, 又称为“套接字”。 模块 1 import socket 创建套接字 1 socket.socket([family[, type[, proto]]]) family: 套接字家族可以使AF_UNIX或者AF_INET type: 套接字类型可以根据是面向连接的还是非连接分为 SOCK_STREAM(基于TCP) 或 SOCK_DGRAM(基于UDP) protocol: 一般不填默认为0. 常用函数 sk.bind(address)   s.bind(address) 将套接字绑定到地址。address地址的格式取决于地址族。在AF_INET下,以元组(host,port)的形式表示地址。 sk.listen(backlog)   开始监听传入连接。backlog指定在拒绝连接之前,可以挂起的最大连接数量。 backlog等于5,表示内核已经接到了连接请求,但服务器还没有调用accept进行处理的连接个数最大为5 这个值不能无限大,因为要在内核中维护连接队列 sk.accept()   接受连接并返回(conn,address),其中conn是新的套接字对象,可以用来接收和发送数据。address是连接客户端的地址。   接收TCP 客户的连接(阻塞式)等待连接的到来

外企是如何在家办公的?

孤街醉人 提交于 2021-01-16 04:01:08
同学们2021年好,这是今年更新的第一篇文章,本来想一月一号就发一篇,但是一个是不知道写点什么,一个确实是有点忙 加我微信【coderAllen】的同学可能知道我已经在家办公很久了,因为始于去年的疫情缘故,2020年就断断续续的在家办公,虽然是在家办公听起来比较美好,但是从实际经验出发,在家办公其实是更累的,也更需要自控力 这个问题其实也是在朋友圈下大家的留言,有不少都是羡慕等,既然如此,那就说说在家办公的好与坏吧 首先说下我在家办公需要的配套装备 笔记本电脑一台 手机一部 办公桌及办公椅一套 需要的软件主要是 Skype: 主要的交流及开会工具 Teams:主要的项目计划及文档更新工具 Outlook:主要的收发邮件工具,可以说是最重要的软件了 SourceInsight: 看代码修改代码工具 Gerrit:团队审核及代码提交工具 基本就是我每天工作需要的全部工具,从这些工具就可以看出来,其实公司已经开始在推进在家办公流程,使用的基本全是支持多人协作办公的软件,比如微软全家桶系列和Gerrit流程 如果有同学公司想推进在家办公流程的也可以按照这样的软件配备 OK,介绍了使用了的软件开始进入正题,为什么开头我说在家办公反倒更累了,首先由于不用上下班的路程,确实节约了不少时间,在北京这种拥堵的大城市,每天的通行时间确实浪费了大把好时光,所以这部分挤出来的时间我一般会用来看书

2021-01-02:java中,MinorGC、MajorGC、FullGC 什么时候发生?

孤者浪人 提交于 2021-01-15 22:50:46
福哥答案2021-01-02: MinorGC 在年轻代空间不足的时候发生。 MajorGC 指的是老年代的 GC,出现 MajorGC 一般经常伴有 MinorGC。 FullGC 老年代无法再分配内存;元空间不足;显示调用 System.gc;像 CMS 一类的垃圾回收器,在 MinorGC 出现 promotion failure 时也会发生 FullGC。 [答案来自此链接:](https://www.zhihu.com/question/437493648) MinorGC 一般指清理 Young space (Eden and Survivor spaces) 的 GC。例如 G1GC 还有 ShenandoahGC 中的 YoungGC. 触发一般是: Allocation Failure:分配对象失败,空间不足. 内存分配流程,涉及到了 bump-the-pointer, TLAB,Allocation Prematch 这些机制, 请参考。 Survivor 区满了,需要拷贝。 不同的 GC 还会有自己个性化的触发机制,例如 G1GC 还有Shenandoah GC 的 TLAB 分配失败剩余空间大于最大浪费空间直接在Eden分配也失败,ZGC 的预热触发等等。 MajorGC 一般指清理 Tenured space 的 GC。例如 G1GC 还有