day57

ORMのクエリの最適化

クエリオプティマイザを延期するだけ

データベースへの圧力を減らします

のみ:

only括号内放フィールドは、クエリ結果は、データの集合のリストです对象

これらのフィールドの属性データは、もはやデータベースを照会しますポイントブラケットをオブジェクトん、直接就是对象获取属性

也支持点击括号内没有的字段,但是每点击一次就会重新走一次数据库查询

短所:非効率的な

例:

res = models.Book.objects.only('title')
#print(res)     #拿到对象  数据库语句只走一次
for i in res:
    print(i.title)  #拿到数据所有书名   走一次数据库语句
    print(i.price)  #走5次数据库查询语句,第1次是总体的查询语句,后面4条是4条书籍字段的语句

延期:

例:

res = models.Book.objects.defer('title')
#print(res)   #打印的结果是列表套对象,走一条数据库语句
for i in res:
    print(i.title) #走5次数据库查询语句,第1次是总体的查询语句,后面4条是4条书籍字段的语句
    print(i.price)  #点price 走一次数据语句 

概要:抗関係でお互いにのみ延期

どのようなオブジェクトをチェックアウトフィールド延期括弧に入れてしても、このような分野ではありません

あなたはそれぞれのクリックをクリックしますもう一度データベースがかかります

そして、あなたは非括弧内のフィールドをクリックした場合は、データベースが稼働のみ、オブジェクトのプロパティでなりません

select_related与prefetch_ralated

例:

res = models.Book.objects.all()
#print(res)    #只走一次数据库语句
for i in res:
print(i.title)  #只走一次数据库语句
print(i.publish)  #正向查询(按字段)    #走5次数据库查询语句,第1次是总体的查询语句,后面4条是4条出版社字段的语句   #多次查询会对数据库造成压力

例:select_related最適化の例を使用

特長:

  1. Select_relatedのみ、外部キーフィールド括弧に入れ、外部キーフィールドのタイプは一対多だけではありませんか、多くの多くの
  2. 内側および外側ブラケットに関連付けられたテーブル内部自動分割表は、自動スプライシングテーブルに現在のキーフィールドで動作し、その後、クエリデータテーブルの一つにパッケージからオブジェクト
  3. カンマで区切られた外部キーフィールド、複数のを置くことができ、大きなテーブルを構成する現在のテーブルに関連付けられた複数の外部キーテーブルのフィールドを送信
  4. 左と同様に、右に参加、参加します

利点:

クロスデータベーステーブルには、データベース上の圧力を低下させる、文を繰り返し行っていません

res = models.Book.objects.select_related('publish')
#print(res)    # 走一条数据库语句
for i in res:
print(i.title)   # 走一条数据库语句
print(i.publish)  # 走一条数据库语句

prefetch_ralated:

特長:

  1. 内部サブクエリは、自動的にステップクエリを複数のテーブルでステップのに役立ちますprefetch_ralated、プログラムの結果は、オブジェクトにパッケージ化、またはユーザーのオペレーティング分割表に感じています
  2. サポートブラケットはタイプに制限は、多くの分野に多くなることはできません、複数の外部キーフィールドを渡し、それぞれが外部キーフィールドを入れて、より多くのマルチテーブルクエリのSQLステートメントを取ります

例:

res = models.Book.objects.prefetch_related('publish','authors')
#print(res)    # 走两条数据库语句
for i in res:
print(i.title)   # 走两条数据库语句
print(i.publish)  # 走两条数据库语句

違い:

select_related時間:コンティンジェンシーテーブルの上に

prefetch_related時間:推奨何千ものテーブルに対するクエリの数

MTVとMVCモデル

MTV:DjangoはMVCフレームワークで、本質的に、MTVのフレームワークであると主張

MTV:に分割することができます

M:モデル

T:テンプレート

V:ビュー

MVC:

M:モデル

T:テンプレート

C:controllarルートマッチ

パラメータの選択

パラメータの選択肢の間、のは、DjangoのORMを見に作成する方法をクラスのテーブルのフィールドを作成してみましょう、ではない、それは次の

# 举例这是一张用户基本信息表
class UserInfo(models.Model):
    username = CharField(max_length=32)
    age = IntegerField() # 整型字段不要传max_length参数哦----特别注意
    gender = CharField(max_length=2)# 用户性别

上記のUserInfoテーブルを通じ、我々はそのため、我々は百万ユーザー情報を持っている場合、1万人のユーザーことを、どうか、ユーザーの性別欄に、オス/メス、2つだけ人間の男女の表現かのように考えることができます偶然90万上の性別は女性です。

、それは私たちのフィールドの説明以来、唯一の2つの記述は、このフィールドを完了することができるようになり、問題の原因は、ユーザーの性別に記載されている。この時、私たちがどのような各ユーザーの性別を記述するのに便利で簡潔な形をしたくない理由は?

今回は、私はまだ覚えているかどうかわからない、何のデータ型は、それが唯一の二つの形式ではありませんがありますか?(?ブール値)は、はい、それはあなたがまだブール値(:1 /偽:真0)を覚えて、ブール値です。

これは、1つの方法ですが、この場合には、残念ながら私たちは、このようにブール値を使用する必要はありません、これにつながる選択肢パラメータ

我々はまだ、ユーザーの性別欄性別レコードを記述するために数字を使用し、我々はデータベースを知っていることを学んだ、情報は、整数、文字なぜべき保存することができますか?もちろん、スペースよりも理由の小さな整数文字を占領しました。

注:このすべてのは、例えば、性別フィールドで、ここでの数字で行く、チームの多数を記述し、わずか数記述データで行われますが、できるわけではありません!

パラメータ選択の概念は:それはパターンリスト/タプルの種類との対応関係を表すいくつかの少数のタプルとネストされた方法であります

アヤックスの概要

アヤックス、すなわち「A 同期 J avascript AのNd XML」(非同期JavaScriptとXML)は、インタラクティブ作成を参照のWebページの開発技術の応用を。

アヤックス=非同期のJavaScriptとXMLまたはHTML(標準一般化マークアップ言語のサブセット)。

アヤックスは速い動的なWebページを作成するための技術です。

アヤックスは、ページのWebページ全体の技術的な部分をリロードすることなく更新することができます。

長所:舞台裏サーバと少量のデータを交換することにより、Ajaxの非同期ページの更新を行うことができます。この手段は、ことのページの特定の部分のために、ページ全体をリロードせずに更新します。(この機能は、ユーザーが知らないうちに、応答を要求するプロセスを完全に感じることができます)

XMLはマークアップ言語であります

文法のシナリオ

  1. 書き込み設定ファイル

  2. フロントページを書くことができます(odooフレームワークERP)

    各企業は内部管理ソフトウェアフレームワークを開発するために設計された独自の社内管理ソフトウェアを、持っていますodoo

    実装フレームワークpython2に依存するすべての内部機能odoo

    給与計算

我々は唯一のjQueryで組織学は、jQueryのブラケットに導入された場合の方法は、ネイティブ版のjs使用を把握していないカプセル化されたときに最初に手動でブレースを入力して覚えておく必要があります:$アヤックス({})

基本的な構文アヤックス:

$.ajax({
    url:'',    //数据提交的后端地址,不写就是往当前页面提交,也可以写后缀,全称,跟actions一样
    type:'post', //提交方式  默认是get请求
    data:{'i1':$('#d1').val(),'i2':$('#d2').val()},   //提交的数据
    success:function(data){   //形参data就是异步提交之后后端返回结果
        $('#d3').val(data)    //回调机制需要做的事情
    }
})
一旦你使用了ajax 必知必会三板斧都不再作用于页面  而是与ajax交互
a标签href参数   get请求
form表单        get/post
ajax           get/post

前端と後端データを符号化するフォーマット

フロント及び対話データの後端異なるバックエンドデータ処理のための異なる符号化フォーマット

request.POST
request.FILES
  1. URLエンコード
  2. へformdat
  3. アプリケーション/ JSON
form表单发送数据的编码格式
Content-Type: application/x-www-form-urlencoded
  1. フォームフォームのデフォルトのエンコーディングがURLエンコードされました

    urlencoded所对应的数据格式
                        username=jason&password=123
                        django后端针对urlencoded数据 会自动解析并且帮你封装到request.POST中
  2. Content-Typeのコーディングフォームフォームの送信ファイル:マルチパート/フォームデータ;境界= ---- WebKitFormBoundaryhjKCHQHDmcE62iMQ

    データ用FORMDATA形式は、ブラウザのを見ることができません

    django后端只要你的数据满足urlencode格式
    username=jason&password=123
    就会自动帮你解析到request.POST中
    如果你是一个文件对象django后端也会自动识别帮你放到request.FILES中
  3. フォームは、データを送信することはできませんあなたがアヤックスのあなたの唯一の手段を通過したいJSON形式を形成します

AJAX、JSON形式のデータ送信

ajax发送数据的编码格式
ajax能够发送
urlencoded
formdata
application/json
Content-Type: application/x-www-form-urlencoded; charset=UTF-8ajax默认的编码格式也是urlencoded 也就意味着后端django也是将数据解析到request.POST中

それが終了する前と後の相互作用に来るとき、あなたは、符号化されたデータフォーマットの形式と一致する必要が

ない欺く人は、リクエストヘッダのデータ形式は、別のフォーマットがされています

AJAX、JSONデータ伝送フォーマット

dumps        stringify
loads         parse
Content-Type: application/json
{"username":"jason","password":"123"}

データのバックエンドのためのDjango JSON形式は、唯一request.bodyそのまま入れてますかデータのいずれかの処理をしない、自分の手に対処する必要性

$('#d1').click(function () {
        $.ajax({
            url:'',
            type:'post',
            contentType:'application/json',  # 1.注意点1
            data:JSON.stringify({'username':'jason','password':'123'}),  # 2.注意点2
            success:function (data) {
                alert(123)
            }
        })
    })

伝送フォーマットデータファイルアヤックス

組み込みオブジェクトによって new

両方のデータファイルを運ぶことができます。このオブジェクトは、共通のキーと値のペアをサポート

 $('#d1').click(function () {
                // 先生成一个内置对象
                var MyFormData = new FormData();
                //1.先添加普通的键值对
                MyFormData.append('username','json')//添加了一组普通的键值对
                MyFormData.append('password','123');
                //2.添加文件数据
                MyFormData.append('myfile',$('#d2')[0].files[0];)//如何获取input框中文件对象$('#d1')[0].files[0];)
                
$.ajax({
    url:'',
    type:'post',
    data:MyFormData,  # 1
    //发送文件必须要指定的两个参数
    contentType:false//不适用任何编码 MyFormData对象内部自带编码 django后端能够识别 # 2
    procesData:false,//不要处理数据  #3
    success:function(data){
    
    }
    })
})

連載

drf  django restframework
        from app01 import models
        from django.core import serializers
        # 序列化目的  将数据整合成一个大字典形式 方便数据的交互
        def zzz(request):
            user_queryset = models.User.objects.all()
            # [{username:...,password:...,hobby:...,},{},{},{}]
            # user_list = []
            # for data in user_queryset:
            #     user_list.append(
            #         {'username':data.username,
            #          'password':data.password,
            #          'gender':data.get_gender_display(),
            #
            #          }
            #     )
            res = serializers.serialize('json',user_queryset)
            return HttpResponse(res)

循環リスト

循環リストは、メモリチェーン構造の別の形態です。これは、ノードの最後の表を特徴とするポインタの視野点最初のノードが、リスト全体が環を形成します。

(1)鎖単一サイクル-で単一リンクリスト、終端ノードポインタ NULLヘッダを指すようにフィールドまたはノードにノードを起動します。

(2)多重鎖循環リスト - チェーンリングの複数のノードのリスト。

利点は:いずれかのノードから始まるテーブルから他のノードテーブルに見出すことができます

条件に空のリストの分析:

ヘッド==頭部>次。

リア==リア>次。

テールポインタ

テールポインタリア開始ノードと終端ノードa1で表される鎖のロビン時間を検索O(1)です。表は、しばしばテーブルの位置をエンドツーエンドで動作し、従って、テール・ポインタ・リストの使用に有用な単一サイクルを表します。図中の下側の目に見えるとロビンテールポインタリスト。

例えば2つのリスト上の線形形状(A1 ...)と(B1 ... BN)線形演算テーブル(A1 ...、B1 ... BN)に接続されているので実現します

LinkListConnect(LinkListA,LinkListB)
{//假设A,B为非空循环链表的尾指针
LinkListp=A->next;//①保存A表的头结点位置
A->next=B->next->next;//②B表的开始结点链接到A表尾
free(B->next);//③释放B表的头结点
B->next=p;//④
returnB;//返回新循环链表的尾指针
}

注意:循環リストポインタがNULLではありません

注:これにより、円形リストにないNULL、それはトラバース時間に関し、それは、終了条件がもはやPがないと判定された場合、またはP->次は、非円形リストとして空であるが、それらは、ヘッド・ポインタに等しいか否かを判断します

サイクリング条件:

  单链表                  单循环链表
p! = NULL              -> p!= L
p!->next! = NULL       -> p->next! = L

最後に、ノードポインタが先頭へのポインタであります

おすすめ

転載: www.cnblogs.com/gfhh/p/11960615.html