python - 如何从 API 更改用户的密码
问题描述
我需要在 DRF 中准备一个允许更改用户密码的端点。所以我读了这篇文章: 如何在 Django Rest Framework 中更新用户密码?
但是,老实说,即使在阅读了那篇文章并在我的应用程序中实现了那篇文章中的代码之后,它仍然无法正常工作。我是 Django 和 Python 的新手,我不明白我做错了什么。你能帮我理解我做错了什么吗?
下面是我实现的代码:
序列化程序.py
from rest_framework import serializers
class ChangePasswordSerializer(serializers.Serializer):
"""
Serializer for password change endpoint.
"""
old_password = serializers.CharField(required=True)
new_password = serializers.CharField(required=True)
api.py
# Password Change API
class ChangePasswordAPI(generics.UpdateAPIView):
"""
An endpoint for changing password.
"""
serializer_class = ChangePasswordSerializer
model = User
permission_classes = (IsAuthenticated,)
def get_object(self, queryset=None):
obj = self.request.user
return obj
def update(self, request, *args, **kwargs):
self.object = self.get_object()
serializer = self.get_serializer(data=request.data)
if serializer.is_valid():
# Check old password
if not self.object.check_password(serializer.data.get("old_password")):
return Response({"old_password": ["Wrong password."]}, status=status.HTTP_400_BAD_REQUEST)
# set_password also hashes the password that the user will get
self.object.set_password(serializer.data.get("new_password"))
self.object.save()
return Response("Success.", status=status.HTTP_200_OK)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
网址.py
from django.urls import path, include
from .api import ChangePasswordAPI
from django.conf.urls import url
urlpatterns = [
url(r'^auth/password-change/(?P<pk>[0-9]+)$', ChangePasswordAPI.as_view()),
]
所以现在我在http://localhost:8000/auth/change-password/上发送 PUT, 正文如下:
{
"old_password": "password1",
"new_password": "password2"
}
我收到这条消息:
<h1>Not Found</h1>
<p>The requested resource was not found on this server.</p>
解决方案
auth/password-change/(?P<pk>[0-9]+)
您的视图与您正在请求的 URL 模式相关联auth/change-password
。请求应与 URL 模式匹配。
推荐阅读
- lua - 这样做的优化方式,所以它更快?
- python - 编写此程序的最有效方法是什么?(内有详情)
- jquery - Ajax 问题 [尝试在不刷新页面的情况下更新添加到购物车] - Laravel
- python - BeautifulSoup4 和 Pandas,按照表中的链接下载另一个表,将表连接到一个 Dataframe
- database - .Net Core IDataProtector 与敏感数据库列的始终加密?
- sql - 如何将字段名称分配给 AWS Athena SQL 中的 SQL 计数
- python - Python 同情符号
- java - 无法在 Eclipse 中移动组件 WindowBuilder
- curl - 如何让 curl 重试?
- npm - Vue-cli-build 失败并出现以下错误 ValidationError: child "navigateFallbackWhitelist"