【补充】用户多方式登陆

Dream-Z / 2023-08-01 / 原文

【补充】用户多方式登陆

【模型表】

from django.db import models

# Create your models here.
from django.contrib.auth.models import AbstractUser


class UserInfo(AbstractUser):

    phone = models.CharField(max_length=32)

【序列化类】


【视图】

from django.shortcuts import render

# Create your views here.
from rest_framework.viewsets import ViewSet
from app01 import models
from app01.serializers.user_serializer import UserSerializer
from rest_framework.response import Response


class UserView(ViewSet):
    back_dict = {"code": 200, "msg": ""}

    def login(self, request):
        # (1)得到序列化类
        user_ser = UserSerializer(data=request.data)
        if user_ser.is_valid():
            user = user_ser.user
            token = user_ser.token
            self.back_dict["token"] = token
            self.back_dict["msg"] = "登陆成功"
            self.back_dict["username"] = user.username
            return Response(self.back_dict)
        else:
            self.back_dict["code"] = 101
            self.back_dict["msg"] = user_ser.errors

            return Response(self.back_dict)

【路由】

from django.contrib import admin
from django.urls import path
from app01 import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('login/', views.UserView.as_view({
        "post": "login"
    })),
]

【配置文件】

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app01.apps.App01Config',
    'rest_framework'
]


LANGUAGE_CODE = 'zh-hans'

TIME_ZONE = 'Asia/Shanghai'

USE_I18N = True

USE_L10N = True

USE_TZ = False

AUTH_USER_MODEL = 'app01.UserInfo'