ホームページ >バックエンド開発 >PHPチュートリアル >Django で 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: 后台控制过期时间
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获取(不是绝对,底层抓包可以获取到也可以被覆盖)
例 1 ログイン ログイン インターフェイス、インデックス ログイン成功後のジャンプ インターフェイスを設定し、ログインしていない場合は自動的にジャンプします。ログインインターフェース
views.py
def index(reqeust): # 获取当前已经登录的用户 v = reqeust.COOKIES.get('username111') if not v: return redirect('/login/') return render(reqeust,'index.html',{'current_user': v})
Cookie タイムアウトを設定するには 2 つの方法があることに注意してください。1 つは max_age (N 秒後のタイムアウト) を直接指定する方法、もう 1 つは有効期限の後に特定の時間を指定する方法です。 object
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>
例 2 :
実際には、検証 Cookie 関数は通常、他の関数で直接呼び出すことができるようにデコレータとして記述されます
<!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()),
views.py フロントエンドからページごとの行数を取得し、インスタンス化するときにページング クラスに渡します
<!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 でセッションの有効期限を設定する方法
Django データベースでの追加、削除、変更、クエリ操作の例
Django での Cookie とセッション インスタンスの操作を比較する
以上がDjango で Cookie を正しく使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。