AttributeError: у объекта 'NoneType' нет атрибута 'split', отправка почтового запроса с ajax на django - PullRequest
0 голосов
/ 23 декабря 2018

Я написал метод в моем views.py как API для входа пользователя.(с использованием django 2.1) он полностью работает с POSTMAN, но когда я пытаюсь использовать ajax для отправки запроса в этот API, это своего рода работа, но вместо того, чтобы возвращать jsonresponse с правильным кодом состояния, у меня возникает странная ошибка в консоли сервера.

- редактировать: я не понимаю, как это работает с почтальоном, а не с ajax?в чем разница?!Ajax вызывает эту ошибку ?!что-то не так с ajax?

Это ошибка:

[23/Dec/2018 21:40:46] "POST /api/login/ HTTP/1.1" 500 59
----------------------------------------
Exception happened during processing of request from ('127.0.0.1', 56813)
Traceback (most recent call last):
  File "c:\python37\Lib\wsgiref\handlers.py", line 138, in run
    self.finish_response()
  File "c:\python37\Lib\wsgiref\handlers.py", line 180, in finish_response
    self.write(data)
  File "c:\python37\Lib\wsgiref\handlers.py", line 274, in write
    self.send_headers()
  File "c:\python37\Lib\wsgiref\handlers.py", line 332, in send_headers
    self.send_preamble()
  File "c:\python37\Lib\wsgiref\handlers.py", line 255, in send_preamble
    ('Date: %s\r\n' % format_date_time(time.time())).encode('iso-8859-1')
  File "c:\python37\Lib\wsgiref\handlers.py", line 453, in _write
    result = self.stdout.write(data)
  File "c:\python37\Lib\socketserver.py", line 796, in write
    self._sock.sendall(b)
ConnectionAbortedError: [WinError 10053] An established connection was aborted b
y the software in your host machine

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "c:\python37\Lib\wsgiref\handlers.py", line 141, in run
    self.handle_error()
  File "C:\Users\crash\Envs\user_auth\lib\site-packages\django\core\servers\base
http.py", line 98, in handle_error
    super().handle_error()
  File "c:\python37\Lib\wsgiref\handlers.py", line 368, in handle_error
    self.finish_response()
  File "c:\python37\Lib\wsgiref\handlers.py", line 180, in finish_response
    self.write(data)
  File "c:\python37\Lib\wsgiref\handlers.py", line 274, in write
    self.send_headers()
  File "c:\python37\Lib\wsgiref\handlers.py", line 331, in send_headers
    if not self.origin_server or self.client_is_modern():
  File "c:\python37\Lib\wsgiref\handlers.py", line 344, in client_is_modern
    return self.environ['SERVER_PROTOCOL'].upper() != 'HTTP/0.9'
TypeError: 'NoneType' object is not subscriptable

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "c:\python37\Lib\socketserver.py", line 647, in process_request_thread
    self.finish_request(request, client_address)
  File "c:\python37\Lib\socketserver.py", line 357, in finish_request
    self.RequestHandlerClass(request, client_address, self)
  File "c:\python37\Lib\socketserver.py", line 717, in __init__
    self.handle()
  File "C:\Users\crash\Envs\user_auth\lib\site-packages\django\core\servers\base
http.py", line 153, in handle
    self.handle_one_request()
  File "C:\Users\crash\Envs\user_auth\lib\site-packages\django\core\servers\base
http.py", line 176, in handle_one_request
    handler.run(self.server.get_app())
  File "c:\python37\Lib\wsgiref\handlers.py", line 144, in run
    self.close()
  File "c:\python37\Lib\wsgiref\simple_server.py", line 35, in close
    self.status.split(' ',1)[0], self.bytes_sent
AttributeError: 'NoneType' object has no attribute 'split'

Мой код views.py:

@require_POST
def user_login(request):
    data = json.loads(request.body.decode('utf-8'))
    phone_number = data['phone_number']
    password = data['password']
    user = authenticate(phone_number=phone_number, password=password)
    if user is None:
        message = 'The username or password is wrong.'
        print(message)
        return JsonResponse({'message':message},status=406)
    if not user.two_step_auth:
        login(request,user)
        message='successfully loged in'
        print(message)
        return JsonResponse({'message':message}, status=200)
    gg = generate_activation_code(phone_number)
    if gg:
        message='The Activation code has been sent to your phone'
        print(message)
        return JsonResponse({'message':message}, status=200)
    return JsonResponse({}, status=400)

frontEnd код ajax:

    function send_user_info(){
        var phone_number = document.getElementById('input_tel').value
        var password = document.getElementById('input_password').value
        var dict = {"phone_number" : phone_number, "password" : password}
        $.ajax({
            url:'http://127.0.0.1:8000/api/login/',
            type: "post", // or "get"
            dataType: "json",
            contentType: "application/json",
            data: JSON.stringify(dict),
            success: function(data) {
            alert("Sucsessfully loged in.");
            },

        });
  }

что не так с этой ситуацией.пожалуйста, помогите.

1 Ответ

0 голосов
/ 09 января 2019

У меня была такая же проблема, когда я использовал socketserver.Похоже, что при подключении есть ошибка, связанная с Windows.Попробуйте использовать django-channels, если вам нужны веб-сокеты или асинхронная функциональность.Работал на меня.

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