1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
| from django.db import models
class User(models.Model): username = models.CharField(max_length=32) password = models.CharField(max_length=32) user_type = models.IntegerField(choices=((1, '超级用户'), (2, '普通用户'), (3, '二笔用户')))
class UserToken(models.Model): user = models.OneToOneField(to='User', on_delete=models.CASCADE) token = models.CharField(max_length=64)
from rest_framework import serializers from app01 import models class UserSerializer(serializers.ModelSerializer): class Meta: model = models.User fields = '__all__'
import uuid from app01 import models from app01 import serializer from rest_framework.viewsets import ViewSetMixin from rest_framework.generics import CreateAPIView from rest_framework.decorators import action from rest_framework.response import Response
class UserView(ViewSetMixin, CreateAPIView): queryset = models.User.objects.all() serializer_class = serializer.UserSerializer
@action(methods=['POST'], detail=False) def login(self, request): username = request.data.get('username') password = request.data.get('password') user = models.User.objects.filter(username=username, password=password).first() token = uuid.uuid4() models.UserToken.objects.update_or_create(defaults={'token': token}, user=user) if user: return Response({'msg': '登录成功', "token": token}) else: return Response({'status': 101, 'msg': '用户名或密码错误'})
from django.contrib import admin from django.urls import path, include from rest_framework.routers import SimpleRouter from app01 import views
router = SimpleRouter() router.register('user', views.UserView) urlpatterns = [ path('admin/', admin.site.urls), path('api/', include(router.urls)), ]
|