방문자가 선택한 위치에 따라 다른 콘텐츠를 보여주는 웹 사이트가 있습니다. 예 : 사용자가 zip으로 55812를 입력합니다. 나는 어떤 도시와 지역의 위도 / 경도를 알고 있습니다. 즉, 해당 영역과 관련된 콘텐츠를 제공합니다. 제 질문은 쿠키에 이것을 저장하여 그들이 돌아올 때 항상 우편 번호를 입력 할 필요가 없도록하는 것입니다.
다음과 같이 봅니다.
- 영역에 따라 영구 쿠키를 설정합니다.
- 쿠키 읽기를 반환하면 우편 번호를 가져옵니다.
- 쿠키의 우편 번호를 기반으로 콘텐츠를 반환합니다.
쿠키 설정에 대한 확실한 정보를 찾을 수없는 것 같습니다. 어떤 도움이라도 대단히 감사합니다.
답변
업데이트 : 내장 솔루션에 대한 Peter의 답변을 아래에서 확인하십시오 .
영구 쿠키를 설정하는 도우미입니다.
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
업데이트 : 내장 솔루션에 대한 Peter의 답변을 아래에서 확인하십시오 .
답변
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
답변
쿠키를 수동으로 설정할 수 있지만 사용 사례에 따라 (그리고 나중에 더 많은 유형의 영구 / 세션 데이터를 추가하려는 경우) Django의 세션 기능 을 사용하는 것이 더 합리적 일 수 있습니다 . 이를 통해 사용자의 세션 쿠키에 내부적으로 연결된 변수 를 가져오고 설정할 수 있습니다 . 이것에 대한 멋진 점은 사용자 세션에 연결된 많은 데이터를 저장하려는 경우 모든 데이터를 쿠키에 저장하면 HTTP 요청 및 응답에 많은 가중치가 추가된다는 것입니다. 세션에서 세션 쿠키는 앞뒤로 전송되는 모든 것입니다 (Django가 세션 데이터를 저장하는 데는 오버 헤드가 있음을 염두에 두어야합니다).
답변
이 작업에 관심이있는 사람은 Django Sessions 프레임 워크 의 문서를 읽어야합니다 . 사용자의 쿠키에 세션 ID를 저장하지만 모든 쿠키와 유사한 데이터를 데이터베이스에 매핑합니다. 이는 HTTP 요청에 대한 일반적인 쿠키 기반 워크 플로를 개선 한 것입니다.
다음은 Django보기의 예입니다.
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', {})
페이지를 계속해서 방문하면 쿠키를 지우거나, 새 브라우저를 방문하거나, 시크릿 모드로 전환하거나, Django의 세션 ID 쿠키를 회피하는 다른 작업을 수행 할 때까지 값이 1부터 증가하기 시작하는 것을 볼 수 있습니다.