Pythonの60日目Djangoフレームワーク、ORMは、XSSでDjangoの攻撃、データの数を増やし、削除をカスケード接続、クエリを進めました

  ##基本的なクエリ

基本的なクエリ 
    RES = models.Student.objects.all()。まず()
     印刷(RES)
    オブジェクトのセットのリストを返すクエリセット 
    RES = models.Student.objects.values(" 名前" )1次回()
     印刷(RES)
    は、クエリセットのリストを返すには、辞書の設定 
    RES = models.Student.objects.values_list(名前印刷(RES)
    タプルクエリセットリストのセットを返します

    。#もちろんのを、このクエリは戻って書き込むことができます最初のリストを取るために)(1次回保ちます

  ##高度な検索

高度な検索= 1.に[1]、[2]フィールド名によるクエリ__in 
    RES = models.Student.objects.filter(age__in = [12,14,42 ])。すべての() 

で除外しないことにより2. (フィールド__in = [1,2])除外するという意味に加えて、 
    RES = models.Student.objects.exclude(age__in = [12,14,42 ])。すべての() 

ワイルドカード照会等3. 
    WHEREリーで始まるすべての名前について、「リー%」#の代表のような名前
    #が開始されているものに鈍感name__istartswithケース表し 
    RESを= models.Student.objects.filter(name__startswith = リー).ALL() 

    WHEREを「%白」#は、すべての単語が白で終わるの一致を示しような名前
    終了しているものに鈍感name__iendswithケースを表し 
    RES = models.Student.objects.filter(name__endswith =ホワイト).ALL() 

    「%小さい%」のような名前が一致するすべての単語中間小印刷手段
    #1 name__icontainsは何の単語を含む、不感表し 
    RES = models.Student.objects.filter(name__contains =を" " ).ALL() 

... ..と__range =介してカラム名の間に4位置、終了位置を開始]間隔閉じ 
    RESを= models.Student.objects.filter(id__range = [2,5 ] ).ALL() 

5スライスリミット[10:20]前面開口部閉鎖後10から20まで取ることによってインデックスを表し 
    RES = models.Student.objects.all()を5 :. 7 ] 

によって6.注文が先行し、順方法「 - 」デフォルト昇順、降順 
    RES = models.Student.objects.order_by(ID ).ALL()

    繰り返し年齢フィールドは同じ年齢であれば、idフィールドの昇順によると、降順で注文することも押し 
    RES = models.Student.objects.order_by(-age ID ).ALL() 

7グループが
    #のパケットニーズDjangoのに使用される方法
    から django.db.modelsはインポート、MAX、MIN、合計カウントを
    RES = models.Student.objects.values(" 名前").annotate(XXX =カウント(" IDを" ))
    表します名前フィールドを検索し、テーブルにカウントidフィールドを計算し、エイリアス名フィールドでグループ化されるようになったことはXXXで、#プリントを使用することができます(res.query)ビューSQL文
   SELECT "app01_student"。 "名前"、COUNT( "app01_student"。 "ID") "XXX" AS "app01_student" BY "app01_student"グループから。 "名前" 

ザのみだけ列値取る8 
    のRES =モデル。 Student.objects.only(名前年齢).ALL()
    オブジェクトのリストを含むクエリセットである取り出し、及びオブジェクトID列名のフィールドに含まれる値
    値の差分をとると値のみですオブジェクトのリストを設定し、値が辞書のセットのリストで取る
    、あなたが唯一のidフィールドが含まれているかどうかに関係なく、ID彼が取るために一緒にあなたのフィールドがかかります

。#他の列から延期列の値を除去することに加えて、9 
    models.Student.objects.deferの=のRES(" ID "" 名前" )。
    すべての() リストから取り出したオブジェクトの集合であり、そして、何のidフィールドが存在しないかどうか、あなた、あなたは価値のid列から取り出されます

10。使用して
    #を、我々は、データベースを構成するときに、データベースがデータベースに追加されます
    。#DATABASES = { 
         'デフォルト':{ 
             'ENGINE': 'django.db.backends.sqlite3'、 
             'NAME':OS。 path.join(BASE_DIR、「db.sqlite3」)、 
         } 
    } 
    #は、複数のデータベースが接続されている場合、それが使用してデータベースを使用することによって決定することができる 
    (RES = models.Student.objects.all()を使用しデフォルト

11、ルックアップテーブルどのように多くのデータの合計 
    RES = models.Student.objects.count() 

12の最初のデータ 
    RES = models.Student.objects.first() 

13です。データの最後のピース
    RES =models.Student.objects.last() 

14より大きいかまたは以下以下GTEよりGT LTがLTEに 
    RES = models.Student.objects.filter(= id__gt。8 ).ALL()

    RES = models.Student.objects.filter( = 8 id__lte ).ALL() 

15 a及び操作、及びコンマをフィルタに使用される 
    RES = models.Student.objects.filter(ID = 2、年齢= 23である#を返すクエリセットまたはタイプ

16。操作または
    またはQ法は、ジャンゴからインポートする必要がある
    から django.db.models インポートQ 
    RES = models.Student.objects.filter(Q(ID = 2)| Q(年齢= 12である))

    RES = models.Student.objects .filter(Q(Q(ID = 2)| Q(年齢= 12である))&Q(名前= "李Tiezhu " ))
       |表現や表現と&

オリジナルの17に基づいて更新は、例えば、私は1つの+の列の値全体たい
    #はジャンゴでFメソッドからインポートする必要がある
    から   django.db.models インポートFの
    モデル。 Student.objects.update(F(年齢)+ 1 このフィールドは、すべての年齢+ 1意志

18ネイティブSQLステートメント
    Djangoはまた、ネイティブSQLを記述するための方法を提供してくれる
    から django.db 輸入コネクション     #のインポート接続 
    カーソルconnection.cursor =()    は、カーソルオブジェクトを生成 
    cursor.execute()     、SQLステートメントを提出することができ、また、パラメータを渡すことができます
    cursor.fetchall()   すべての結果拾う 
    cursor.fetchone()   結果拾う
    
    models.Student.objects.raw()    このメソッドはまた、SQL文を提出することができますが、使用はお勧めしません

#の注意: 
1 。ORMを達成するために使用ORMを実現させる機能、 
 2.後であなたをお勧めしません独自のビジネス・ロジック、混合使用します

  ##増加し、サプリメントを削除します

により

最初のデータ増加 
models.Student.objects.create(名= " XXXの"、年齢= 12である

データが増加複数の

OBJ = [ 
    models.Student(名前は = " QQQ "、年齢= 12である)、
    モデル.Student(名 = " AAA "、年齢= 32 )、
    models.Student(名 = " WWW "、年齢= 21である
] 
models.Student.objects.bulk_create(OBJ) 

削除

models.Student.objects.filterを(名前 = " XXX" ).Delete()
あなたは、単一のテーブルには問題を削除しませんが、このテーブルと他のテーブルの主キーが外部キー関係を確立する場合は、このデータを削除した場合、別のテーブルから対応するデータが削除されますこれは、カスケード削除としても知られているので、私たちが必要としない場合、あなたはon_deleteに割り当てられ、外部キーを構築することができます
#のいくつかのパラメータのon_delete意味
    DELETE CASCADEのデフォルトのカスケードを
    #のそれは外部キーを関連付けられている場合、カスケード削除をキャンセルSET_NULLをNULLに関連付けられた値を配置するために対応し、データを削除し、NULLをサポートする必要がある
    #のキャンセル削除にset_defaultカスケードを、削除されたデフォルト値によって置き換えられ

、クラスの学生(models.Model):
    名前 = models.CharField(MAX_LENGTH = 32 
    TEAC = models.ForeignKey(' 先生'は、null = Trueの場合、on_delete = models.SET_NULL)

   XSSで##ジャンゴ攻撃

長さ:クロスサイトスクリプティング攻撃(JS)
    
    原因:
        入力は、ユーザによって入力されたデータが得られ、制御することができないユーザは、によって引き起こされるブラウザ・コードの変更によって解析され
        
        EG: <スクリプト> 1ユーザのクッキー2を得るためには、ハッカーに、このクッキーを送信しますデータベース</ SCRIPT> 

views.py:
                
    MSGは = []
     DEF (要求を)コメント:
         IF   request.method == ' GET ' 返さレンダリング(リクエスト、" comment.htmlを" 他には
            コメント(= request.POST.get コメント
            msg.append(コメント)
            を返す(リクエストをレンダリング、"comment.html " 

    DEF   表示(リクエスト):
         リターンレンダリング(要求、' show.html '、{ " MSG " :MSG})

comment.html:
     <FORM ACTION = " /コメント/ "メソッド= " ポスト" > 
        <入力タイプ= " テキスト"名前= " コメント" > 
        の<input type = " 提出"値= " 提交" > 
    </ FORM>

show.html:
         <UL>
            {ためにアイテム MSGの%}
                 <LI>アイテム{{|}}セーフ</ LI> 
            {%ENDFOR%}
         </ UL> #1 注:|安全なデフォルトではオフになって、マニュアル開の効果を検証するために


 

 

おすすめ

転載: www.cnblogs.com/liangzhenghong/p/11203427.html