Различная ошибка между портами 80 и 5500 при запуске сайта

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

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

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

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

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

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

чатбот.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),
]

просмотры.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)

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


person John.P    schedule 11.03.2020    source источник
comment
как вы работаете на порту 80 ?, какую команду вы используете для запуска сервера на порту 80   -  person Shubham Devgan    schedule 11.03.2020
comment
@ShubhamDevgan Я не использую команды для запуска сайта. Я использую локальный хост. Странно то, что localhost: 5500 не требует сервера Apache, но порт 80 требует.   -  person John.P    schedule 11.03.2020
comment
это потому, что порты ниже 1024 зарезервированы для системных приложений или других приложений, поэтому в вашем случае или в общем случае, если у вас установлен сервер, он будет работать на порту 80, поэтому вам понадобится apache для работы на порту 80. @Джон.П   -  person Shubham Devgan    schedule 11.03.2020


Ответы (2)


Вы используете функцию в качестве представления 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 означает локальный хост

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

person Balasundar    schedule 11.03.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"
        )
person Shubham Devgan    schedule 11.03.2020