注册登陆
使用方式1:Django2.0
[ 1:N ]
- user/url.py
1 from django.urls import path 2 from user.views0 import UserTypeView, SingleUserView 3 4 app_name = 'user' 5 urlpatterns = [ 6 # 注意:::此处必须变量名定义名为pk,否则系统识别不到 7 path('singleuser/<int:pk>', SingleUserView.as_view(), name='user-detail'), 8 path('usertype/', UserTypeView.as_view(), name='usertype'), 9 ]
- user/models.py
1 from django.db import models 2 3 # 1 4 class UserType(models.Model): 5 name = models.CharField(max_length=20, unique=True) 6 add_time = models.DateTimeField(auto_now=True) 7 8 class Meta: 9 db_table = 'user_type' 11 def __str__(self): 12 return self.name 13 14 # n 15 class User(models.Model): 16 username = models.CharField(max_length=20, unique=True) 17 password = models.CharField(max_length=128) 18 phone = models.CharField(max_length=11) 19 add_time = models.DateTimeField(auto_now=True) 20 # related_name='users'的作用是:usertype.user_set.all ===> usertype.users.all 21 usertype = models.ForeignKey(to=UserType, on_delete=models.CASCADE, related_name='users', null=True) 22 23 class Meta: 24 db_table = 'user' 26 def __str__(self): 27 return self.username
- user/serializers.py
1 from django.contrib.auth.hashers import make_password 2 from rest_framework import serializers 3 from user.models import User, UserType 4 5 class UserSerializerSimple(serializers.ModelSerializer): 6 repassword = serializers.CharField(max_length=128, write_only=True) 7 8 class Meta: 9 model = User 10 fields = ['id', 'username', 'password', 'phone', 'repassword'] 11 12 def validate(self, attrs): 13 if attrs['password'] != attrs['repassword']: 14 raise serializers.ValidationError('两次密码不相等') 15 return attrs 16 17 def create(self, validated_data): 18 username = validated_data['username'] 19 password = validated_data['password'] 20 phone = validated_data['phone'] 21 # 密码加密 22 password = make_password(password) 23 user = User.objects.create(username=username, password=password, phone=phone) 24 return user
- user/views.py
1 from django.http import JsonResponse 2 from rest_framework.views import APIView 3 from user.models import User, UserType 4 from user.serializers import UserTypeSerializer, SingleUserSerializer, \ 5 UserSerializerSimple 6 7 class UserViewsSimple(APIView): 8 def get(self, request): 9 pass 10 def post(self, request): 11 user_serializer = UserSerializerSimple(data=request.data) 12 if user_serializer.is_valid(): 13 user_serializer.save() 14 return JsonResponse({'status': 200, 'user': user_serializer.data})
1 class UserTypeView(APIView): 2 def get(self, request): 3 usertypes = UserType.objects.all() 4 """ 5 将从数据库中查询到的数据在UserTypeSerializer中进行序列化。 6 序列化的是多个值时,需要添加many=True自动将usertypes转为列表类型 7 """ 8 serializer = UserTypeSerializer(usertypes, many=True, context={'request': request}) 9 data = { 10 'status': 200, 11 'types': serializer.data 12 } 13 return JsonResponse(data)
1 class SingleUserView(APIView): # 获取单个 2 def get(self, request, pk): 3 user = User.objects.get(pk=pk) 4 serializer = SingleUserSerializer(user, context={'request': request}) 5 data = { 6 'status': 200, 7 'types': serializer.data 8 } 9 return JsonResponse(data)