From b7280719ac9b093273f23525a47b335ff0b4160b Mon Sep 17 00:00:00 2001 From: hohoTT <609029365@qq.com> Date: Mon, 3 Aug 2015 19:54:55 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=BF=AE=E6=94=B9=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E5=AF=86=E7=A0=81=E5=92=8C=E5=AF=B9=E5=BA=94=E7=9A=84?= =?UTF-8?q?API=E6=B5=8B=E8=AF=95=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- account/serializers.py | 6 ++++++ account/tests.py | 21 +++++++++++++++++++++ account/views.py | 26 ++++++++++++++++++++------ oj/urls.py | 3 ++- 4 files changed, 49 insertions(+), 7 deletions(-) diff --git a/account/serializers.py b/account/serializers.py index af229fbd..41634b7a 100644 --- a/account/serializers.py +++ b/account/serializers.py @@ -16,3 +16,9 @@ class UserRegisterSerializer(serializers.Serializer): real_name = serializers.CharField(max_length=30) password = serializers.CharField(max_length=30, min_length=6) + +class UserChangePasswordSerializer(serializers.Serializer): + username = serializers.CharField(max_length=30) + old_password = serializers.CharField(max_length=30, min_length=6) + new_password = serializers.CharField(max_length=30, min_length=6) + diff --git a/account/tests.py b/account/tests.py index 8a3ef0cb..90e5d125 100644 --- a/account/tests.py +++ b/account/tests.py @@ -78,3 +78,24 @@ class UserRegisterAPITest(APITestCase): response = self.client.post(self.url, data=data) self.assertEqual(response.data, {"code": 1, "data": u"用户名已存在"}) + +class UserChangePasswordAPITest(APITestCase): + def setUp(self): + self.client = APIClient() + self.url = reverse("user_change_password_api") + User.objects.create(username="test", password="aaabbb") + + def test_error_old_password(self): + data = {"username": "test", "old_password": "aaaccc", "new_password": "aaaddd"} + response = self.client.post(self.url, data=data) + self.assertEqual(response.data, {"code": 1, "data": u"密码不正确,请重新修改!"}) + + def test_invalid_data_format(self): + data = {"username": "test", "old_password": "aaa", "new_password": "aaaddd"} + response = self.client.post(self.url, data=data) + self.assertEqual(response.data["code"], 1) + + def test_username_does_not_exist(self): + data = {"username": "test1", "old_password": "aaabbb", "new_password": "aaaddd"} + response = self.client.post(self.url, data=data) + self.assertEqual(response.data["code"], 1) \ No newline at end of file diff --git a/account/views.py b/account/views.py index 35eace51..dd05874b 100644 --- a/account/views.py +++ b/account/views.py @@ -6,7 +6,8 @@ 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, UserRegisterSerializer +from .serializers import UserLoginSerializer, UsernameCheckSerializer, UserRegisterSerializer, \ + UserChangePasswordSerializer class UserLoginAPIView(APIView): @@ -52,12 +53,25 @@ class UserRegisterAPIView(APIView): return serializer_invalid_response(serializer) -class UserChangePasswordView(APIView): - def get(self, request): - pass - +class UserChangePasswordAPIView(APIView): def post(self, request): - pass + """ + 用户修改密码json api接口 + --- + request_serializer: UserChangePasswordSerializer + """ + serializer = UserChangePasswordSerializer(data=request.DATA) + if serializer.is_valid(): + data = serializer.data + user = auth.authenticate(username=data["username"], password=data["old_password"]) + if user: + user.set_password(data["new_password"]) + user.save() + return success_response(u"用户密码修改成功!") + else: + return error_response(u"密码不正确,请重新修改!") + else: + return serializer_invalid_response(serializer) class UsernameCheckAPIView(APIView): diff --git a/oj/urls.py b/oj/urls.py index 33d92840..fc652b32 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, UserRegisterAPIView +from account.views import UserLoginAPIView, UsernameCheckAPIView, UserRegisterAPIView, UserChangePasswordAPIView urlpatterns = [ url("^$", TemplateView.as_view(template_name="oj/index.html"), name="index_page"), @@ -12,6 +12,7 @@ urlpatterns = [ 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/change_password/$', UserChangePasswordAPIView.as_view(), name="user_change_password_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"),