Python认证-权限
生活随笔
收集整理的這篇文章主要介紹了
Python认证-权限
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
認證
# 登錄認證---》某個接口必須登錄后才能房屋 # 登錄接口---》登錄成功返回隨機字符串---》攜帶隨機字符串【認證】 通過,再繼續訪問某個接口 # 讀APIView源碼時,三大認證---》視圖類的方法之前執行的----》drf提供了很方便的寫認證# 寫一個登錄接口-用戶表,用戶token表-前端傳入用戶名密碼----》視圖類---》登錄方法---》校驗用戶名密碼是否正確,如果正確 生成隨機字符串存入數據庫---》把隨機字符串返回給前端# 隨便寫個接口---》登錄后才能訪問 # 寫認證類-第一步:寫一個類,繼承BaseAuthentication-第二步:在類中重寫authenticate方法u-第三步:在方法中做驗證,如果通過,返回兩個值,如果不通過,拋AuthenticationFailed的異常# 使用認證類-局部使用-->視圖類中class BookView(APIView):authentication_classes = [LoginAuth,]-全局使用---》配置文件REST_FRAMEWORK = {# 全局使用認證類'DEFAULT_AUTHENTICATION_CLASSES':['app01.auth.LoginAuth',]}-局部禁用class BookView(APIView):authentication_classes = []# 前端調用接口時 http://127.0.0.1:8000/user/books?token=27954a0e-9b0b-442d-8aff-839ec9f709601.1登錄接口
模型類
class User(models.Model):username = models.CharField(max_length=32)password = models.CharField(max_length=32) class UserToken(models.Model):token = models.CharField(max_length=32) # 用戶登錄成功簽發的隨機字符串user = models.OneToOneField(to='User',on_delete=models.CASCADE)路由
from rest_framework.routers import SimpleRouter from .views import UserView,BookView router=SimpleRouter() router.register('user',UserView,'user') urlpatterns = [ ] urlpatterns+=router.urls視圖類
class UserView(ViewSet):authentication_classes = [] # 局部禁用# 127.0.0.1:8080/user/user/login--->post@action(methods=['post', ], detail=False)def login(self, request):# 取出用戶名密碼---》去數據庫查詢---》有就登錄成功(生成隨機字符串存入數據),沒有就登錄失敗username = request.data.get('username')password = request.data.get('password')user = User.objects.filter(username=username, password=password).first()if user:# 登錄成功# 生成一個隨機字符串---》uuid--》生成一個隨機不重復的值token = str(uuid.uuid4()) # python 動態強類型# 存到UserToken表中---》兩種情況:之前有了就更新,之前沒有就新增# 有就更新,沒有就修改# defaults=None, **kwargs:傳入的去查詢,如果能查到使用defaults給的更新UserToken.objects.update_or_create(user=user, defaults={'token': token})# UserToken.objects.update_or_create( defaults={'token': token},kwargs={'user':user})return Response({'code': 100, 'msg': '登錄成功', 'token': token})else:return Response({'code': 101, 'msg': '用戶名或密碼錯誤'})1.2認證類
from rest_framework.authentication import BaseAuthentication from rest_framework.exceptions import AuthenticationFailed from .models import UserToken class LoginAuth(BaseAuthentication):def authenticate(self, request):# 做驗證,驗證用戶是否登錄# 放到請求地址中/請求頭中token=request.query_params.get('token')# 去數據庫查 token在不在user_token=UserToken.objects.filter(token=token).first()if user_token:# 驗證通過了,返回兩個值,第一個值是當前登錄用戶,第二個值是tokenreturn user_token.user,tokenelse:# 驗證失敗raise AuthenticationFailed('小伙子,您沒有登錄,不能訪問')權限
# 登錄成功了,但是有的接口區分權限,有的人有權限,有的人沒權限 # 用戶表新增一個 用戶類型字段:超級管理員,普通管理員,普通用戶# 權限類的寫法-第一步:寫一個類,繼承BasePermission-第二步:重寫has_permission方法-第三步:在has_permission中,進行權限的判斷,如果有權限,返回True,如果沒有權限,返回False,返回的中文提示信息,使用message字段標識#權限類的使用-局部使用-->視圖類中class BookView(APIView):permission_classes = [PermissionAuth,]-全局使用---》配置文件REST_FRAMEWORK = {# 全局使用認證類 'DEFAULT_PERMISSION_CLASSES':['app01.auth.PermissionAuth',]}-局部禁用class BookView(APIView):permission_classes = []補充
# python 是動態強類型語言 # go 是靜態強類型語言 # java 是靜態強類型語言---》隱士類型轉換 # js 是動態弱類型語言# 動態:解釋型語言 # 強弱指的是:數據類型強:不同類型之間不允許之間運算 # 弱類型:不同類型之間不需要轉換可以之間運算# 健壯性----魯棒性總結
以上是生活随笔為你收集整理的Python认证-权限的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 蓝桥杯三体攻击
- 下一篇: android日志管理最佳策略,【日志框