增加了用户管理和编辑的API及相应的测试
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import models, migrations
|
||||
import django.db.models.deletion
|
||||
import account.models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
@@ -18,10 +18,17 @@ class Migration(migrations.Migration):
|
||||
('password', models.CharField(max_length=128, verbose_name='password')),
|
||||
('last_login', models.DateTimeField(null=True, verbose_name='last login', blank=True)),
|
||||
('username', models.CharField(unique=True, max_length=30)),
|
||||
('real_name', models.CharField(max_length=30, null=True, blank=True)),
|
||||
('email', models.EmailField(max_length=254, null=True, blank=True)),
|
||||
('create_time', models.DateTimeField(auto_now_add=True)),
|
||||
('admin_type', models.IntegerField(default=0)),
|
||||
],
|
||||
options={
|
||||
'db_table': 'user',
|
||||
},
|
||||
managers=[
|
||||
('objects', account.models.UserManager()),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='AdminGroup',
|
||||
@@ -29,9 +36,4 @@ class Migration(migrations.Migration):
|
||||
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
||||
],
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='user',
|
||||
name='admin_group',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, to='account.AdminGroup', null=True),
|
||||
),
|
||||
]
|
||||
|
||||
@@ -21,6 +21,8 @@ class User(AbstractBaseUser):
|
||||
real_name = models.CharField(max_length=30, blank=True, null=True)
|
||||
# 用户邮箱
|
||||
email = models.EmailField(max_length=254, blank=True, null=True)
|
||||
# 用户注册时间
|
||||
create_time = models.DateTimeField(auto_now_add=True)
|
||||
# 0代表不是管理员 1是普通管理员 2是超级管理员
|
||||
admin_type = models.IntegerField(default=0)
|
||||
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
# coding=utf-8
|
||||
from rest_framework import serializers
|
||||
|
||||
from .models import User
|
||||
|
||||
|
||||
class UserLoginSerializer(serializers.Serializer):
|
||||
username = serializers.CharField(max_length=30)
|
||||
@@ -27,3 +29,18 @@ class UserChangePasswordSerializer(serializers.Serializer):
|
||||
old_password = serializers.CharField(max_length=30, min_length=6)
|
||||
new_password = serializers.CharField(max_length=30, min_length=6)
|
||||
|
||||
|
||||
class UserSerializer(serializers.ModelSerializer):
|
||||
|
||||
class Meta:
|
||||
model = User
|
||||
exclude = ["password"]
|
||||
|
||||
|
||||
class EditUserSerializer(serializers.Serializer):
|
||||
id = serializers.IntegerField()
|
||||
username = serializers.CharField(max_length=30)
|
||||
real_name = serializers.CharField(max_length=30)
|
||||
password = serializers.CharField(max_length=30, min_length=6, required=True)
|
||||
email = serializers.EmailField(max_length=254)
|
||||
admin_type = serializers.IntegerField(default=0)
|
||||
|
||||
@@ -144,6 +144,62 @@ class UserChangePasswordAPITest(APITestCase):
|
||||
self.assertEqual(response.data, {"code": 0, "data": u"用户密码修改成功!"})
|
||||
|
||||
|
||||
class UserAPITest(APITestCase):
|
||||
def setUp(self):
|
||||
self.client = APIClient()
|
||||
self.url = reverse("user_list_api")
|
||||
|
||||
def test_success_get_data(self):
|
||||
self.assertEqual(self.client.get(self.url).data["code"], 0)
|
||||
|
||||
def test_error_admin_type(self):
|
||||
response = self.client.get(self.url + "?admin_type=error")
|
||||
self.assertEqual(response.data, {"code": 1, "data": u"参数错误"})
|
||||
|
||||
def test_query_by_keyword(self):
|
||||
user1 = User.objects.create(username="test1", real_name="aa")
|
||||
user1.set_password("testaa")
|
||||
user1.save()
|
||||
|
||||
user2 = User.objects.create(username="test2", real_name="bb")
|
||||
user2.set_password("testbb")
|
||||
user2.save()
|
||||
|
||||
user3 = User.objects.create(username="test3", real_name="cc")
|
||||
user3.set_password("testcc")
|
||||
user3.save()
|
||||
|
||||
response = self.client.get(self.url + "?keyword=test1")
|
||||
self.assertEqual(response.data["code"], 0)
|
||||
|
||||
|
||||
class UserAdminAPITest(APITestCase):
|
||||
def setUp(self):
|
||||
self.client = APIClient()
|
||||
self.url = reverse("user_admin_api")
|
||||
user = User.objects.create(username="test")
|
||||
user.set_password("testaa")
|
||||
user.save()
|
||||
|
||||
def test_put_invalid_data(self):
|
||||
self.client.login(username="test", password="test")
|
||||
data = {"username": "test", "password": "testaa", "email": "60@qq.com", "admin_type": "2"}
|
||||
response = self.client.put(self.url, data=data)
|
||||
self.assertEqual(response.data["code"], 1)
|
||||
|
||||
def test_user_does_not_exist(self):
|
||||
data = {"id": 2, "username": "test0", "real_name": "test00",
|
||||
"password": "testaa","email": "60@qq.com", "admin_type": "2"}
|
||||
response = self.client.put(self.url, data=data)
|
||||
self.assertEqual(response.data, {"code": 1, "data": u"该用户不存在!"})
|
||||
|
||||
def test_success_user_edit_not_password(self):
|
||||
data = {"id": 1, "username": "test0", "real_name": "test00", "password": "aaaaaa",
|
||||
"email": "60@qq.com", "admin_type": "2"}
|
||||
response = self.client.put(self.url, data=data)
|
||||
self.assertEqual(response.data["code"], 0)
|
||||
|
||||
|
||||
@login_required
|
||||
def login_required_FBV_test_without_args(request):
|
||||
return HttpResponse("function based view test1")
|
||||
|
||||
@@ -1,13 +1,15 @@
|
||||
# coding=utf-8
|
||||
from django.contrib import auth
|
||||
from django.shortcuts import render
|
||||
from django.db.models import Q
|
||||
|
||||
from rest_framework.views import APIView
|
||||
|
||||
from utils.shortcuts import serializer_invalid_response, error_response, success_response
|
||||
from utils.shortcuts import serializer_invalid_response, error_response, success_response, paginate
|
||||
|
||||
from .models import User
|
||||
from .serializers import UserLoginSerializer, UsernameCheckSerializer, UserRegisterSerializer, \
|
||||
UserChangePasswordSerializer, EmailCheckSerializer
|
||||
UserChangePasswordSerializer, EmailCheckSerializer, UserSerializer, EditUserSerializer
|
||||
|
||||
|
||||
class UserLoginAPIView(APIView):
|
||||
@@ -114,3 +116,52 @@ class EmailCheckAPIView(APIView):
|
||||
return success_response(False)
|
||||
else:
|
||||
return serializer_invalid_response(serializer)
|
||||
|
||||
|
||||
class UserAPIView(APIView):
|
||||
def get(self, request):
|
||||
"""
|
||||
用户分页json api接口
|
||||
---
|
||||
response_serializer: UserSerializer
|
||||
"""
|
||||
user = User.objects.all().order_by("-create_time")
|
||||
admin_type = request.GET.get("admin_type", None)
|
||||
if admin_type:
|
||||
try:
|
||||
user = user.filter(admin_type=int(admin_type))
|
||||
except ValueError:
|
||||
return error_response(u"参数错误")
|
||||
keyword = request.GET.get("keyword", None)
|
||||
if keyword:
|
||||
user = user.filter(Q(username__contains=keyword) |
|
||||
Q(real_name__contains=keyword) |
|
||||
Q(email__contains=keyword))
|
||||
return paginate(request, user, UserSerializer)
|
||||
|
||||
|
||||
class UserAdminAPIView(APIView):
|
||||
def put(self, request):
|
||||
"""
|
||||
用户编辑json api接口
|
||||
---
|
||||
request_serializer: EditUserSerializer
|
||||
response_serializer: UserSerializer
|
||||
"""
|
||||
serializer = EditUserSerializer(data=request.DATA)
|
||||
if serializer.is_valid():
|
||||
data = serializer.data
|
||||
try:
|
||||
user = User.objects.get(id=data["id"])
|
||||
except User.DoesNotExist:
|
||||
return error_response(u"该用户不存在!")
|
||||
user.username = data["username"]
|
||||
user.real_name = data["real_name"]
|
||||
user.email = data["email"]
|
||||
user.admin_type = data["admin_type"]
|
||||
if data["password"]:
|
||||
user.set_password(data["password"])
|
||||
user.save()
|
||||
return success_response(UserSerializer(user).data)
|
||||
else:
|
||||
return serializer_invalid_response(serializer)
|
||||
|
||||
Reference in New Issue
Block a user