장고에서 쿠키를 설정하고 얻는 방법은 무엇입니까?
방문자가 선택한 위치에 따라 다른 내용을 보여주는 웹 사이트가 있습니다.예: 사용자 입력55812
ㅠㅠㅠㅠ 어떤. 즉, 그합니다.저는 어떤 도시와 지역인지 알고 있습니다. 즉, 그 지역과 관련된 내용을 그들에게 제공합니다.제 질문은 어떻게 하면 쿠키에 이것을 저장하여 그들이 돌아올 때 항상 우편 번호를 입력할 필요가 없도록 할 수 있을까요?
다음과 같이 봅니다.
- 영역에 따라 영구 쿠키를 설정합니다.
- 그들이 쿠키를 읽었을 때 우편번호를 잡습니다.
- 쿠키의 우편 번호에 따라 내용을 반환합니다.
쿠키 설정에 대한 확실한 정보를 찾을 수 없습니다.어떤 도움이든 대단히 감사합니다.
Django의 세션 프레임워크를 사용하면 대부분의 시나리오를 다루어야 하지만, Django는 이제 요청 및 응답 객체에 대한 직접적인 쿠키 조작 방법도 제공합니다(그래서 도우미 기능이 필요하지 않습니다).
쿠키 설정:
def view(request):
response = HttpResponse('blah')
response.set_cookie('cookie_name', 'cookie_value')
쿠키 검색:
def view(request):
value = request.COOKIES.get('cookie_name')
if value is None:
# Cookie is not set
# OR
try:
value = request.COOKIES['cookie_name']
except KeyError:
# Cookie is not set
업데이트: 기본 제공 솔루션에 대한 아래 피터의 답변을 확인하십시오.
영구 쿠키를 설정하는 도우미입니다.
import datetime
def set_cookie(response, key, value, days_expire=7):
if days_expire is None:
max_age = 365 * 24 * 60 * 60 # one year
else:
max_age = days_expire * 24 * 60 * 60
expires = datetime.datetime.strftime(
datetime.datetime.utcnow() + datetime.timedelta(seconds=max_age),
"%a, %d-%b-%Y %H:%M:%S GMT",
)
response.set_cookie(
key,
value,
max_age=max_age,
expires=expires,
domain=settings.SESSION_COOKIE_DOMAIN,
secure=settings.SESSION_COOKIE_SECURE or None,
)
응답을 보내기 전에 다음 코드를 사용합니다.
def view(request):
response = HttpResponse("hello")
set_cookie(response, 'name', 'jujule')
return response
업데이트: 기본 제공 솔루션에 대한 아래 피터의 답변을 확인하십시오.
쿠키를 수동으로 설정할 수 있지만 사용 사례에 따라(그리고 향후 더 많은 유형의 영구/세션 데이터를 추가할 수도 있음) Django의 세션 기능을 사용하는 것이 더 타당할 수 있습니다.이렇게 하면 사용자의 세션 쿠키에 내부적으로 연결된 변수를 가져오고 설정할 수 있습니다.사용자의 세션에 연결된 많은 데이터를 저장하려는 경우 모든 데이터를 쿠키에 저장하면 HTTP 요청 및 응답에 많은 비중을 추가할 수 있습니다.세션을 사용하면 세션 쿠키가 앞뒤로 전송되는 것이 전부입니다(비록 Django의 세션 데이터 저장에 대한 오버헤드가 있지만).
이 작업에 관심이 있는 사용자는 누구나 장고 세션 프레임워크의 설명서를 읽어야 합니다.세션 ID는 사용자의 쿠키에 저장되지만 쿠키와 유사한 모든 데이터를 데이터베이스에 매핑합니다.이것은 HTTP 요청에 대한 일반적인 쿠키 기반 워크플로우를 개선한 것입니다.
여기 장고 뷰를 사용한 예가 있습니다...
def homepage(request):
request.session.setdefault('how_many_visits', 0)
request.session['how_many_visits'] += 1
print(request.session['how_many_visits'])
return render(request, 'home.html', {})
페이지를 계속해서 방문하면 쿠키를 지우거나, 새 브라우저를 방문하거나, 위장하거나, 장고의 세션 ID 쿠키를 무시하는 다른 작업을 수행할 때까지 값이 1에서 증가하기 시작하는 것을 볼 수 있습니다.
아래 Jujule의 답변 외에도 쿠키를 클래스 기반 보기 응답으로 설정하는 방법을 보여주는 솔루션을 찾을 수 있습니다.이 솔루션을 다음에서 확장되는 보기 클래스에 적용할 수 있습니다.TemplateView
,ListView
또는View
.
Jujule의 영구 쿠키 세터 방법의 수정된 버전 아래:
import datetime
from django.http import HttpResponse
def set_cookie(
response: HttpResponse,
key: str,
value: str,
cookie_host: str,
days_expire: int = 365,
):
max_age = days_expire * 24 * 60 * 60
expires = datetime.datetime.strftime(
datetime.datetime.utcnow() + datetime.timedelta(days=days_expire), "%a, %d-%b-%Y %H:%M:%S GMT",
)
domain = cookie_host.split(":")[0]
response.set_cookie(
key,
value,
max_age=max_age,
expires=expires,
domain=domain,
secure=False,
)
그리고 영구 쿠키 설정기를 사용하여 쿠키를 추가하는 샘플 클래스 기반 보기 예제
class BaseView(TemplateView):
template_name = "YOUR_TEMPLATE_FILE_PATH"
def get(self, request, *args, **kwargs):
response = super().get(request, *args, **kwargs)
set_cookie(
response=response,
key="COOKIE_KEY",
value="COOKIE_VALUE",
cookie_host=request.get_host(),
days_expire=7,
)
return response
다음과 같이 쿠키를 설정할 수 있습니다.*객체를 반환해야 합니다. 그렇지 않으면 쿠키가 Django 세션과 다른 브라우저로 설정되어 있지 않으므로 객체를 반환하지 않고 세션 ID 쿠키를 브라우저로 설정할 수 있습니다. 그러면 응답을 사용해야 하는 이유를 설명하는 저의 질문과 답변을 볼 수 있습니다.대신 set_message를 사용합니다.response.cookies[]
쿠키를 설정하기 위해 사전이나 목록을 쿠키로 설정하고 올바르게 가져오는 방법에 대한 질문을 던졌습니다. 그러면 쿠키를 삭제하는 방법을 설명하는 제 대답을 볼 수 있습니다.
from django.shortcuts import render
def my_view(request):
response = render(request, 'index.html', {})
response.set_cookie('name', 'John')
response.cookies['age'] = 27
return response # Must return the object
render_to_string(), HttpResponse() 및 set_cookie():
from django.template.loader import render_to_string
from django.http import HttpResponse
def my_view(request):
rts = render_to_string('index.html', {})
response = HttpResponse(rts)
response.set_cookie('name', 'John')
response.cookies['age'] = 27
return response # Must return the object
HttpResponse() 및 set_cookie():
from django.http import HttpResponse
def my_view(request):
response = HttpResponse('View')
response.set_cookie('name', 'John')
response.cookies['age'] = 27
return response # Must return the object
from django.shortcuts import redirect
def my_view(request):
response = redirect('https://example.com/')
response.set_cookie('name', 'John')
response.cookies['age'] = 27
return response # Must return the object
HttpResponseRedirect() 및 set_cookie():
from django.http import HttpResponseRedirect
def my_view(request):
response = HttpResponseRedirect('https://example.com/')
response.set_cookie('name', 'John')
response.cookies['age'] = 27
return response # Must return the object
그리고, 당신은 요청에 따라 쿠키를 받을 수 있습니다.쿠키['키'] 및 요청.아래와 같이 COIES.get('key'). *request.COOKIES.get()
돌아온다None
키가 존재하지 않고 변경할 수 있는 경우 기본적으로None
와 같은 다른 가치로Doesn't exist
아래와 같이 두 번째 인수로 설정합니다.
from django.shortcuts import render
def my_view(request):
print(request.COOKIES['name']) # John
print(request.COOKIES.get('age')) # 27
print(request.COOKIES.get('gender')) # None
print(request.COOKIES.get('gender', "Doesn't exist")) # Doesn't exist
return render(request, 'index.html', {})
그리고, 쿠키를 얻을 수 있습니다.request.COOKIES.key
아래 표시된 대로 Django 템플릿에서:
# "templates/index.html"
{{ request.COOKIES.name }} {# John #}
{{ request.COOKIES.age }} {# 27 #}
응답이 있는 쿠키를 삭제할 수 있습니다.아래와 같이 delete_http://() .*객체를 반환해야 합니다. 그렇지 않으면 쿠키가 브라우저에서 삭제되지 않습니다.
from django.shortcuts import render
def my_view(request):
response = render(request, 'index.html', {})
response.delete_cookie('name')
response.delete_cookie('age')
return response # Must return the object
언급URL : https://stackoverflow.com/questions/1622793/how-to-set-and-get-cookies-in-django
'it-source' 카테고리의 다른 글
파일 및 폴더에 대한 Node.js 프로젝트 명명 규칙 (0) | 2023.07.25 |
---|---|
부동 소수점 번호의 정확한 값은 어떻게 인쇄합니까? (0) | 2023.07.25 |
SQL Server 2008에 새 스키마를 추가하는 방법은 무엇입니까? (0) | 2023.07.20 |
Python의 *in* 연산자의 복잡성 (0) | 2023.07.20 |
웹 드라이버 클릭() 대 자바스크립트 클릭() (0) | 2023.07.20 |