【发布时间】:2021-03-28 01:40:17
【问题描述】:
我有一个 Django 应用程序,它已经有一个用于更改密码的 Web 界面。它使用django.contrib.auth 函数和django.views.generic.UpdateView。代码如下:
class PasswordChangeView(LoginRequiredMixin, generic.UpdateView):
form_class = PasswordChangeForm
template_name = 'form.html'
input_value = 'update password'
def post(self, request, *args, **kwargs):
form = PasswordChangeForm(request.user, request.POST)
if form.is_valid():
user = form.save()
update_session_auth_hash(request, user) # Important!
try:
request.user.auth_token.delete() # Important!
except (AttributeError, ObjectDoesNotExist):
pass
messages.success(request, 'Your password was successfully updated!')
return redirect('/')
else:
messages.error(request, 'Please correct the error below.')
def get(self, request, **kwargs):
form = PasswordChangeForm(request.user)
return render(request, self.template_name, {'form': form, 'input_value': self.input_value})
以上代码在 Web 界面中运行良好。现在我想实现 REST API 来更改密码。我知道我可以创建APIView/viewset 和serializer 来做到这一点(就像this 问题的答案),但它会违反DRY 原则。鉴于已经有一个功能齐全的 Web 界面,实现 REST API 界面的最佳方式是什么?
【问题讨论】:
标签: python django django-rest-framework django-views