ホームページ >バックエンド開発 >PHPチュートリアル >Django での Cookie の使用状況を分析する
Cookie はクライアント上のブラウザによって残される記録であり、メモリまたはハードディスクに保存できます。 Django では、Cookie の読み取りと設定は非常に簡単です。次に、この記事を通じて Django での Cookie の使用方法について説明します。興味のある方は一緒にご覧ください。Cookie は、クライアント上のブラウザーによって残される記録です。ハードディスク。 HTTP リクエストはステートレスであるため、サーバーまたはクライアントは Cookie レコードを読み取ることでセッション内の状態を維持できます。たとえば、一般的なアプリケーション シナリオはログイン ステータスです。 Django では、Cookie の読み取りと設定は非常に簡単です。 Cookie 自体の形式は辞書に似ているため、リクエストの key または get を通じて取得できます。Cookie をキャンセルしたい場合は、その設定を応答オブジェクトの set_cookie を通じて設定します。現在時刻までの有効期限。
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获取(不是绝对,底层抓包可以获取到也可以被覆盖)
views.py
def index(reqeust): # 获取当前已经登录的用户 v = reqeust.COOKIES.get('username111') if not v: return redirect('/login/') return render(reqeust,'index.html',{'current_user': v})
http のみではこの値の取得は禁止されていますが、実際には役に立ちません。Chrome やパケット キャプチャではすべての Cookie を簡単に取得できます
index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> </head> <body> <h1>欢迎登录:{{ current_user }}</h1> </body> </html>
実際には、検証 Cookie 関数は通常、他の関数で直接呼び出すことができるようにデコレータとして記述されます
変更例 1
<!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>
例 3: fbv またはルーティング機能の cbv。例 2 では fbv メソッドを使用していますが、cbv で 1 つのメソッドのみを修飾する場合は、このクラスのすべてのメソッドを修飾する場合は @method_decorator をメソッドの前に直接追加します。次に、クラス全体で
views.py の上部を飾ります
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})
例 4 たとえば、前のページング コードに基づいて、数値をカスタマイズする関数を追加します。表示される行数。
user_list.html これは、Cookie の読み取りと設定を容易にする JQuery プラグインです。さらに、Cookie の使用範囲も制限します (デフォルトのすべての範囲ではなく、パス /user_list
)
@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()),
<!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>
以上がDjango での Cookie の使用状況を分析するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。