Heim  >  Artikel  >  Backend-Entwicklung  >  So verwenden Sie Cookies in Django richtig

So verwenden Sie Cookies in Django richtig

小云云
小云云Original
2018-01-26 11:02:321452Durchsuche

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(&#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})

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()),

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>


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})


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!

Stellungnahme:
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