ページャ
Djangoは、分散処理のために、ときにデータの大量の時間を容易にするために、モジュールをページングを提供します。
最初の使用
手順を使用します
まず、インポート
django.core.paginatorインポートページネータ、EmptyPage、PageNotAnIntegerから
第二に、インスタンス化
ページネータ=ページネータ(<ページ・オブジェクト・リスト> <ページ番号毎のエントリ>)ページネータを生成するには、#オブジェクト
第三に、ページを使用する方法
ページ= paginator.page(<ページ番号>):ディスプレイ対応するページエントリ、ページのクラスを生成します
アウトライン
そのプロパティとメソッドを持って、ページネータとページクラス:主に提供Djangoの分配モジュールは、2つのクラスを使用しています
ページネータ
このような導入の以下の共通プロパティとメソッド。
まず、メソッドを作成します
ページネータ=ページネータ(<ページ・オブジェクト・リスト> <ページ番号毎のエントリ>)ページネータを生成するには、#オブジェクト
第二に、共通の属性
<ページネータオブジェクト> .count:ページングオブジェクトリストの数
<ページネータオブジェクト> .num_pages:ページ数
<ページネータオブジェクト> .page_range:ページ範囲
ページ
まず、メソッドを作成します
ページ= <ページネータオブジェクト> .PAGE(<ページ番号>)
第二に、一般的な方法
次のページで.next_page_number()#GETを<ページは、オブジェクト>
<ページは、オブジェクト> .previous_page_number()#取得前のページ番号
次のページであれば、<ページオブジェクト> .has_next()#
<ページオブジェクト> .has_previous()#が前の場合
例としては、次のとおりです:
景色
django.shortcuts インポートレンダリング から django.httpの輸入のHttpResponse から app01 輸入モデル から django.core.paginator 輸入、ページネータ、EmptyPage PageNotAnInteger #ここにあなたの意見を作成します。 デフ指数(リクエスト): 図書 = models.Book.objects.all() ページネータ =ページネータ(書籍、8 ) のtry : NUM = INT(request.GET.get(' P '、1 )) #の印刷(paginator.count ) #プリント(paginator.num_pages) #プリント(paginator.page_range) ページ= paginator.page(NUM) を除く:Eとして例外 ページ = paginator.page(1 ) page_range = paginator.page_range #プリント(page.next_page_number()) #印刷(page.previous_page_number()) #の印刷(page.has_next()) #の印刷(page.has_previous()) のリターン(要求、レンダリング' index.htmlを' 、地元の人々 ())は デフ(要求)を追加します。 図書 = [ ] のための私中範囲(100 ): 本 = models.Book(名前= ' ブック' + STR(I)、価格= 30 + I * I) books.append(書籍) models.Book.objects.bulk_create(冊) のリターンはHttpResponse(' OK ')
HTML
<!DOCTYPE HTML> <HTML LANG = " EN " > <HEAD> <メタ文字コード= " UTF-8 " > <タイトル>タイトル</ TITLE> <リンクのrel = " スタイルシート"のhref = " /静的/ DIST / CSS /bootstrap.css " > </ head> <body> <UL> {%用ブックでページ%} <LI> {{book.name}} </ LI> {%ENDFOR%} </ UL> <NAVアリア-label = "ページナビゲーション」 > <UL クラス = " ページネーション" > {%なら page.has_previous%} <LI> <a href= "/?p={{ page.previous_page_number }}" aria-label= " 前 "> 上一页 </ A > </ LI> {%他%} <LIのクラス = " 無効" > <ARIAラベル= "前" > 上一页 する</a> </ LI> {%ENDIF%} {%用 I で page_rangeの%} {%であれば、私== NUM%} <LIのクラス = " アクティブ" > <A HREF = " /?p = {{I}} " > {{I}} </a>の</ LI> {%他%} <LI> <a href=" /?p={{ I }} "> {{I}} < / A> </ LI> {%ENDIF%} {%ENDFOR%} {%なら page.has_next%が} <LI> <a href= "/?p={{ page.next_page_number }}" aria-label= " 次へ "> 下一页 </a>の </ LI> {%他%} <LIのクラス = " 無効" > <a href= "#" aria-label= " 次へ "> 次のページ </a>の </ LI> {%ENDIF%} { # <LI>#} { # <a href="/?p={{ page.next_page_number }}" aria-label="Next">#} { # 下一页#} { # </a>の#} { # </ LI>#} </ UL> </ NAV> </ body> </ HTML>
認証システム----クッキーとセッション
前叙
淘宝網は、記録Aのショッピングを見て、「ショッピングカート」になりますときにログインします。Bは自分のレコードを表示、ログインします。スマートサーバは、ユーザを識別し、覚えておくことができるように思われる、ユーザーが対応するデータを返し、ユーザー名とパスワードを接続するたびに入力する必要はありません。しかし、HTTPのプロトコルはステートレスなプロトコルである、それはユーザーに関する情報を保存することはできません。そして、上記の淘宝網の着陸を達成する方法ですか?クッキーとセッションこれには二つのことが必要です。
クッキー
クッキーとは何ですか?これは、クライアントのブラウザ収納容器です。何を保存しますか?ログインページにユーザー名とパスワードを入力すると、[送信]をクリックして、過去にサーバー認証をクッキーになります。確認した場合、サーバはキーと値のペアを返し、鍵は、セッションIDであり、その値はランダムに生成された文字列の文字列です。そして、クライアントのブラウザにこの鍵ペアは、クライアントのブラウザはクッキーを保存するには、このキーを置きます。次回は、サーバー、クッキーと、アクセスにアクセスします。クッキーサーバを検証します。ログイン情報を入れてクッキーに加え、あなたはまた、処理のためにサーバーに他の個人情報を置くことができます。
セッション
セッションとは何ですか?実際には、コンテナのサーバー側に保存されている、これはそれを格納何ですか?クッキーは、ブラウザがサーバーがクライアントに返されたキーと値のペアによって生成されたかどうかを確認するために、ユーザー名とパスワードを送信し、上記と言われています。しかし、クッキーとブラウザ上の第二の時間は、サーバが検証する方法ですか?実際には、最初の上陸は、サーバがセッションに保存されたクッキーのランダムな文字列を生成します。このように、将来のブラウザアクセスは、あなたがセッションIDクッキーのブラウザとのセッションでキーの値を入れることができたときに、検証のために、と比較するために持って来ら。このセッションでは、フィールドがSESSION_ID、session_data、有効期限が含まれている、django_sessionのデフォルトのデータベースに開催されます。
注意:同じサーバーの場合、同じブラウザは情報のみユーザーが保存されます。これはクッキーの使用上のウェブサイトに移動します。
一般的な認証プロセス
ログアウト
償却は、非常に単純で、それをクリアし、テーブルdjango_sessionセッション内のレコードデータにあります。次の文を実現することができます。
request.session.flush()