Я бегу через учебник по адресу:Метод Django Angularjs 405 не допускается. thinkster.io учебник
https://thinkster.io/brewer/angular-django-tutorial/
я получил около 1/3-1/2 путь через него. Теперь я тестирую его, чтобы узнать, зарегистрирует ли он пользователя. Это не будет, каждый раз, когда я отправлю форму, она дает мне POST http://127.0.0.1:8000/api/v1/accounts/ 405 (METHOD NOT ALLOWED)
, я пропустил один и тот же учебник полдюжины раз, чтобы увидеть, где моя ошибка, но я не могу ее найти.
Я не% 100 положительный, где проблема, поэтому я опубликую наиболее вероятные файлы кода, которые могут быть проблемой.
authentication/views.py
from django.shortcuts import render
from rest_framework import permissions, viewsets
from authentication.models import Account
from authentication.permissions import IsAccountOwner
from authentication.serializers import AccountSerializer
class AccountViewSet(viewsets.ModelViewSet):
lookup_field = 'username'
queryset = Account.objects.all()
serializer_class = AccountSerializer
def get_permissions(self):
if self.request.method in permissions.SAFE_METHODS:
return (permissions.AllowAny(),)
if self.request.method == 'POST':
return (permissions.AllowAny(),)
return (permissions.IsAuthenticated(), IsAccountOwner(),)
def create(self, request):
serializer = self.serializer_class(data=request.DATA)
if serializer.is_valid():
account = Account.objects.create_user(**request.DATA)
account.set_password(request.DATA.get('password'))
account.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response({
'status': 'Bad request',
'message': 'Account could not be created with received data.'
}, status=status.HTTP_400_BAD_REQUEST)
static/javascripts/authentication.service.js
/**
* Authentication
* @namespace thinkster.authentication.services
*/
(function() {
'use strict';
angular
.module('thinkster.authentication.services')
.factory('Authentication', Authentication);
Authentication.$inject = ['$cookies', '$http'];
/**
* @namespace Authentication
* @returns {Factory}
*/
function Authentication($cookies, $http) {
/**
* @name Authentication
* @desc The Factory to be returned
*/
var Authentication = {
register: register
};
return Authentication;
////////////////////
/**
* @name register
* @desc Try to register a new user
* @param {string} username The username entered by the user
* @param {string} password The password entered by the user
* @param {string} email The email entered by the user
* @returns {Promise}
* @memberOf thinkster.authentication.services.Authentication
*/
function register(username, password, email) {
return $http.post('/api/v1/accounts/', {
username: username,
password: password,
email: email
});
}
}
})();
static/templates/register.html
<div class="row">
<div class="col-md-4 col-md-offset-4">
<h1>Register</h1>
<div class="well">
<form role="form" ng-submit="vm.register()">
<div class="form-group">
<label for="register__email">Email</label>
<input type="email" class="form-control" id="register__email" ng-model="vm.email" placeholder="ex. [email protected]" />
</div>
<div class="form-group">
<label for="register__username">Username</label>
<input type="text" class="form-control" id="register__username" ng-model="vm.username" placeholder="ex. john" />
</div>
<div class="form-group">
<label for="register__password">Password</label>
<input type="password" class="form-control" id="register__password" ng-model="vm.password" placeholder="ex. thisisnotgoogleplus" />
</div>
<div class="form-group">
<button type="submit" class="btn btn-primary">Submit</button>
</div>
</form>
</div>
</div>
</div>
И последнее:
static/javascripts/register.controller.js
/**
* Register controller
* @namespace thinkster.authentication.controllers
*/
(function() {
'use strict';
angular
.module('thinkster.authentication.controllers')
.controller('RegisterController', RegisterController);
RegisterController.$inject = ['$location', '$scope', 'Authentication'];
/**
* @namespace RegisterController
*/
function RegisterController($location, $scope, Authentication) {
var vm = this;
vm.register = register;
/**
* @name register
* @desc Register a new user
* @memberOf thinkster.authentication.controllers.RegisterController
*/
function register() {
Authentication.register(vm.email, vm.password, vm.username);
}
}
})();
И, если этого не достаточно кода, проект также хранится в: https://github.com/Taylor-Allred/thinkster-django-angular-boilerplate
Извиняюсь за стену текста/кода, любая помощь будет оценена.
Я ценю ответ, я дам это попробовать позже сегодня вечером. – TaylorAllred
Just FYI - Сегодня я завернул учебник и получил (почти полностью) работу; сейчас проблема только в том, что сообщения иногда не отображаются в профиле. Проект находится в [https://github.com/olsonk/thinkster-django-angular-boilerplate.git](https://github.com/olsonk/thinkster-django-angular-boilerplate.git). Надеюсь, что это полезно. Я нашел несколько ошибок в шаблоне, которым потребовалось довольно много времени, чтобы найти и исправить, поэтому он может служить источником двойной проверки. – olsonk