RestFramework之认证组件
生活随笔
收集整理的這篇文章主要介紹了
RestFramework之认证组件
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、認證組件的介紹
對于認證,我們一般有三種方式,即cookie, session,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
總結
以上是生活随笔為你收集整理的RestFramework之认证组件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python-mysql 基础知识记录
- 下一篇: java基础之XML