Django에서는 쿠키를 읽고 설정하는 것이 매우 간단합니다. 다음에는 이 글을 통해 Django에서의 쿠키 사용법을 공유하겠습니다. 관심 있는 친구들은 꼭 읽어보셨으면 좋겠습니다.
쿠키는 브라우저가 클라이언트에 남기는 기록입니다. 이 기록은 메모리나 하드디스크에 보관될 수 있습니다. HTTP 요청은 상태 비저장이므로 서버나 클라이언트는 쿠키 레코드를 읽어 세션의 상태를 유지할 수 있습니다. 예를 들어 일반적인 애플리케이션 시나리오는 로그인 상태입니다. Django에서는 쿠키를 읽고 설정하는 것이 매우 간단합니다. 쿠키 자체의 형식은 사전과 유사하므로 요청의 키나 가져오기를 통해 얻을 수 있으며 쿠키를 취소하려면 응답 개체의 set_cookie를 통해 설정하면 됩니다. 만료 시간을 현재 시간으로 변경합니다.
쿠키 가져오기:
request.COOKIES['key'] request.get_signed_cookie(key, default=RAISE_ERROR, salt='', max_age=None) 参数: default: 默认值 salt: 加密盐 max_age: 后台控制过期时间
쿠키 설정:
rep = HttpResponse(...) 或 rep = render(request, ...) rep.set_cookie(key,value,...) rep.set_signed_cookie(key,value,salt='加密盐',...) 参数: key, 键 value='', 值 max_age=None, 超时时间 expires=None, 超时时间(IE requires expires, so set it if hasn't been already.) path='/', Cookie生效的路径,/ 表示根路径,特殊的:跟路径的cookie可以被任何url的页面访问 domain=None, Cookie生效的域名 secure=False, https传输 httponly=False 只能http协议传输,无法被JavaScript获取(不是绝对,底层抓包可以获取到也可以被覆盖)
예제 1 로그인 로그인 인터페이스, 인덱스 로그인 성공 후 점프 인터페이스 및 로그인되지 않은 경우 자동으로 점프하도록 설정합니다. 로그인 인터페이스
views.py
def index(reqeust): # 获取当前已经登录的用户 v = reqeust.COOKIES.get('username111') if not v: return redirect('/login/') return render(reqeust,'index.html',{'current_user': v})
쿠키 시간 초과를 설정하는 방법에는 두 가지가 있습니다. 하나는 max_age(N초 후 시간 초과)를 직접 지정하는 것이고, 다른 하나는 만료 후 특정 시간을 지정하는 것입니다. object
http만 JavaScript는 이 값을 얻을 수 없지만 실제로는 쓸모가 없습니다. Chrome 또는 패킷 캡처는 모든 쿠키
index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> </head> <body> <h1>欢迎登录:{{ current_user }}</h1> </body> </html>
login.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> </head> <body> <form action="/login/" method="POST"> <input type="text" name="username" placeholder="用户名" /> <input type="password" name="pwd" placeholder="密码" /> <input type="submit" /> </form> </body> </html>
예제 2 :
실생활에서 쿠키 확인 함수는 일반적으로 데코레이터로 작성되므로 다른 함수에서 직접 호출할 수 있습니다.
Change 예 1
def auth(func): def inner(reqeust,*args,**kwargs): v = reqeust.COOKIES.get('username111') if not v: return redirect('/login/') return func(reqeust, *args,**kwargs) return inner @auth def index(reqeust): # 获取当前已经登录的用户 v = reqeust.COOKIES.get('username111') return render(reqeust,'index.html',{'current_user': v})
예 3: 우리는 fbv 또는 라우팅 기능을 위한 cbv. 예제 2에서는 cbv로도 달성할 수 있는 fbv 메서드를 사용합니다. cbv에서 하나의 메서드만 장식하려는 경우 이 클래스의 모든 메서드를 장식하려는 경우 메서드 앞에 직접 @method_decorator를 추가하면 됩니다. 그런 다음 전체 수업에서
views.py
@method_decorator(auth,name='dispatch') class Order(views.View): # @method_decorator(auth) # def dispatch(self, request, *args, **kwargs): # return super(Order,self).dispatch(request, *args, **kwargs) # @method_decorator(auth) def get(self,reqeust): v = reqeust.COOKIES.get('username111') return render(reqeust,'index.html',{'current_user': v}) def post(self,reqeust): v = reqeust.COOKIES.get('username111') return render(reqeust,'index.html',{'current_user': v}) urls.py url(r'^order/', views.Order.as_view()),
user_list.html 다음은 쿠키를 더 쉽게 읽고 설정할 수 있게 해주는 JQuery 플러그인입니다. 또한 쿠키 사용 범위도 제한합니다. 기본 모든 범위가 아니라 /user_list
경로로만 제한됩니다.
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> <style> .go{ width:20px; border: solid 1px; color: #66512c; display: inline-block; padding: 5px; } .pagination .page{ border: solid 1px; color: #66512c; display: inline-block; padding: 5px; background-color: papayawhip; margin: 5px; } .pagination .page.active{ background-color: brown; color: white; } </style> </head> <body> <ul> {% for item in li %} {% include 'li.html' %} {% endfor %} </ul> <p> <select id="ps" onchange="changePageSize(this)"> <option value="10">10</option> <option value="30">30</option> <option value="50">50</option> <option value="100">100</option> </select> </p> <p class="pagination"> {{ page_str }} </p> <script src="/static/jquery-1.12.4.js"></script> <script src="/static/jquery.cookie.js"></script> <script> $(function(){ var v = $.cookie('per_page_count', {'path': "/user_list/`"}); console.log(v) $('#ps').val(v); }); function changePageSize(ths){ var v = $(ths).val(); console.log(v); $.cookie('per_page_count',v, {'path': "/user_list/"}); location.reload(); } </script> </body> </html>
def user_list(request): current_page = request.GET.get('p', 1) current_page = int(current_page) val = request.COOKIES.get('per_page_count',10) val = int(val) page_obj = pagination.Page(current_page,len(LIST),val) data = LIST[page_obj.start:page_obj.end] page_str = page_obj.page_str("/user_list/") return render(request, 'user_list.html', {'li': data,'page_str': page_str})
위 내용은 Django에서 쿠키를 올바르게 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!