drf 自帶token學習記錄

2022-05-26 10:42:08 字數 2728 閱讀 9776

...

'rest_framework.authtoken'

]

核心**

獲取token介面,傳遞使用者密碼

url(r'^api-token-auth/',obtain_auth_token),

class obtainauthtoken(apiview):

。。。。

serializer_class = authtokenserializer

def post(self, request, *args, **kwargs):

serializer = self.serializer_class(data=request.data,

context=)

serializer.is_valid(raise_exception=true)

user = serializer.validated_data['user']

token, created = token.objects.get_or_create(user=user)

return response()

驗證使用者密碼模組

class authtokenserializer(serializers.serializer):

username = serializers.charfield(label=_("username"))

password = serializers.charfield(

label=_("password"),

style=,

trim_whitespace=false

)def validate(self, attrs):

username = attrs.get('username')

password = attrs.get('password')

if username and password:

user = authenticate(request=self.context.get('request'),

username=username, password=password)

# the authenticate call simply returns none for is_active=false

# users. (assuming the default modelbackend authentication

# backend.)

if not user:

msg = _('unable to log in with provided credentials.')

raise serializers.validationerror(msg, code='authorization')

else:

msg = _('must include "username" and "password".')

raise serializers.validationerror(msg, code='authorization')

attrs['user'] = user

return attrs

二. 中介軟體解析token獲取使用者部分

default_authentication_classes 配置裡面預設呼叫 下面方法的 authenticate
##解析request的 header裡面的

知識點 中介軟體

rest_framework = 

class tokenauthentication(baseauthentication):
keyword = 'token'
model = none  ##繫結對應orm資料庫

def authenticate(self, request):

auth = get_authorization_header(request).split()

...

return self.authenticate_credentials(token)

#返回token對應的user

def authenticate_credentials(self, key):

model = self.get_model()

try:

token = model.objects.select_related('user').get(key=key)

except model.doesnotexist:

raise exceptions.authenticationfailed(_('invalid token.'))

if not token.user.is_active:

raise exceptions.authenticationfailed(_('user inactive or deleted.'))

return (token.user, token)

def get_model(self):

if self.model is not none:

return self.model

from rest_framework.authtoken.models import token

return token #返回取值的資料庫

DRF 使用者登入加 token

實現 使用者登入成功後,對應的 token 表建立一條對應登入使用者的 token 資料 models.py from django.db import models class userinfo models.model user type choices 1,普通使用者 2,管理員 3,超級使用...

Django和drf上傳檔案學習記錄

簡單的學習了django和drf上傳檔案 主要是 做乙個記錄。網頁原始碼 lang en charset utf 8 titletitle head enctype multipart form data action method post type file name file type sub...

DRF學習筆記 準備

drf即django rest framework,它提供了定義序列化器serializer的方法,可以快速根據 django orm 或者其它庫自動序列化 反序列化。好處 django可以渲染頁面和返回資料,但在特定的場景下僅需要返回資料即可,drf則提供了各種方法方便我們實現資料的增刪改查。在開...