rest_framework12:多登陸方式與自動簽發token/配置過期時間

多登陸方式與自動簽發token

views.py

1.繼承Viewset,方法里可以使用自定義login,更直觀。需要路由直接配置請方式

2. 序列化是直接對request數據處理,并從對象中獲取token

3.context可以儲存自定義數據

# 多登陸方式,自動簽發tokenfrom rest_framework.viewsets import ViewSet
from app02 import ser
class Login2View(ViewSet):# 這是登陸接口# 不用post寫 直接logindef login(self,request,*args,**kwargs):# 1 需要序列化的類login_ser=ser.LoginModelSerializer(data=request.data,context={'request':request})# 2 生成序列化對象# 3 調用序列化對象的is_validadlogin_ser.is_valid(raise_exception=True)token=login_ser.context.get('token')# 4 returnreturn Response({'status':100,'msg':'登陸成功','token':token,'username':login_ser.context.get('username')})

urls.py

指定請求方式和對應方法

urlpatterns = [path('login2view/', views.Login2View.as_view({'post':'login'})),
]

ser.py

1.因為請求數據可能是用戶名,郵箱,電話,所以這里使用自定義name來序列化該數據,然后進行判斷

2.name需要自定義的,用serializers.CharField。如果不聲明,會使用內置校驗,然后再進如?def validate會出錯。

3.fields 是請求數據的字段

4.自定義的校驗在“def validate”里面

5.使用jwt方法得到token,

payload=jwt_payload_handler(user) # 把user 傳入,得到payload
token=jwt_encode_handler(payload) # 把payload傳入,得到token

6.使用內置的self.context來儲存自定義數據,返回給視圖類。

from rest_framework import serializers
from api import models
# 正則
import re
from rest_framework.exceptions import ValidationError
from rest_framework_jwt.utils import jwt_encode_handler,jwt_payload_handlerclass LoginModelSerializer(serializers.ModelSerializer):name=serializers.CharField(max_length=32)class Meta:model=models.Userfields=['name','password']def validate(self, attrs):print(self.context)# 這里寫邏輯username=attrs.get('name') # 用戶名有三種方式password=attrs.get('password')# 通過判斷,username數據,查詢對應字段# 正則匹配,如果手機號if re.match('^1[3-9][0-9]{9}$',username):user=models.User.objects.filter(mobile=username).first()elif re.match('^.+@.+$',username):user=models.User.objects.filter(email=username).first()else:user=models.User.objects.filter(username=username).first()if user: #  存在用戶# 校驗密碼,因為是密文,要用check_passwordif user.check_password(password):payload=jwt_payload_handler(user) # 把user 傳入,得到payloadtoken=jwt_encode_handler(payload) # 把payload傳入,得到tokenself.context['token']=tokenself.context['username']=user.usernamereturn attrselse:raise ValidationError('密碼錯誤')else:raise ValidationError('用戶不存在')

配置過期時間

settings.py

import datetime
JWT_AUTH={'JWT_EXPIRATION_DELTA': datetime.timedelta(days=7),
}

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

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

相關文章

20165310_獲獎感想與Java階段性學習總結

獲獎感想與Java階段性學習總結 一、Learning By Doing ? 在此之前,其實我并沒有想到能夠成為小黃杉的第一批成員之一,喜悅之余,也感受到了許多的壓力。小黃杉一方面代表了老師對于我這一階段學習成果的肯定,但同時也是對我的督促…

chrome瀏覽器崩潰_不只是您:Chrome瀏覽器在Windows 10的2018年4月更新中崩潰

chrome瀏覽器崩潰If your computer is hanging or freezing after installing the Windows 10 April 2018 Update you’re not alone, and Microsoft is aware of the problem. 如果在安裝Windows 10 April 2018 Update之后計算機掛起或死機,您并不孤單,…

讀名老中醫之路筆記(二)

任應秋:我的治學門徑和方法 任應秋先生從幼讀經,十三經皆能成誦,屬于帶童子功的醫學家,他的醫學經驗: 一、讀經宜讀全本,解經宜先識字,讀經宜正音讀,強調對經典著作的朗讀和背誦&…

致敬青春歲月

昨天發生的一件神奇的事情。我們公司工會組織了一次小型的戶外團建,有機會認識一些其他部門同事,沒想到有一個同事小心地認出了我,然后還談起了關于.NET技術和社區的一些發展的歷史和故事。他在微軟工作的時間比我久,但時空交錯&a…

談談- declare-styleable屬性

在Android開發中,往往要用到自定義的控件來實現我們的需求或效果。在使用自定義 控件時,難免要用到自定義屬性,那怎么使用自定義屬性呢? 一、簡單使用: 1.在文件res/values/下新建attrs.xml屬性文件,中定義…

docker:自定義ubuntu/制作鏡像引用/ubuntu換源更新

一、需求 1. 制作一個圖像辨識的api,用到相同設置的ubuntu鏡像,但是每次制作都要更新ubuntu和下載tesseract浪費半個到一個小時下載,所以制作一個自定義ubuntu幾次鏡像大大提高開發效率。 2. 制作ubuntu過程時,可以調試tesserac…

jQuery 屬性和CSS

HTML代碼&#xff1a; <div id"div1">div1<p>1</p><p>2</p><p>3</p> </div> <div id"div2">div2</div> <div id"div3">div3</div>attr()設置節點的屬性 $("#div1…

facebook人臉照片_為什么您的Facebook照片看起來如此糟糕(以及您可以如何做)...

facebook人臉照片Facebook is a popular platform for sharing photos, even though it’s not a very good one. They prioritize fast loading images over high quality ones. You can’t stop it from happening, but you can minimize the quality loss. Facebook是一個受…

用C#自己動手寫個操作系統,爽!

自從C#的AOT編譯機制發布以來&#xff0c;有趣的項目越來越多&#xff0c;今天給大家推薦一個開源項目&#xff0c;用C#開發的64位操作系統。項目簡介這是一個使用.NET Native AOT技術編譯的C# 64位操作系統&#xff0c;系統的基礎功能基本都已經支持&#xff1a;網卡、多處理、…

JavaFX 學習筆記——窗口與控件

前言 如今比較流行的桌面gui框架有WPF、WinForm、Qt、javafx等。其中WPF和WinForm目前還只能在運行Winsows上。Qt(widget)是一個很強大的跨平臺C框架(不只是UI)&#xff0c;但用C寫界面實在有點蛋疼&#xff0c;且編譯出來的體積很大。 JavaFX是基于JAVA的開源桌面框架&#xf…

Linux 用戶名、主機添加背景色

文章參考&#xff1a;PS1應用之——修改linux終端命令行各字體顏色 Linux 用戶名、主機添加背景色&#xff0c;用于生產環境&#xff0c;這樣可以減少人為的誤操作。 1 [rootzhang ~]# tail /etc/bashrc 2 ……………… 3 export PS1"\[\e[37;40m\][\[\e[37;41m\]\u\[\e[3…

python 調用文件上傳圖片簡單例子

使用方法&#xff1a; python.exe .\test.py "fileD:\img\mark_1080.png" "matchWordListRUN" "urlhttp://192.168.0.37:8081/templateMatch" test.py import requests import sysif __name__ "__main__":print(參數個數為:, len(s…

解決網站在負載均衡環境下SESSION丟失的問題

在WEB場中,動態網頁往往會因為幾臺主機做了負載而產生SESSION丟失的問題&#xff0c;網上也有很多的介紹&#xff0c;我這里只將我經歷的過程給大家分享一下&#xff1a; 系統要運行在負載平衡的 Web 場環境中&#xff0c;而系統配置文件web.config中的Session狀態卻設置為InPr…

如何從手機或PC將游戲下載到PlayStation 4

PlayStation 4 games can be huge, and take hours to download. Thankfully, you can start downloading games even when you’re away from home. All you need is Sony’s official smartphone app, or a web browser on any PC. PlayStation 4游戲可能非常龐大&#xff0c…

CML更新 | 新增百度小程序、支付寶小程序

祝所有工程師小伙伴開工大吉&#xff0c;Beatles 團隊已經開始忙碌起來了。 幾個事情要向諸位匯報一下&#xff1a; 一、新增百度小程序、支付寶小程序 發布alpha版本支持百度小程序、支付寶小程序&#xff0c;已有項目可以無縫直接運行在新增平臺&#xff0c;歡迎安裝試用&…

C#中4種深拷貝方法介紹

概述為什么要用到深拷貝呢&#xff1f;比如我們建了某個類Person&#xff0c;并且實例化出一個對象&#xff0c;然后&#xff0c;突然需要把這個對象復制一遍&#xff0c;并且復制出來的對象要跟之前的一模一樣&#xff0c;來看下我們一般會怎么做。1、利用反射實現public stat…

kaggle入門項目:Titanic存亡預測(三)數據可視化與統計分析

---恢復內容開始--- 原kaggle比賽地址&#xff1a;https://www.kaggle.com/c/titanic 原kernel地址&#xff1a;A Data Science Framework: To Achieve 99% Accuracy Step 4: Perform Exploratory Analysis with Statistics 使用描述性與圖表分析數據&#xff0c;重點在于數據可…

docker遇到問題歸納

/bin/sh^M: bad interpreter #在win下編輯的時候&#xff0c;換行結尾是\n\r &#xff0c; 而在linux下 是\n&#xff0c;所以才會有 多出來的\r #可以用以下方式解決先在控制臺cd到報錯的目錄#編輯報錯的那個文件 vi xxx.sh#利用如下命令查看文件格式 :set ff 或 :set filef…

faster rcnn訓練過程講解

http://blog.csdn.net/u014696921/article/details/60321425

firefox 擴展_如何檢查您的擴展程序是否將停止與Firefox 57一起使用

firefox 擴展With Firefox 57, scheduled for release in November 14, 2017, Mozilla will end support for legacy extensions, and only support newer WebExtensions. Here’s how to check if your extensions will stop working—and how to keep using them after Novem…