2016-08-12 3 views
0

Ich versuche eine Benutzerregistrierung mit Django-Rest-Framework zu erstellen. Aber wenn ich meine url gehen bekomme ich diese Meldung:Django REST Framework Token Registrierung

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

Here's a screen capture.

Ist es für ein Zeichen zu fragen? Ich versuche den Benutzer zu registrieren, damit er an diesem Punkt nicht haben/brauchen sollte, oder?

Wohlgemerkt, ich bin mit meinem Browser einfach und einfach zu gehen

127.0.0.1:8000/register

Ich bin nicht um mit Winkel spielen und api des anfordernden, ich ging einfach zu meinem Browser, um zu sehen, was ich bekommen würde. Ich hatte erwartet, eine Form oder etwas zu sehen. Funktioniert es richtig und ich habe es nur falsch angesprochen?

Hier ist meine 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'),) 

mein 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()), 

] 

EDIT 1 settings.py

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

fügen Sie Ihre 'REST_FRAMEWORK' aus Ihrer Einstellungsdatei. – itzMEonTV

+0

@itzmeontv Ich habe es hinzugefügt. – ngx311

Antwort

1

Versuchen permission_classes Dekorateur entlang IsNotAuthenticated zu Ihrer Ansicht

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) 

Meine Empfehlung zum Hinzufügen: Arbeiten mit Based-Klasse Ansichten

+0

Ich bekomme immer noch einen HTTP 405 Fehler. und oben drauf steht immer noch 'GET register /' Es soll 'POST register /' oder? Jetzt atleast, obwohl ich einen Medientyp und ein Inhaltsfeld mit einem POST-Knopf habe, der vorher nicht dort war. Soll ich das sehen? [Hier ist der Screenshot] (http://imgur.com/a/CjJil) – ngx311

+1

@ ngx311 becase müssen Sie eine GET-Ansicht auf Ihrer Seite implementieren. Sie implementieren nur POST. – levi

+0

Oh okay. Ich bekomme den Dreh raus. Es fängt an, wie eine richtige API auszusehen. Ich bekomme immer noch "HTTP 400 BAD REQUEST" [http://imgur.com/vGr9apx](http://imgur.com/vGr9apx]). Es macht mir nichts aus, wird es immer noch funktionieren? Ich brauche nicht "HTTP 200", denke ich. – ngx311

Verwandte Themen