如何在 django rest 中为基于函数的视图启用 cors 来源?
How I can enable the cors origin for function-based view in djangorest?
我一直致力于对我的移动应用程序进行简单的身份验证(基于功能)。我一直在想,因为当 运行ning 在网络上时应用程序正在运行(我使用的是 ionic4 ),但是当我尝试 运行 应用程序到真实设备时,它不工作。但是,post 注册视图请求正在运行(在网络和真实设备中)并且它由基于 class 的视图构成。在我看来,这里唯一的问题是 cors-origin 因为其他视图(基于 class 的视图)正在工作。任何人都知道如何设置基于函数的视图的 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',
...
]
当您执行 POST
请求时,它会像 content-type 一样与 HEADERS
一起使用。所以你需要允许它。
所以在CORS_ORIGIN_ALLOW_ALL
、
之后加上这个
CORS_ALLOW_HEADERS = ('Content-Type')
无论何时在 headers 中发送内容,都需要在此处添加。否则你会得到 cors 错误。
我一直致力于对我的移动应用程序进行简单的身份验证(基于功能)。我一直在想,因为当 运行ning 在网络上时应用程序正在运行(我使用的是 ionic4 ),但是当我尝试 运行 应用程序到真实设备时,它不工作。但是,post 注册视图请求正在运行(在网络和真实设备中)并且它由基于 class 的视图构成。在我看来,这里唯一的问题是 cors-origin 因为其他视图(基于 class 的视图)正在工作。任何人都知道如何设置基于函数的视图的 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',
...
]
当您执行 POST
请求时,它会像 content-type 一样与 HEADERS
一起使用。所以你需要允许它。
所以在CORS_ORIGIN_ALLOW_ALL
、
CORS_ALLOW_HEADERS = ('Content-Type')
无论何时在 headers 中发送内容,都需要在此处添加。否则你会得到 cors 错误。