Другая ошибка между портом 80 и 5500 при работе сайта - PullRequest
0 голосов
/ 11 марта 2020

Я работаю над системой чат-ботов. Каждый раз, когда я пишу сообщение и ожидаю ответ, я получаю сообщение об ошибке.

Странная часть заключается в том, что сообщение об ошибке зависит от того, запускаю ли я сайт на локальном порту 80 или 5500. Другое дело, что localhost: 5500 не требует Apache сервера, а порт 80 (localhost) делает ,

Если я запускаю его на локальном хосте (порт 80), я получаю

POST http://localhost/get-response/ 404 (не найдено)

Если я запускаю его на локальном хосте: 5500, я получаю

POST http://localhost: 5500 / get-response / 405 (метод не разрешен)

chatbot. js

            fetch("/get-response/", {   //<--- error
                    body: JSON.stringify({'message': message['text']}),
                    cache: 'no-cache', 
                    credentials: 'same-origin', 
                    headers: {
                        'user-agent': 'Mozilla/4.0 MDN Example',
                        'content-type': 'application/json'
                    },
                    method: 'POST',
                    mode: 'cors', 
                    redirect: 'follow',
                    referrer: 'no-referrer',
                    })
                    .then(response => response.json()).then((json) => {
                        this.messages.push(json['message'])
                    })

urls.py

urlpatterns = [
    url('', Index),
    path('get-response/', get_response),
]

views.py

@csrf_exempt
def get_response(request):
    response = {'status': None}

    if request.method == 'POST':
        data = json.loads(request.body.decode('utf-8'))
        message = data['message']

        chat_response = chatbot.get_response(message).text
        response['message'] = {'text': chat_response, 'user': False, 'chat_bot': True}
        response['status'] = 'ok'

    else:
        response['error'] = 'no post data found'

    return HttpResponse(
        json.dumps(response),
            content_type="application/json"
        )

def Index (request):
    context = {'title': 'Chatbot Version 1.0'}

    return render(request, "AI.html", context)

Как узнать, какое сообщение об ошибке следует go за?

Ответы [ 2 ]

0 голосов
/ 11 марта 2020

вам нужно разрешить методы API для вас, как это выглядит:

from rest_framework.decorators import api_view

@api_view(['POST'])
@csrf_exempt
def get_response(request):
    response = {'status': None}

    if request.method == 'POST':
        data = json.loads(request.body.decode('utf-8'))
        message = data['message']

        chat_response = chatbot.get_response(message).text
        response['message'] = {'text': chat_response, 'user': False, 'chat_bot': True}
        response['status'] = 'ok'

    else:
        response['error'] = 'no post data found'

    return HttpResponse(
        json.dumps(response),
            content_type="application/json"
        )
0 голосов
/ 11 марта 2020

Вы используете функцию в качестве представления API, поэтому ее следует указать в декораторе методов, как показано ниже

 from rest_framework.decorators import api_view
 @csrf_exempt
 @api_view(['POST'])
 def get_response(request):
      .....
    your code
      .....

Надеюсь, это даст вам решение.

больше, чем один из методов HTTP может быть использован, как показано здесь.

@api_view(['POST', 'GET'])

И если вы хотите запустить сервер на порту 80, то это должно быть упомянуто в команде, как показано ниже.

 python manage.py runserver 127.0.0.1:80

127.0.0.1 означает, что localhost

python manage.py runserver займет номер порта 8000

...