1. 程式人生 > >framework —— auth認證

framework —— auth認證

ams setting hide sts exceptio framework con play self

framework —— auth認證

1.目錄結構

  技術分享圖片

2.urls.py

from django.conf.urls import url
from django.contrib import admin
from app02 import views as app02_view


urlpatterns = [
    url(r^admin/, admin.site.urls),
    url(r^hosts/,app02_view.HostView.as_view()),
    url(r^auth/$,app02_view.AuthView.as_view())
]

3.models.py

from django.db import models

# Create your models here.


class Userinfo(models.Model):
    username = models.CharField(max_length=32)
    password = models.CharField(max_length=64)

    token = models.CharField(max_length=64,null=True)

4.views.py

技術分享圖片
from django.shortcuts import render,HttpResponse
from rest_framework.views import APIView from rest_framework.request import Request from rest_framework.exceptions import APIException from rest_framework.response import Response import time import hashlib # Create your views here. from app02 import models # class MyAuthentication(object): # def authenticate(self,request):
# token = request.query_params.get(‘token‘) # if token == ‘ASSDSA‘: # return (‘uuuuuuuuuuu‘,‘aaaaaaaaaaa‘) # raise APIException(‘認證失敗‘) class AuthView(APIView): authentication_classes = [] def get(self,request): ‘‘‘ 接收用戶名和密碼 :param request: :return: ‘‘‘ ret ={"code":1000,"msg":None} user = request.query_params.get(user) pwd = request.query_params.get(pwd) user_obj = models.Userinfo.objects.filter(username=user,password=pwd).first() if not user_obj: ret[code] = 1001 ret[msg] = "用戶名或密碼錯誤" return Response(ret) #創建隨機字符串 ctime = time.time() key = "%s|%s"%(user,pwd) m = hashlib.md5() m.update(key.encode(utf-8)) token = m.hexdigest() #保存到數據 user_obj.token = token user_obj.save() ret[token] = token return Response(ret) class HostView(APIView): def get(self,request,*args,**kwargs): self.dispatch print(request.user) print(request.auth) return Response(主機列表)
View Code

5.utils.py

from django.shortcuts import render,HttpResponse
from rest_framework.views import  APIView
from rest_framework.request import Request
from rest_framework.exceptions import APIException
from rest_framework.response import Response
from app02 import models




class MyAuthentication(object):
    def authenticate(self,request):
        token = request.query_params.get(token)
        obj = models.Userinfo.objects.filter(token=token).first()
        if obj:
            return obj(obj.username,obj)
        raise  APIException(用戶認證認證失敗)

6.settings.py

RESTFRAMEWORK  = {
    UNAUTHENTICATED_USER:None,
    UNAUTHENTICATED_TOKEN:None,
    "DEFAULT_AUTHENTICATION_CLASSES":[
        "app02.utils.MyAuthentication",
    ]
}

技術分享圖片

framework —— auth認證