django 之(四) --- 认证权限

注册登陆

使用方式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)

用户认证

用户权限 

猜你喜欢

转载自www.cnblogs.com/TMMM/p/11993710.html