장고 >= 3.1 및 is_dll
HttpRequest.is_ajax()
버전 3.1부터는 더 이상 사용하지 않습니다.
브라우저에서 페이지를 요청하면 html을 반환하고 싶습니다.JsonResponse
자바스크립트 또는 프로그래밍 방식으로 호출되는 경우.
나는 그것을 하는 방법에 대한 지침을 찾고 있습니다.
https://docs.djangoproject.com/en/3.1/ref/request-response/ #django.http.HttpRequest.is _http://ajax
확인.HTTP_X_REQUESTED_WITH
머리말
def sample_view(request):
is_ajax = request.META.get('HTTP_X_REQUESTED_WITH') == 'XMLHttpRequest'
그
HttpRequest.is_ajax()
메소드는 JQuery 고유의 AJAX 호출을 나타내는 방식에 의존했기 때문에 더 이상 사용되지 않으며, 현재 사용되는 방식은 JavaScript Fetch API를 사용하는 경향이 있습니다.사용 사례에 따라 고유한 AJAX 탐지 방법을 작성하거나 새 AJAX 탐지 방법을 사용할 수 있습니다.HttpRequest.accepts()
코드가 클라이언트 HTTP 수락 헤더에 의존하는 경우 메서드입니다.
재미있는 것은 -- 인용된 비망록은 여러분을 반 정도 밖에 못 가게 합니다."새 제품을 어떻게 사용하는지"에 대한 표시가 없습니다.HttpRequest.accepts
메소드"를 바꿀 수 있습니다.HttpRequest.is_ajax
사용하지 않는 텍스트, 설명서 또는 릴리스 노트에 없습니다.
자, 여기 있습니다.if request.accepts("application/json")
(적어도 그것이 저에게 효과가 있었습니다.)
다음 대신:
if request.is_ajax():
도움이 되었습니다.
if request.headers.get('x-requested-with') == 'XMLHttpRequest':
제안을 결합하면 사용 사례에 효과가 있습니다.
def is_ajax(request: django.http.request.HttpRequest) -> bool:
"""
https://stackoverflow.com/questions/63629935
"""
return (
request.headers.get('x-requested-with') == 'XMLHttpRequest'
or request.accepts("application/json")
)
그런 다음 의 모든 인스턴스를 바꿉니다.request.is_ajax()
와 함께is_ajax(request)
.
HttpRequest를 확인해 보셨습니까?머리글?
HttpRequest.is _requested는 HTTP_X_REQUESTED_에 의존합니다.머리글 포함.
그래서 당신은 이 헤더를 확인할 수 있습니다. 만약 그것이 사실이라면 그것은 AJAX일 것이고 그렇지 않으면 그것은 브라우저로부터의 요청일 것입니다.
HttpRequest.headers['HTTP_X_REQUESTED_WITH']
나는 아라크칼아부가 말한 대로 했지만, 나는 또한 덧붙였습니다.'X-Requested-With'
동일한 값을 가진 헤더.'XMLHttpRequest'
내 요청에 따라 그것은 효과가 있었습니다.
맨 위에 있는 것을 가져와야 합니다.
import re
from django.http import JsonResponse
from django.utils.translation import gettext_lazy as _
from django.conf.urls import handler404
브라우저 또는 Ajax 호출 중 어느 것을 사용하는지 확인하기 위해 함수/메소드 내에 이 정보를 포함할 수 있습니다.
requested_html = re.search(r'^text/html', request.META.get('HTTP_ACCEPT'))
if requested_html:
# requested from browser, do as per your wish
# ajax call. Returning as per wish
return JsonResponse({
'detail': _('Requested API URL not found')
}, status=404, safe=False)
설명.
브라우저에서 페이지를 로드하도록 요청하면 네트워크 탭에서 해당 요청의 요청된 헤더 아래에 표시됩니다.text/html
의 시작 부분에 있습니다.requested headers
.
그러나 브라우저에서 Ajax를 호출하는 경우requested headers
가지다*/*
태초에첨부하는 경우
Accept: application/json
헤더에서 요청된 헤더는 다음과 같습니다.
이를 통해 승인 헤더가 이러한 경우에 어떻게 다른지 이해할 수 있습니다.
언급URL : https://stackoverflow.com/questions/63629935/django-3-1-and-is-ajax
'source' 카테고리의 다른 글
CLOB 열에서 Oracle과 함께 GROUP BY를 사용하는 방법은 무엇입니까? (0) | 2023.08.15 |
---|---|
전화 번호를 허용하는 입력에 대한 마스크? (0) | 2023.08.15 |
자바.java.javaNoClassDefFoundError: org/springframework/data/repository/config/BootstrapMode (0) | 2023.08.15 |
CSS를 사용하여 배경 이미지를 뒤집는 방법은 무엇입니까? (0) | 2023.08.15 |
mariadb 10.3.3을 10.5.5로 업그레이드합니다. 단계를 안내해 주시겠습니까? (0) | 2023.08.15 |