...'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()
...#返回token對應的userreturn self.authenticate_credentials(token)
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則提供了各種方法方便我們實現資料的增刪改查。在開...