Это мой URLS.py:
from django.conf.urls import include, url
from django.contrib import admin
urlpatterns = [
url(r'^CMS/', include('CMSApp.urls')),
url(r'^admin/', include(admin.site.urls)),
]
и это CMSApp / urls.py:
from django.conf.urls import url
from django.conf.urls import include
from CMSApp import views
urlpatterns = [
url(r'^$', views.HomePageView.as_view()),
url(r'^users$', views.user_list.as_view()),
url(r'^users/(?P<pk>[0-9]+)$', views.user_detail.as_view()),
url(r'^api-auth/', include('rest_framework.urls',
namespace='rest_framework')),
]
My HomePageView обслуживает эту страницу home.html:
<h3>Register</h3>
<form ng-submit="ctrl.add()" name="myForm">
<label>Username</label>
<input type="text" name="uname" ng-model="ctrl.user.username" required>
<label>Password</label>
<input type="password" name="pwd" ng-model="ctrl.user.password" required>
<label>Email</label>
<input type="email" name="mail" ng-model="ctrl.user.email" required>
<input type="submit" value="Register">
</form>
<h3>Login</h3>
<form ng-submit="ctrl.loginUser()" name="myLoginForm">
<label>Username</label>
<input type="text" name="uname" ng-model="ctrl.user.username" required>
<label>Password</label>
<input type="password" name="pwd" ng-model="ctrl.user.password" required>
<input type="submit" value="Login">
</form>
<script>
angular.module("notesApp", [])
.config(['$httpProvider', function($httpProvider) {
$httpProvider.defaults.xsrfCookieName = 'csrftoken';
$httpProvider.defaults.xsrfHeaderName = 'X-CSRFToken';
}])
.controller("MainCtrl", ["$http", function($http) {
var self = this;
self.users = {};
var fetchUsers = function() {
return $http.get("/CMS/users").then(function(response) { // get list of existing users
self.users = response.data;
}, function(errResponse) {
console.error("Error while fetching users.");
});
};
self.loginUser = function() {
$http.post("/CMS/api-auth/login/", self.user)
.error(function(data, status, headers, config) {
console.log(data);
})
.then(fetchUsers);
console.log("Success Login with ", self.user);
};
}]);
</script>
Когда я регистрирую пользователя, который уже существует, Django возвращает ошибку 400 Bad Request, что хорошо, потому что я использую AngularJS во внешнем интерфейсе для обработки кода состояния 400.
Проблема в том, что когда я пытаюсь войти в систему с неправильным именем пользователя и паролем (имя пользователя, которое не существует, или имя пользователя и пароль, которые не совпадают), Django возвращает код состояния 200 OK, поэтому я не могу отследить проблему с помощью AngularJS на веб-интерфейсе. Есть идеи, почему Django возвращает 200 OK, когда я пытаюсь войти в систему с неправильным именем пользователя и паролем? Как заставить Django возвращать 400 при вводе неверного имени пользователя / пароля?
Изменить: это был мой исходный пост: Django Rest Framework + AngularJS не выполняет вход в систему и не выдает ошибки, а charlietfl прокомментировал это, сказав, что« что касается обработки ошибок ajax. Если вход в систему не удается .... использование истинной методологии REST отправит обратно 401 status, который затем запустит ваш обработчик ошибок ajax ", поэтому я не хочу, чтобы 200 OK при сбое входа в систему.