Django API view 登录认证

文件分类

url

from django.contrib import admin
from django.urls import path, re_path
from django.urls import include

urlpatterns = [
    re_path('^api/(?P<version>[v1|v2]\w+)/', include('app01.urls')),
]
from django.urls import path, re_path
from django.urls import include
from app01.views import account, coursehost, newspapers


urlpatterns = [
    re_path('login/$', account.LoginView.as_view()),
]

view

"""
* coding: utf-8

CreateTime:2019/12/17
Version: v1
DocName: account.py
Edit: Riven
Effect: Control the user  login
SourceStorageLocation: RivenShop / app01 / views / account.py
Modify and add function record:
        ModifyTime:
            1.
            2.
        Add function Time :
            1.
            2.

"""

from app01.models import *
from utils.response import *

import uuid
from rest_framework.views import APIView
from rest_framework.response import Response


class LoginView(APIView):
    """
    Interface for user authentication
    """

    def post(self, request, *args, **kwargs):
        """
        Authentification of user
        :param request: request correlation data
        :param args: URL transmit args
        :param kwargs: URL transmit kwargs
        """

        # acquire status object
        ret = TokenResponse()
        try:
            user = request.data.get('user')
            pwd = request.data.get('pwd')
            user = Account.objects.filter(username=user, password=pwd).first()
            if not user:
                ret.code = 1001
                ret.error = '用户名密码错误'
            else:
                uid = str(uuid.uuid4())
                UserAuthToken.objects.update_or_create(user=user, defaults={'token': uid})
                ret.token = uid

        except Exception as e:
            ret.code = 1003

        # ret.dict == return class init attr of dict
        return Response(ret.dict)

 

自定义状态码类:

"""
* coding: utf-8

CreateTime:2019/12/17
Version: v1
DocName: response.py
Edit: Riven

Effect: create status code  return view

SourceStorageLocation: RivenShop / utils / response.py

Modify and add function record:
        ModifyTime:
            1.
            2.
        Add function Time :
            1.
            2.

"""


class BaseResponse(object):

    def __init__(self):
        self.code = 1000
        self.data = None
        self.error = None

    @property
    def dict(self):
        return self.__dict__


class TokenResponse(BaseResponse):
    def __init__(self):
        super(BaseResponse).__init__()
        self.code = 1000
        self.token = None

猜你喜欢

转载自www.cnblogs.com/Rivend/p/12055315.html
今日推荐