urls.py
urlpatterns = [ url(r'^user$',UserView.as_view()), # 在数据空中写入username和token url(r'^test',TestAuthView.as_view()), # 认证测试视图 http://127.0.0.1:8000/test?token=20609ddd01fe4faeb0ffe7d8d8c39881
]
视图
from django.shortcuts import render from rest_framework.views import APIView from rest_framework.response import Response from .models import UserInfo from utils.Auth import MyAuth import uuid # Create your views here. class UserView(APIView): def post(self, request): # 这相当于注册 username = request.data["username"] UserInfo.objects.create(username=username, token=uuid.uuid4()) return Response("ok") class TestAuthView(APIView): authentication_classes = [MyAuth,] # 这相当于登录的认证 def get(self, request): print(request.user) print(request.auth) return Response("认证测试")
自己写的认证类
from rest_framework.authentication import BaseAuthentication from rest_framework.exceptions import AuthenticationFailed from AuthDemo.models import UserInfo from rest_framework.response import Response class MyAuth(BaseAuthentication): def authenticate(self, request): # 第一步先拿到前端传过来的token token = request.query_params["token"] # 验证token是否存在 user_obj = UserInfo.objects.filter(token=token).first() if user_obj: return (user_obj, token) else: raise AuthenticationFailed("认证失败")