Heim >Backend-Entwicklung >PHP-Tutorial >So verwenden Sie Cookies in Django richtig
In Django ist das Lesen und Setzen von Cookies sehr einfach. Als nächstes werde ich Ihnen die Verwendung von Cookies in Django in diesem Artikel vorstellen. Interessierte Freunde sollten einen Blick darauf werfen. Ich hoffe, es kann allen helfen.
Cookie ist eine vom Browser auf dem Client hinterlassene Aufzeichnung. Diese Aufzeichnung kann im Speicher oder auf der Festplatte gespeichert werden. Da HTTP-Anfragen zustandslos sind, kann der Server oder Client den Status in der Sitzung aufrechterhalten, indem er Cookie-Datensätze liest. Ein häufiges Anwendungsszenario ist beispielsweise der Anmeldestatus. In Django ist das Lesen und Setzen von Cookies sehr einfach. Das Format des Cookies selbst ähnelt einem Wörterbuch, es kann also über den Schlüssel oder get der Anfrage abgerufen werden. Anschließend wird seine Einstellung über set_cookie des Antwortobjekts festgelegt Ablaufzeit auf die aktuelle Zeit.
Cookie abrufen:
request.COOKIES['key'] request.get_signed_cookie(key, default=RAISE_ERROR, salt='', max_age=None) 参数: default: 默认值 salt: 加密盐 max_age: 后台控制过期时间
Cookie setzen:
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获取(不是绝对,底层抓包可以获取到也可以被覆盖)
Beispiel 1: Richten Sie eine Anmeldeschnittstelle ein, eine Sprungschnittstelle nach erfolgreicher Indexanmeldung. Wenn Sie nicht angemeldet sind, wird automatisch zur Anmeldeschnittstelle gesprungen
Ansichten. py
def index(reqeust): # 获取当前已经登录的用户 v = reqeust.COOKIES.get('username111') if not v: return redirect('/login/') return render(reqeust,'index.html',{'current_user': v})
Beachten Sie, dass es zwei Möglichkeiten gibt, das Cookie-Timeout festzulegen: Eine besteht darin, max_age (Timeout nach N Sekunden) direkt anzugeben, die andere darin, Ablaufdatum anzugeben gefolgt von einem bestimmten Zeitobjekt
httponly kann verhindern, dass JavaScript diesen Wert erhält, aber es ist eigentlich nutzlos. Chrome oder Packet Capture können problemlos alle Cookies abrufen
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>
Beispiel 2:
Im echten Leben dieses Verifizierungscookie Funktion wird normalerweise verwendet. Schreiben Sie sie als Dekorator, sodass Sie sie direkt für andere Funktionen aufrufen können
Änderungsbeispiel 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})
Beispiel 3: Wir Wissen Sie, dass wir fbv oder cbv verwenden können, um Funktionen weiterzuleiten. Beispiel 2 verwendet die fbv-Methode, die auch mit cbv implementiert werden kann. Wenn Sie nur eine Methode dekorieren möchten, fügen Sie einfach @method_decorator direkt vor der Methode hinzu Dekorieren Sie die Oberseite der gesamten Klasse
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 Hier ist ein JQuery-Plugin, das das Lesen und Setzen von Cookies erleichtert. Darüber hinaus beschränken wir auch den Umfang der Cookie-Nutzung, nicht standardmäßig alle Bereiche, sondern nur auf /user_list Im Pfad
<!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})
Das obige ist der detaillierte Inhalt vonSo verwenden Sie Cookies in Django richtig. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!