So verwenden Sie Cookies in Django richtig

小云云
Freigeben: 2023-03-19 16:44:01
Original
1453 Leute haben es durchsucht

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: 后台控制过期时间
Nach dem Login kopieren

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获取(不是绝对,底层抓包可以获取到也可以被覆盖)
Nach dem Login kopieren

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})
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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(&#39;username111&#39;)
    if not v:
      return redirect(&#39;/login/&#39;)
    return func(reqeust, *args,**kwargs)
  return inner
@auth
def index(reqeust):
  # 获取当前已经登录的用户
  v = reqeust.COOKIES.get(&#39;username111&#39;)
  return render(reqeust,&#39;index.html&#39;,{&#39;current_user&#39;: v})
Nach dem Login kopieren

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


Beispiel 4 Wir können Cookies auch über JavaScript oder JQuery setzen, z. B. Basierend auf Dem vorherigen Paging-Code fügen wir eine Funktion hinzu, um die Anzahl der angezeigten Zeilen anzupassen.
@method_decorator(auth,name=&#39;dispatch&#39;)
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(&#39;username111&#39;)
    return render(reqeust,&#39;index.html&#39;,{&#39;current_user&#39;: v})
  def post(self,reqeust):
    v = reqeust.COOKIES.get(&#39;username111&#39;)
    return render(reqeust,&#39;index.html&#39;,{&#39;current_user&#39;: v})
urls.py
 url(r&#39;^order/&#39;, views.Order.as_view()),
Nach dem Login kopieren

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


views.py ruft die Anzahl der Zeilen pro Seite vom Frontend ab und übergibt sie bei der Instanziierung an unsere Paging-Klasse
<!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 &#39;li.html&#39; %}
    {% 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(&#39;per_page_count&#39;, {&#39;path&#39;: "/user_list/`"});
        console.log(v)
        $(&#39;#ps&#39;).val(v);
    });
    function changePageSize(ths){
      var v = $(ths).val();
      console.log(v);
      $.cookie(&#39;per_page_count&#39;,v, {&#39;path&#39;: "/user_list/"});     
      location.reload();
    }
  </script>
</body>
</html>
Nach dem Login kopieren


Verwandte Empfehlungen:
def user_list(request):
  current_page = request.GET.get(&#39;p&#39;, 1)
  current_page = int(current_page)
  val = request.COOKIES.get(&#39;per_page_count&#39;,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, &#39;user_list.html&#39;, {&#39;li&#39;: data,&#39;page_str&#39;: page_str})
Nach dem Login kopieren


So legen Sie die Ablaufzeit einer Sitzung mit Django fest

Django-Datenbank hinzufügen Beispiel für Vorgänge zum Löschen, Ändern und Überprüfen

Vergleichen Sie Cookie- und Sitzungsinstanzvorgänge in Django

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage