Dans Django, la lecture et le paramétrage des cookies sont très simples. Ensuite, je partagerai avec vous l'utilisation des cookies dans Django à travers cet article. Les amis intéressés devraient y jeter un œil. J'espère que cela pourra aider tout le monde.
Le cookie est un enregistrement déposé par le navigateur sur le client. Cet enregistrement peut être conservé en mémoire ou sur le disque dur. Étant donné que les requêtes HTTP sont sans état, le serveur ou le client peut maintenir l'état de la session en lisant les enregistrements de cookies. Par exemple, un scénario d'application courant est le statut de connexion. Dans Django, la lecture et le paramétrage des cookies sont très simples. Le format du cookie lui-même est similaire à celui d'un dictionnaire, il peut donc être obtenu via la clé ou get de la requête ; puis son paramètre est défini via le set_cookie de l'objet de réponse, si vous souhaitez annuler le cookie, définissez simplement le paramètre ; délai d'expiration à l'heure actuelle.
Obtenir un cookie :
request.COOKIES['key'] request.get_signed_cookie(key, default=RAISE_ERROR, salt='', max_age=None) 参数: default: 默认值 salt: 加密盐 max_age: 后台控制过期时间
Définir un cookie :
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获取(不是绝对,底层抓包可以获取到也可以被覆盖)
Exemple 1 : configurez une interface de connexion, une interface de saut après une connexion à l'index réussie. Si vous n'êtes pas connecté, il passera automatiquement à l'interface de connexion
vues. py
def index(reqeust): # 获取当前已经登录的用户 v = reqeust.COOKIES.get('username111') if not v: return redirect('/login/') return render(reqeust,'index.html',{'current_user': v})
Notez qu'il existe deux façons de définir le délai d'expiration du cookie, l'une consiste à spécifier directement max_age (délai d'expiration après N secondes), l'autre consiste à spécifier expire suivi d'un objet temporel spécifique
httponly peut empêcher JavaScript d'obtenir cette valeur, mais c'est en réalité inutile. Chrome ou la capture de paquets peuvent facilement obtenir tous les cookies
index.html
<🎜. ><!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> </head> <body> <h1>欢迎登录:{{ current_user }}</h1> </body> </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>
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})
Exemple 4 Nous pouvons également définir des cookies via JavaScript ou JQuery, tels que Based on Au code de pagination précédent, nous ajoutons une fonction pour personnaliser le nombre de lignes affichées.
@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()),
views.py obtient le nombre de lignes par page depuis le front-end et le transmet à notre classe de pagination lorsqu'il est instancié
<!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>
Recommandations associées :
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})
Comment définir l'heure d'expiration de la session avec Django
Ajout d'une base de données Django , supprimer, modifier et vérifier les opérations Exemples
Comparez les opérations de cookie et d'instance de session dans Django
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!