Есть бекенд на django. Фронтенд находится на другом домене. С фронта приходит кроссдоменный запрос с POST-параметрами. Помогите пожалуйста получить эти параметры в view и, например, вывести в консоль.
from django.shortcuts import render
from django.contrib.auth.models import User
from django.http import JsonResponse
view:
def registration(request):
print('----', request.POST)
print('----', request.POST.get('username'))
username = request.POST['username']
email = request.POST['email']
password = request.POST['password']
print(username, email, password)
if _reg_data_exist(username, email, password):
user = User.objects.create_user(username, email, password)
user.save()
response = JsonResponse([{"registration_successful": True}], safe=False)
response['Access-Control-Allow-Origin'] = '*'
response['Access-Control-Allow-Methods'] = 'POST'
return response
def _reg_data_exist(username, email, password):
is_exist = True
if len(username.strip()) == 0: is_exist = False
if len(email.strip()) == 0: is_exist = False
if len(password.strip()) == 0: is_exist = False
return is_exist
Проблема в том, что кроссдоменные запросы состоят из двух запросов. Сначала отправляется OPTION-запрос, а затем основной. В моём случае view прерывает работу django при получении OPTION-запроса:
System check identified no issues (0 silenced).
June 25, 2019 - 12:09:59
Django version 2.2, using settings 'run_res.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
---- <QueryDict: {}>
---- None
Internal Server Error: /app_auth/registration
Traceback (most recent call last):
File "/home/kalinin/django/run_res/venv/lib/python3.6/site-packages/django/utils/datastructures.py", line 78, in __getitem__
list_ = super().__getitem__(key)
KeyError: 'username'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/kalinin/django/run_res/venv/lib/python3.6/site-packages/django/core/handlers/exception.py", line 34, in inner
response = get_response(request)
File "/home/kalinin/django/run_res/venv/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/kalinin/django/run_res/venv/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/kalinin/django/run_res/app_auth/views.py", line 9, in registration
username = request.POST['username']
File "/home/kalinin/django/run_res/venv/lib/python3.6/site-packages/django/utils/datastructures.py", line 80, in __getitem__
raise MultiValueDictKeyError(key)
django.utils.datastructures.MultiValueDictKeyError: 'username'
[25/Jun/2019 12:10:04] "OPTIONS /app_auth/registration HTTP/1.1" 500 76427
Со стороны фронта запрос выглядит так: