Pythonanywhere - ConnectionRefusedError: [Errno 111] - PullRequest
0 голосов
/ 29 января 2020

Здесь у меня есть модель под названием Пользователь. Имеет 2 поля «Имя» и «Телефон». Я пытаюсь пройти проверку подлинности с помощью OTP. На самом деле код отлично работает на локальном сервере. По этой причине я размещал проект на Pythonanywhere, но теперь он получает ошибку на сервере ConnectionRefusedError: [Errno 111] Соединение отклонено

Essentials

Ниже приведено код для отправки сообщения OTP

def generate_otp(user, name, phone):
    otp = users.models.User.objects.make_random_password(length=4, allowed_chars='123456789')

    if not users.models.VerifyToken.objects.filter(user=user).exists():
        users.models.VerifyToken.objects.create(user=user, otp=otp, name=name, phone=phone)
        send_verification_message(phone, otp)
    else:
        token = users.models.VerifyToken.objects.get(user=user)
        token.otp = otp
        token.name = name
        token.phone = phone
        send_verification_message(phone, otp)
        token.save()
    return otp

def send_verification_message(phone, otp):
    phone = phone[3:14]
    conn = http.client.HTTPSConnection("api.msg91.com")
    payload = "{ \"sender\": \"BMyDay\", \"route\": \"4\", \"country\": \"91\", \"sms\": [ { \"message\": \"" + "Your verification code is " + otp + ".\", \"to\": [ \"" + phone + "\" ] } ] }"
    print(payload)
    headers = {
        'authkey': "xxxxxxxxxxxxxxxxxxx",
        'content-type': "application/json"
    }

    conn.request("POST", "/api/v2/sendsms", payload, headers)

    res = conn.getresponse()
    data = res.read()

    print(data.decode("utf-8"))
    return True

Просмотр

Это мой взгляд

class AuthAPIView(APIView):
    queryset = User.objects.all()
    lookup_field = "phone"
    permission_classes = [AllowAny]

    # Get OTP
    def put(self, request):
        name = request.data.get('name')
        phone = request.data.get('phone')

        if name and phone and phonenumbers.is_valid_number(
                phonenumbers.parse(request.data.get('phone'), 'IN')):
            # if user is exists
            if VerifyToken.objects.filter(phone=phone).exists():
                user = VerifyToken.objects.get(phone=phone).user
                generate_otp(user, name, phone)
            elif User.objects.filter(phone=phone).exists():
                user = User.objects.get(phone=phone)
                generate_otp(user, name, phone)
            else:
                username = User.objects.make_random_password(length=10)
                user = User.objects.create_user(username=username, phone=phone)
                generate_otp(user, name, phone)

            return Response({'response': 'OTP send to your mobile number: ' + str(phone), "user": user.id},
                            status=status.HTTP_200_OK)

        else:
            return Response({'response': 'Enter a valid data'}, status=status.HTTP_400_BAD_REQUEST)

Ошибка

Это ошибка сервера

Traceback (most recent call last):
  File "/home/BookMyDay/.local/lib/python3.6/site-packages/django/core/handlers/exception.py", line 34, in inner
    response = get_response(request)
  File "/home/BookMyDay/.local/lib/python3.6/site-packages/django/core/handlers/base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/home/BookMyDay/.local/lib/python3.6/site-packages/django/core/handlers/base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/home/BookMyDay/.local/lib/python3.6/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
    return view_func(*args, **kwargs)
  File "/home/BookMyDay/.local/lib/python3.6/site-packages/django/views/generic/base.py", line 71, in view
    return self.dispatch(request, *args, **kwargs)
  File "/home/BookMyDay/.local/lib/python3.6/site-packages/rest_framework/views.py", line 505, in dispatch
    response = self.handle_exception(exc)
  File "/home/BookMyDay/.local/lib/python3.6/site-packages/rest_framework/views.py", line 465, in handle_exception
    self.raise_uncaught_exception(exc)
  File "/home/BookMyDay/.local/lib/python3.6/site-packages/rest_framework/views.py", line 476, in raise_uncaught_exception
    raise exc
  File "/home/BookMyDay/.local/lib/python3.6/site-packages/rest_framework/views.py", line 502, in dispatch
    response = handler(request, *args, **kwargs)
  File "/home/BookMyDay/bookmyday_python/source/users/api_view.py", line 121, in put
    generate_otp(user, name, phone)
  File "/home/BookMyDay/bookmyday_python/source/source/essentials.py", line 42, in generate_otp
    send_verification_message(phone, otp)
  File "/home/BookMyDay/bookmyday_python/source/source/essentials.py", line 63, in send_verification_message
    conn.request("POST", "/api/v2/sendsms", payload, headers)
  File "/usr/lib/python3.6/http/client.py", line 1254, in request
    self._send_request(method, url, body, headers, encode_chunked)
  File "/usr/lib/python3.6/http/client.py", line 1300, in _send_request
    self.endheaders(body, encode_chunked=encode_chunked)
  File "/usr/lib/python3.6/http/client.py", line 1249, in endheaders
    self._send_output(message_body, encode_chunked=encode_chunked)
  File "/usr/lib/python3.6/http/client.py", line 1036, in _send_output
    self.send(msg)
  File "/usr/lib/python3.6/http/client.py", line 974, in send
    self.connect()
  File "/usr/lib/python3.6/http/client.py", line 1407, in connect
    super().connect()
  File "/usr/lib/python3.6/http/client.py", line 946, in connect
    (self.host,self.port), self.timeout, self.source_address)
  File "/usr/lib/python3.6/socket.py", line 724, in create_connection
    raise err
  File "/usr/lib/python3.6/socket.py", line 713, in create_connection
    sock.connect(sa)
ConnectionRefusedError: [Errno 111] Connection refused

Ответ почтальона

<h1>Server Error (500)</h1>

Может ли кто-нибудь помочь мне с этим?

1 Ответ

2 голосов
/ 29 января 2020

Вы, вероятно, используете бесплатную учетную запись, которой требуется доступ к inte rnet через наш прокси, но я нигде не вижу, чтобы вы настроили свою библиотеку http для использования прокси. Некоторые библиотеки (например, запросы) используют настройки прокси автоматически, а другие нет. Найдите на страницах справки PythonAnywhere «proxy», чтобы найти сведения о прокси и настроить библиотеку http для их использования.

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