如何在djangorest中为基于函数的视图启用cors起源?

问题描述 投票:0回答:1

我一直在为移动应用程序进行简单的身份验证(基于功能)。我一直在想,因为该应用程序在Web上运行时正在运行(我正在使用ionic4),但是当我尝试在实际设备上运行该应用程序时,却无法正常工作。但是,注册视图的发布请求正在运行(在Web和真实设备中),并且由基于类的视图构成。在我看来,这里的唯一问题是cors-origin,因为其他视图(基于类的视图)都在工作。任何人都知道如何设置基于函数的视图的cors-origin以允许所有传入的响应?谢谢!

# For clinicians
@csrf_exempt
@api_view(["POST"])
def login_as_clinician(request):

    student_number = request.data.get('student_number')
    password = request.data.get('password')
    print(secrets.token_hex())

    isExist = Clinician.objects.filter(student_number=student_number, password=password).exists()

    if isExist:
        user = Clinician.objects.get(student_number=student_number, password=password)
        data = { 'message' : 'successful', 'id' : user.id, 'student_number' : user.student_number, 'first_name' : user.first_name,
        'last_name' : user.last_name, 'middle_name' : user.middle_name, 'token' : secrets.token_hex(), 'clinic_level' : user.clinic_level }
        status = HTTP_200_OK
    else:
        data = { 'message' : 'error' }
        status = HTTP_404_NOT_FOUND

    return Response(data, status=status)

这里是settings.py配置

# CORS Headers
CORS_ORIGIN_ALLOW_ALL = True

CORS_ALLOW_METHODS = [
    'DELETE',
    'GET',
    'OPTIONS',
    'PATCH',
    'POST',
    'PUT',
]
MIDDLEWARE = [
    ...
    'django.contrib.sessions.middleware.SessionMiddleware',
    'corsheaders.middleware.CorsMiddleware',
    ...
]
INSTALLED_APPS = [
    ...
    'corsheaders',
    ...
]
python ionic-framework django-rest-framework ionic4 django-cors-headers
1个回答
0
投票

[当您执行POST请求时,它将与HEADERS一起使用,就像内容类型一样。因此,您需要允许这样做。

因此在CORS_ORIGIN_ALLOW_ALL之后添加此,

CORS_ALLOW_HEADERS = ('Content-Type')

[无论何时在标题中发送内容,都需要在此处添加。否则会出现cors错误。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.