python工程师认证证书_python工程师-day83
1、drf 的用戶認證組件
(1)models
from django.db import models
# Create your models here.
class User(models.Model):
username=models.CharField(max_length=64)
password=models.CharField(max_length=64)
user_type=models.IntegerField(choices=((1,'超級用戶'),
(2,'普通用戶'),
(3,'的用戶')
))
class UserToken(models.Model):
token=models.CharField(max_length=64)
user=models.OneToOneField(to='user',on_delete=models.CASCADE)
(2)urls
from django.contrib import admin
from django.urls import path
from app01 import views
urlpatterns = [
path('admin/', admin.site.urls),
path('test/',views.test.as_view()),
]
(3)MyAuthentication
from rest_framework.authentication import BaseAuthentication
from rest_framework.exceptions import AuthenticationFailed
from app01.models import UserToken
class MyAuthentication(BaseAuthentication):
def authenticate(self, request):
# 認證邏輯 如果認證通過 返回兩個值
# 如果認證失敗 AuthenticationFailed異常
token=request.GET.get('token')
if token:
user_token=UserToken.objects.filter(token=token).first()
# 認證通過
if user_token:
return user_token.user,token
else:
raise AuthenticationFailed('認證失敗')
else:
raise AuthenticationFailed('請求地址中需要攜帶token')
(4) views
from django.shortcuts import render
import uuid
from app01.models import User
from app01 import models
# Create your views here.
from rest_framework.views import APIView
from app01.app_auth import MyAuthentication
from rest_framework.response import Response
class test(APIView):
def post(self,request):
username=request.data.get('username')
password=request.data.get('password')
user=User.objects.filter(username=username,password=password).first()
if user:
token = uuid.uuid4()
models.UserToken.objects.update_or_create(defaults={'token':token},user=user)
print('當前登錄的用戶',request.user.username)
return Response({'status':100,'msg':'登錄成功','token':token})
else:
return Response({'status':101,'msg':'用戶名或密碼錯誤'})
def get(self,request):
return Response({'status':100})
(5)局部配置認證
authentication_classes = [MyAuthentication]
(6)全局配置認證
REST_FRAMEWORK={
"DEFAULT_AUTHENTICATION_CLASSES":["app01.app_auth.MyAuthentication",]
}
總結
以上是生活随笔為你收集整理的python工程师认证证书_python工程师-day83的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据挖掘与python实践中国慕课答案_
- 下一篇: 严重的牙周病能矫正吗