Django REST框架令牌注册

时间:2016-08-12 06:22:02

标签: python django django-rest-framework

我正在尝试使用Django-Rest-Framework创建用户注册。但是当我转到我的网址时,我收到了这条消息:

{ "detail": "Authentication credentials were not provided." }

Here's a screen capture.

是否要求代币?我正在尝试注册用户,所以此时不​​应该/需要一个用户吗?

请注意,我只是使用我的浏览器而只是去

  

127.0.0.1:8000/register

我没有玩角度和请求api,我只是去我的浏览器注册/看看我会得到什么。我期待看到一个表格或东西。它是否正常工作,我只是以错误的方式访问它?

这是我的models.py

@receiver(post_save, sender=settings.AUTH_USER_MODEL)
def create_auth_token(sender, instance=None, created=False, **kwargs):
    if created:
        Token.objects.create(user=instance)

class CustomUser(AbstractBaseUser, PermissionsMixin):
    email = models.EmailField('email address', unique=True, db_index=True)
    password1 = models.CharField(max_length=50)
    username = models.CharField('username', max_length=50, unique=True, db_index=True)
    image = models.FileField(upload_to='photos', null=True, blank=True)
    joined = models.DateTimeField(auto_now_add=True)
    is_active = models.BooleanField(default=True)
    is_admin = models.BooleanField(default=False)
    date_joined = models.DateTimeField(_('date joined'), default=timezone.now)
    friends = []

    USERNAME_FIELD = 'username'
    REQUIRED_FIELDS = []

    objects = CustomUserManager()

    def __unicode__(self):
    return self.username

    class Meta:
        unique_together = (('username', 'password1'),)

my views.py

@api_view(['POST'])
def create_auth(request):
    serialized = CustomUserSerializer(data=request.DATA)
    if serialized.is_valid():
        CustomUser.objects.create_user(
            serialized.init_data['email'],
            serialized.init_data['username'],
            serialized.init_data['password1']
        )
        return Response(serialized.data, status=HTTP_201_CREATED)
    else:
        return Response(serialized._errors, status=HTTP_400_BAD_REQUEST)

urls.py

router = DefaultRouter()
router.register(r'friends', FriendViewSet)
router.register(r'posts', PostViewSet, 'Post')

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^', include(router.urls)),
    url(r'^users/$', UserView.as_view()),
    url(r'^add_friend/$', add_friend),
    url(r'^register', create_auth), # This is the url I'm trying to access.
    url(r'^api-token-auth/$', ObtainAuthToken.as_view()),
    url(r'^auth/', include('rest_framework.urls', namespace='rest_framework')),
    url(r'^logout/$', Logout.as_view()),

]

编辑1 settings.py

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
       'rest_framework.authentication.TokenAuthentication',
       'rest_framework.authentication.SessionAuthentication',
   ),
   'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated',
   ),
}

1 个答案:

答案 0 :(得分:1)

尝试将permission_classes装饰器沿IsNotAuthenticated添加到您的视图

from authentication.permissions import IsNotAuthenticated


@api_view(['POST'])
@permission_classes((IsNotAuthenticated,))
def create_auth(request):
    serialized = CustomUserSerializer(data=request.DATA)
    if serialized.is_valid():
        CustomUser.objects.create_user(
            serialized.init_data['email'],
            serialized.init_data['username'],
            serialized.init_data['password1']
        )
        return Response(serialized.data, status=HTTP_201_CREATED)
    else:
        return Response(serialized._errors, status=HTTP_400_BAD_REQUEST)

我的推荐:使用基础类视图