RestFramework之認證組件

一、認證組件的介紹

  對于認證,我們一般有三種方式,即cookie, session,token,

  1. cookie,是將信息存放在客戶端(瀏覽器上),信息不安全;
  2. session,把信息放在服務器數據庫中,但是要是信息量較大,對服務器的壓力就會大大增加;
  3. token采用每次用戶登陸后為其設置一個隨機字符串,即token值,用戶登陸之后,每次訪問都帶著這個token來訪問,服務端只需要驗證token值是否正確就可以,相對比較方便使用;

  所以,我們使用token做認證;

二、認證組件的使用

  首先需要編寫模型類這里已經準備好了,主要是需要user表與token表。

class User(models.Model):username = models.CharField(max_length=32)password = models.CharField(max_length=32)level = ((1, 'delux'),(2, 'vip'),(3, 'svip'))user_level = models.IntegerField(choices=level)class UserToken(models.Model):token = models.CharField(max_length=128)user = models.OneToOneField('User', on_delete=models.CASCADE)

  然后需要編寫登陸視圖

class Loginview(APIView):# parser_classes = [JSONParser, FormParser]def get(self, request):return render(request, 'login.html')def post(self, request):'''code:200:登陸成功201:用戶名或密碼錯誤202:其他錯誤:param request::return:'''res = {'code': None, 'user': None, 'message': None}try:username = request.data.get('username')password = request.data.get('password')user_obj = User.objects.filter(username=username, password=password).first()if user_obj:token_str = str(uuid.uuid4()).replace('-', '')UserToken.objects.update_or_create(user=user_obj, defaults={'token': token_str})res['code'] = '200'res['user'] = usernameres['message'] = '登陸成功'res['token'] = token_strelse:res['code'] = '201'res['message'] = '用戶名或密碼錯誤'except Exception as e:res['code'] = '202'res['message'] = e# print(request.data)# print(self.parser_classes)# res['succsess'] = request.data# res = json.dumps(res)return Response(res)

  準備工作做好之后我們來編寫認證類,在編寫之前需要導入相關的包與模型類

from rest_framework.authentication import BaseAuthentication
from rest_framework.exceptions import AuthenticationFailed
from app01.models import UserToken     # model中的模型類

  開始編寫認證類,

class UserAuth(BaseAuthentication):def authenticate(self, request):# 我們模仿get請求頁面token = request.query_params.get("token")  # 同request.GET.get("token")# 在token表中查找有么有這次請求攜帶的token值user_token_obj = models.UserToken.objects.filter(token=token).first()if user_token_obj:# 如果有值,說明是 正常用戶return user_token_obj.user, user_token_obj.token# 返回 當前的用戶對象,和當前的token值,這樣源碼就會幫我們賦值給request對象了,我們在后面的request中就可以使用了else:raise AuthenticationFailed("認證失敗!")

  視圖類中只需要加入一行代碼

authentication_classes = [UserAuth]  # 認證類

  這樣我們的認證組件就完成了。

?

  

轉載于:https://www.cnblogs.com/qq631243523/p/10098910.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/248852.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/248852.shtml
英文地址,請注明出處:http://en.pswp.cn/news/248852.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

圖解基于 Node.js 實現前后端分離 - CSDN博客

因為會上出了個意外,ppt圖片全部丟失,只好對著白板跟大家交流了半個多小時。由于我做演講不喜歡寫太多的文字,沒有圖片的情況下講漏了一些內容。這篇文章是我在會上分享內容對照ppt進行地整理。 基本介紹 首先從一個重要的概念“模板”說起…

java基礎之XML

目錄 java基礎之XML1. XML解析概述2. DOM4J介紹2.1 常用包2.2 內置元素2.2 Element類2.3 Attribute類2.4 常用操作3. 代碼演示3.1 DOM4J讀取xml文件3.2 DOM4J創建xml文件3.2 DOM4J修改xml文件java基礎之XML XML是一種通用的數據交換格式,它的平臺無關性、語言無關性、系統無關性…

CF176E Archaeology(set用法提示)

題目大意: 給一棵樹,每次激活或熄滅一個點,每次問這些點都聯通起來所需的最小總邊權 分析: 若根據dfs序給所有點排序,為$v1,v2,v3....vk$,那么答案就是$(dis(v1,v2)dis(v2,v3)...dis(vk-1,vk)dis(vk,v1))/2…

網上整理的對于Rest和Restful api的理解 - 那啥快看 - 博客園

一、什么是Rest? REST不是"rest"這個單詞,而是幾個單詞縮寫 -- REpresentational State Transfer 直接翻譯:表現層狀態轉移,但這個翻譯正常人根本看不懂,找到的一種最好理解的說法是,URL定位資源&#xff…

P1101 單詞方陣(DFS)

題目描述 給一n \times nnn的字母方陣,內可能蘊含多個“yizhong”單詞。單詞在方陣中是沿著同一方向連續擺放的。擺放可沿著 88個方向的任一方向,同一單詞擺放時不再改變方向,單詞與單詞之間可以交叉,因此有可能共用字母。輸出時,…

企業級rancher搭建Kubernetes(采用rancher管理平臺搭建k8s)

一、簡介 Rancher簡介 來源官方:https://www.cnrancher.com/ Rancher是一個開源的企業級容器管理平臺。通過Rancher,企業再也不必自己使用一系列的開源軟件去從頭搭建容器服務平臺。Rancher提供了在生產環境中使用的管理Docker和Kubernetes的全棧化容器部…

[工具]java_sublime的快速使用

目錄 使用 : 怎么運行: 調整字體: 使用 : 新建--->寫好代碼后-->另存為尾綴是.java的文件 怎么運行: 在你另存為的目錄下cmd調用控制臺輸入dos指令--->執行javac 文件名.java(有.java尾綴)(編譯為.class文件)--->java 文件名(沒有.class尾綴設計者認為執行的是…

基于SOA的銀行系統架構

Part-1 【簡述】 1.通過引入面向服務架構(SOA),企業服務總線(ESB),適配器(Adapter)及面向構件等技術,嘗試打造一個統一業務流程服務平臺,實現面向流程的服務…

一次前后端分離的實踐

前后端分離該如何做? 這個問題,不同的技術人員,由于所處的崗位不一樣,給出的答案都不一樣。 前后端分離的問題,不僅僅是技術上的選型問題,還涉及到整個團隊在認知、職責、流程上面重新定義的問題,這也是為…

queryList爬蟲獲取內容的幾種方法總結 queryList給抓取的內容增加html追加元素html 代碼實例...

//簡略內容: 1. $data1 $ql->find(.two img)->map(function($item){return $item->alt; }); // 等價下面這句話 $data2 $ql->find(.two img)->attrs(alt);2. $texts $ql->find(.two>a)->texts(); $htmls $ql->find(#one span)->htmls();3. $…

C++解析-外傳篇(1):異常處理深度解析

0.目錄 1.異常的最終處理 2.結束函數terminate() 3.小結 1.異常的最終處理 問題: 如果在main函數中拋出異常會發生什么? 如果異常不處理,最后會傳到哪里? 下面的代碼的輸出什么? 示例——異常的最終處理?&a…

《淺談架構之路:前后端分離模式》 - 山人行 - 博客園

前言:分離模式 對前后端分離研究了一段時間,恰逢公司有一個大項目決定嘗試使用前后端分離模式進行,便參與其中。該項目從2016年初立項至今,平平穩穩得度過,但也涌現出越來越多的問題,絕對不是說前后端分離模…

springboot快速集成swagger

今天技術總監說:小明,我們本次3.0改造,使用swagger2.0作為前后端分離的接口規范,它可以一鍵生成前后端的API,一勞永逸……小明:??? Spring Boot 框架是目前非常流行的微服務框架&…

php curl處理get和post請求

CURL 是一個利用URL語法規定來傳輸文件和數據的工具,支持很多協議,如HTTP、FTP、TELNET等。最爽的是,PHP也支持 CURL 庫。使用PHP的CURL 庫可以簡單和有效地去抓網頁。你只需要運行一個腳本,然后分析一下你所抓取的網頁&#xff0…

【Web】JavaWeb項目為什么我們要放棄jsp?為什么要前后端解耦?為什么要前后端分離?2.0版,為分布式架構打基礎。 - CSDN博客

前戲 前后端分離已成為互聯網項目開發的業界標準使用方式,通過nginxtomcat的方式(也可以中間加一個nodejs)有效的進行解耦, 并且前后端分離會為以后的大型分布式架構、彈性計算架構、微服務架構、多端化服務(多種客戶…

MongoDB升級導致啟動失敗

起因 最近項目使用MongoDB,但是作為一個技術菜鳥,NoSQL數據庫我還真不會用,于是我就在自己的阿里云服務器上安裝了一個MongoDB4.0.9。 現象 但是當我使用yum -y update升級以后,MongoDB無法啟動了,即使重裝刪除了MongDB的文件了還…

測者的測試技術手冊:揭開java method的一個秘密--巨型函數

揭開java method的一個秘密:巨型函數 相信,很多人都不知道Java的Method的上限為64K。本文將超過這個上限的函數叫做巨型函數。 巨型函數的問題 1、如果代碼超過了這個限制,Java編譯器就報"Code too large to complier"的錯誤。 2、…

前端攻略系列(二) - 前端各種面試題

幸運且光榮的被老大安排了一個任務 - “去整理些前端面試題”。年前確實不是招人的好時候,所以我們前端團隊經過了超負荷的運轉,終于堅持過了春節。春節以后就開始招人啦,這套題考察的目標就是基礎基礎再基礎,嘿嘿。 事先聲明&…

html 初識

一、web請求流程模擬 python編寫的簡易服務器應用程序 import socketserversocket.socket() ip_port (127.0.0.1,8080) server.bind(ip_port) server.listen()while 1:conn, addr server.accept()from_browser_msgconn.recv(1024)print(from_browser_msg)conn.send(bHTTP/1.1 …

Iframe的那些事

在web開發中,經常會用到iframe,難免會碰到需要在父窗口中使用iframe中的元素、或者在iframe框架中使用父窗口的元素 js 在父窗口中獲取iframe中的元素 1、 格式:window.frames["iframe的name值"].document.getElementByIdx_x(…