按照官网教程(http://www.django-rest-framework.org/tutorial/4-authentication-and-permissions/)走到最后一步验证时,命令窗口执行http POST http://127.0.0.1:8000/snippets/ code="print 123"后
{
"detail": "Authentication credentials were not provided."
}
这条结果是因为#视图类中的写法(1):
authentication_classes = (
BasicAuthentication,
)
permission_classes = (
IsAuthenticatedOrReadOnly,
)
若根据教程的写法(2)
permission_classes = (permissions.IsAuthenticatedOrReadOnly,
IsOwnerOrReadOnly,)
则返回如下结果:
{
"detail": "You do not have permission to perform this action."
}
根据版本不同视图类中的代码不同则提示不同,虽然无论哪种结果都代表没有权限,但还是建议用写法(1),因为写法(2)会导致执行http -a admin:password123 POST http://127.0.0.1:8000/snippets/ code="print 789"后仍然验证不通过返回上面的结果。
当这些设置完成后,执行http -a admin:password123 POST http://127.0.0.1:8000/snippets/ code="print 789"报错:
Exception Type: IntegrityError at /snippets/
Exception Value: NOT NULL constraint failed: snippets_snippet.owner_id
只需将视图类中post方法里面的
serializer.save()
改为:
serializer.save(owner=self.request.user)
来源:oschina
链接:https://my.oschina.net/u/4298485/blog/3937256