diff --git a/account/serializers.py b/account/serializers.py index 659641de..af229fbd 100644 --- a/account/serializers.py +++ b/account/serializers.py @@ -10,3 +10,9 @@ class UserLoginSerializer(serializers.Serializer): class UsernameCheckSerializer(serializers.Serializer): username = serializers.CharField(max_length=30) + +class UserRegisterSerializer(serializers.Serializer): + username = serializers.CharField(max_length=30) + real_name = serializers.CharField(max_length=30) + password = serializers.CharField(max_length=30, min_length=6) + diff --git a/account/tests.py b/account/tests.py index d087e8fc..8a3ef0cb 100644 --- a/account/tests.py +++ b/account/tests.py @@ -55,3 +55,26 @@ class UsernameCheckTest(APITestCase): def test_username_does_not_exist(self): response = self.client.post(self.url, data={"username": "testtest123"}) self.assertEqual(response.data, {"code": 0, "data": False}) + + +class UserRegisterAPITest(APITestCase): + def setUp(self): + self.client = APIClient() + self.url = reverse("user_register_api") + + def test_invalid_data(self): + data = {"username": "test", "real_name": "TT"} + response = self.client.post(self.url, data=data) + self.assertEqual(response.data["code"], 1) + + def test_short_password(self): + data = {"username": "test", "real_name": "TT", "password": "qq"} + response = self.client.post(self.url, data=data) + self.assertEqual(response.data["code"], 1) + + def test_same_username(self): + User.objects.create(username="aa", real_name="ww") + data = {"username": "aa", "real_name": "ww", "password": "zzzzzzz"} + response = self.client.post(self.url, data=data) + self.assertEqual(response.data, {"code": 1, "data": u"用户名已存在"}) + diff --git a/account/views.py b/account/views.py index 8a90367c..35eace51 100644 --- a/account/views.py +++ b/account/views.py @@ -6,7 +6,7 @@ from rest_framework.views import APIView from utils.shortcuts import serializer_invalid_response, error_response, success_response from .models import User -from .serializers import UserLoginSerializer, UsernameCheckSerializer +from .serializers import UserLoginSerializer, UsernameCheckSerializer, UserRegisterSerializer class UserLoginAPIView(APIView): @@ -30,12 +30,26 @@ class UserLoginAPIView(APIView): return serializer_invalid_response(serializer) -class UserRegisterView(APIView): - def get(self, request): - pass - +class UserRegisterAPIView(APIView): def post(self, request): - pass + """ + 用户注册json api接口 + --- + request_serializer: UserRegisterSerializer + """ + serializer = UserRegisterSerializer(data=request.DATA) + if serializer.is_valid(): + data = serializer.data + try: + User.objects.get(username=data["username"]) + return error_response(u"用户名已存在") + except User.DoesNotExist: + user = User.objects.create(username=data["username"], real_name=data["real_name"]) + user.set_password(data["password"]) + user.save() + return success_response(u"注册成功!") + else: + return serializer_invalid_response(serializer) class UserChangePasswordView(APIView): diff --git a/oj/urls.py b/oj/urls.py index 04ae75f3..33d92840 100644 --- a/oj/urls.py +++ b/oj/urls.py @@ -3,7 +3,7 @@ from django.conf.urls import include, url from django.contrib import admin from django.views.generic import TemplateView -from account.views import UserLoginAPIView, UsernameCheckAPIView +from account.views import UserLoginAPIView, UsernameCheckAPIView, UserRegisterAPIView urlpatterns = [ url("^$", TemplateView.as_view(template_name="oj/index.html"), name="index_page"), @@ -11,6 +11,7 @@ urlpatterns = [ url(r'^admin/$', TemplateView.as_view(template_name="admin/index.html"), name="admin_index_page"), url(r'^login/$', TemplateView.as_view(template_name="oj/account/login.html"), name="user_login_page"), url(r'^api/login/$', UserLoginAPIView.as_view(), name="user_login_api"), + url(r'^api/register/$', UserRegisterAPIView.as_view(), name="user_register_api"), url(r'^api/username_check/$', UsernameCheckAPIView.as_view(), name="username_check_api"), url(r'^problem/(?P\d+)/$', "problem.views.problem_page", name="problem_page"),