我正在使用Django REST框架编写REST API 。该API将成为社交移动应用程序的后端。在学习了本教程之后,我可以序列化所有模型,并且能够创建新资源并对其进行更新。
我正在使用AuthToken进行身份验证。
我的问题是:
获得/users资源后,我希望应用程序用户能够注册。因此,拥有像这样的单独资源/register还是允许匿名用户将其发布到/users新资源更好?
/users
/register
此外,有关权限的一些指导也将非常有用。
由于我的序列化程序不希望显示/检索密码,因此我继续进行了自己的自定义视图来处理注册。我使该URL与/ users资源不同。
我的网址配置:
url(r'^users/register', 'myapp.views.create_auth'),
我的看法:
@api_view(['POST']) def create_auth(request): serialized = UserSerializer(data=request.DATA) if serialized.is_valid(): User.objects.create_user( serialized.init_data['email'], serialized.init_data['username'], serialized.init_data['password'] ) return Response(serialized.data, status=status.HTTP_201_CREATED) else: return Response(serialized._errors, status=status.HTTP_400_BAD_REQUEST)
我可能是错的,但是似乎你不需要限制此视图的权限,因为你想要未经身份验证的请求…
Django REST Framework 3 允许create序列化程序中的override 方法:
create
from rest_framework import serializers from django.contrib.auth import get_user_model # If used custom user model UserModel = get_user_model() class UserSerializer(serializers.ModelSerializer): password = serializers.CharField(write_only=True) def create(self, validated_data): user = UserModel.objects.create( username=validated_data['username'] ) user.set_password(validated_data['password']) user.save() return user class Meta: model = UserModel # Tuple of serialized model fields (see link [2]) fields = ( "id", "username", "password", )
从继承的类的序列化字段ModelSerializer必须在MetaDjango Rest Framework v3.5和最新版本中明确声明。
ModelSerializer
Meta
文件api.py:
from rest_framework import permissions from rest_framework.generics import CreateAPIView from django.contrib.auth import get_user_model # If used custom user model from .serializers import UserSerializer class CreateUserView(CreateAPIView): model = get_user_model() permission_classes = [ permissions.AllowAny # Or anon users can't register ] serializer_class = UserSerializer