Аксиос не отправляется как пост - PullRequest
0 голосов
/ 27 апреля 2018

Я пытаюсь получить простую настройку почтовой формы в React с Axios, но она почему-то не отправляется как почтовый запрос, поэтому Django продолжает выдавать ошибку 405.

Это код реакции, который вызывает axios и обрабатывает форму:

handleSubmit(e) {
    console.log('Form state: ', this.state);
    e.preventDefault();

    const username = this.state.username;
    const password = this.state.password;
    const formData = {
        username: username,
        password: password,
    }
    // Django backend currently running on localhost:8000
    axios('http://localhost:8000/login', {
        method: 'POST',
        data: formData,
    }).then(res=> {
            console.log('res', res);
            console.log('res.data', res.data);
        }
    )

}

Это вид входа в Django. У меня есть обязательный пост, поэтому он автоматически выдает ошибку 405. Когда не используется метод поста.

Джанго:

import json, re
from django.shortcuts import get_object_or_404, redirect
from django.http import HttpResponse, HttpResponseForbidden, HttpResponseNotFound
from django.contrib.auth.models import User
from django.contrib.auth import authenticate
from django.contrib.auth import login as auth_user
from django.contrib.auth import logout as logout_user
from django.views.decorators.http import require_http_methods
from django.views.decorators.csrf import csrf_exempt

from api.utils import render


def home(request):
    return render(request, 'api/home.html')


@csrf_exempt
@require_http_methods(['POST'])
def login(request):
    if request.method == "POST":
        username = request.POST['username']
        password = request.POST['password']

        if re.compile('.+@.+\..+').match(username):
            user = authenticate(email=username, password=password)
        else:
            user = authenticate(username=username, password=password)

        if user is not None:
            auth_user(request, user)
            return HttpResponse(json.dumps(True), content_type="application/json")
        else:
            response = {
                'success': False,
                'error': True,
                'message': "The username/email or password was incorrect.",
            }
            return HttpResponseForbidden(json.dumps(response))

    else:
        return HttpResponseForbidden("Post method required.")

Ответы [ 2 ]

0 голосов
/ 27 апреля 2018

Запрос OPTIONS является запросом перед полетом. См. эту проблему для получения более подробной информации.

Ваше мнение использует request.POST, поэтому ожидает, что данные будут использовать application/x-www-form-urlencoded вместо application/json. Если вы сконфигурируете axios для использования application/x-www-form-urlencoded, вам не придется настраивать CORS.

Если вы используете application/json, вам придется настроить CORS.

0 голосов
/ 27 апреля 2018

Я думаю, что проблема связана с настройкой Django вашего приложения. Код, связанный с Axios, кажется правильным. Пример кода разрешенных глаголов https.

class TheView(View):

self.allowed_methods = ['get', 'post', 'put', 'delete', 'options']
def options(self, request, id):
    response = HttpResponse()
    response['allow'] = ','.join([self.allowed_methods])
    return response

Можете ли вы проверить конфигурацию сервера один раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...