のDjangoのORMの基本的な使用を使用します

準備:

Djangoプロジェクト、作成したアプリアプリケーション:
1:アプリケーション名のアプリINSTALLED_APPSリスト内の設定で構成された
2:静的店のCSSに使用されたフォルダ、JS、IMGやその他の静的ファイルを作成
ファイル:3静的フォルダの設立後、あなたが設定ファイルの設定を実行する必要が
    STATICFILES_DIRS = [ 
    os.path.join(BASE_DIR、「静的」)
] 
        外の世界にさらさ#は、まだすべてのリソース以下のサーバーのフォルダにアクセスすることができます
    :追加するには、ここに
         = STATIC_URL静的フォルダ接頭辞「/ XXX /」#インターフェイス名は、デフォルトと矛盾関係ありません
    静的なフォルダパス:
         STATICFILES_DIRS = [ 
    os.path.join(BASE_DIR、「静的」)は、#は、あなたの静的フォルダのパスである
    OS .path.join(BASE_DIR、 'static1')、
    os.path.join(BASE_DIR、 'STATIC2')
] 
#のPS:すべては、リストで見つかった静的ファイルパスを回し、その後直ちに停止し、リターン404見つけられませんでしたでしょう見つける
    
4:デフォルトのテンプレートフォルダ内のすべてのHTMLファイルは、 
    の外部のHTMLページを紹介するリソースの道:
        CDN導入します 
        静的下のプロジェクトフォルダ内のファイルのローカルファイル
  
5:2つの方法がバックエンドのためにアクションをトリガーするデータを提出するフォームを形成するために、
      <=「送信」タイプのINPUT>を
      <ボタン> </ button>の   
  
6:フォーム提出データアドレスを指定し
     、action属性が送信アドレス制御するために使用される
     :によって
            :フルパス
                <フォームアクション=「http://127.0.0.1:8000/login/を」> 
             パスのみサフィックスを書く:
                 <フォームアクションを=「/ログイン/」> 
             (現在のパスにデフォルトの提出を)書かない
     デフォルトの形式は、リクエストフォームを取得しています
GETとPOSTは、URLに含まれるパラメータに最も直感的なHTTPリクエストGET差の2つの基本的な方法です、POST本体にはパラメータの要求を渡します。

「標準答え」:ドット9
 1 市に.getフォールバックのブラウザでは無害であり、かつPOSTが再びリクエストを送信します。
2は...アドレスのURLがブックマークを生成することができGETとPOSTません。
3 ... GETリクエストがPOSTしません、しない限り、手動で、積極的にキャッシュブラウザになります。
4は...要求は、URLエンコードすることができGET、POSTとは、複数のエンコーディングをサポートしています。
5 ... GETリクエストパラメータは、ブラウザの履歴にフルに保持され、POSTパラメータは保持されません。
。6 URLパラメータで送信... GETリクエストは、限られた長さですが、それはPOSTを持っています。
図7は、引数のデータ型の場合、GETは、ASCII文字のみを受け入れますが、何の制限POSTはありません。
。8 ...のパラメータは、直接URLに露出しているため、POSTよりも安全GET、機密情報を送信するために使用することはできません。
URL経由で渡さ9.GETパラメータ、代わりにPOSTリクエストボディ。
GETとPOSTリクエストについて

 

実行クライアントのモードに応じて異なる論理コードを要求
	DEFログイン(要求):
		クライアントモードが提出した#取得要求
		全体の文字列を取得するには、印刷(request.method)#リクエストメソッドを大文字に
		request.method場合== 「GET」:
			レンダリング(リクエスト、「login.htmlと」)を返す
		ELIFのrequest.methodを==「POST」
			を返すのHttpResponse(「弟を受けた」) 
	個人的なアドバイス以下、このように書かれてに従い、コードの冗長性と混乱の構造を減らします問題
	DEFログイン(要求):
		request.method IF ==「POST」:
			のHttpResponse(「OK」)が返す
		(要求は、「login.htmlと」)レンダリングを返す



注意、関数は、文字列定義のデータ型を返す必要がありますその内部とのHttpResponse関連するので、他の2つの方法がもつれないように、のHttpResponseすることによって、この時間を達成するために必要

  

ドット着陸が発生しました:

	DEFログイン(要求):
	の方法により提出した#クライアントの取得要求
	文字列がすべて大文字またはPOST GET取得するための印刷(request.method)#リクエストメソッド
	request.method IFを== 'ポスト「:
	    (request.POSTの)印刷#あなたは、クライアントのポストから提出されたすべてのデータを保存するために大規模な辞書の中に置くよう
	    #1 request.POST:<のQueryDict:{」ユーザ名「:[」ジェイソン「]、」パスワードを「:[」123「]}> 
	    印刷(request.POST.get(」ユーザ名「))#リストものの取得した値が、時には、単一の要素の値を取得することです
	    #デフォルト値は内部のリストの最後の要素がかかります
		request.POST:<QueryDict番号:{ 'ユーザ名':[ 'ジェイソン'、 'エゴン']、 'パスワード':[ '123']}> 
	    印刷(request.POST.getlist( 'ユーザ名'))に# GetListの()必要なすべてのデータの1時間値のリストを取得します
		(request.POSTの[「password」を印刷GETによって取得するデータ取得方法を、非推奨])# 
	レンダリング(要求、「login.htmlと」)を返します
	
	、ユーザの好みのチェックボックスを:GETLISTシナリオを使用する必要があるすべての要素のリスト内の値を取得する
	最後の要素の値の一覧にのみをゲット

  

Djangoはデータベースに接続するには:

右PyCharmデータベースを検索するために、1フィルデータにクリック
2、データベース接続が確立され、設定ファイルを変更する必要があります
    DATABASES = { 
			{:「デフォルト」
				「ENGINE」:「django.db.backendsを。 MySQLの」、
				'NAME ''マイケル、
				'ホスト':' 127.0.0.1'、
				'ポート':3306、
				' USER ':'ルート'、
				'PASSWORD ':' 123' 
			} 
		} 
		PS:キーは、両方の必要大文字の
設定ファイルを変更した後3、データベースモジュールに接続し、デフォルトのpycharmを置き換え
モード1:__init__.py以下のプロジェクトフォルダに
モード2:あなたはまた、次のあなたの__init__.pyでフォルダを使用することができ

、固定文言:
    pymysqlインポート
    pymysql.install_as_MySQLdb()#は、ジャンゴとpymysqlのMySQLdbのではなく、データベースに接続伝えます

  

DjangoのORM:

レビュー:
ORMの定義:
オブジェクトリレーショナルマッピング
		クラス「」「表
		」「オブジェクト」テーブルのレコード
		属性「ターゲット」、「対応するレコード内のフィールドの値は

DjangoのORMは自動的にライブラリを作成するのに役立つのではなく、 :それは自動的に次のようにあなたは、テーブルを作成することができ

django.dbインポートモデルから
。ここにあなたのモデルを作成する壁紙#
クラスにユーザー(models.Modelを):
    上記のid = models.AutoField(PRIMARY_KEY =真)に述べた
    名前= models.CharField(max_lengthを= 32)
    パスワードをmodels.CharField =(MAX_LENGTH = 32)

    DEF __str __(自己):
        self.name復帰
    制御クラスの内部によってオブジェクトを印刷する場合、上述の#1 __str__が使用され、プリンタのデフォルトのname属性。もちろん、あなたが別の属性名に変更することができます。
 
データベース接続が確立されると、データベースの移行を使用する必要があります(同期)コマンド
のpython3 manage.py makemigrations小さなノートブック上のデータベースの変更を記録する(とテーブルを作成する助けにはなりません)
のpython3 manage.py、データベースの変更が同期移行データベースへ

#操作した後、システムは自動的に接頭辞を追加し、同じテーブル名を避けるためには、複数のアプリ間で表示されます

  

CRUDドット・プロセスが発生しました:


1.新規データ
#挿入データの操作データベースのユーザーテーブル
#モード1:
USER_OBJ = models.User.objects.create(名=ユーザ名、パスワード=パスワード)
#モード2:
USER_OBJ = models.User(名=ユーザ名、パスワード=パスワード)
user_obj.save()#オブジェクトをデータベースに保存する保存メソッドを呼び出し

、現在のデータ保存するためにそのように、ここで効果#を作成して保存



クエリデータ内
user_list = models.Userを。 objects.all()#は、データのすべてのユーザテーブルを取得
<クエリセットプリント(user_list)# :ユーザオブジェクト>、<ユーザ:ユーザオブジェクト>、<ユーザ:ユーザオブジェクトは> <ユーザ]> クエリセットオブジェクト得られる
#により得ることができますname属性を取得するオブジェクトは、印刷される内部クラス定義の__str__方法、

それはクエリオブジェクトの内部クエリセットのSQL文ビューの現在のポイントを得ることができますように長い#のクエリセットを
印刷(user_list.query)

タグのhref属性の指定を使用したが、ページジャンプHREFのパスは、パス全体を書くことができますが、サフィックス書くことをお勧めします
<a href="/reg/" class="btn btn-success">をデータ</a>を追加

リダイレクトリダイレクト
他人のウェブサイトはするあなたのパスを指定できます書くことができます
リダイレクト(「/のUserList」)を返す
リターンリダイレクト(「/のUserList /」)#この書き込みをお勧めします、リダイレクトを回避

値クエリセットオブジェクトを:
    インデックス値を(ありません推奨)
    1次回値法(推奨)
        
.query使用する:タイプは、クエリセットによって使用する



3.削除
models.User.objects.filterを(ID = 1).delete( )すべてのデータは、クエリセットされます#すべてのオブジェクトを削除し
たデータ予選のすべて除外するために使用されるフィルタ、ここで#

:データはクエリセットクエリデータまたはデータ型であるときのメモを、データ型の正常値は、次の方法の下で推奨され
USER_QUERY = models.User。 objects.filter(ID = edit_id)1次回()

URLの後にバンドのパラメータによって本明細書のID、値を持つGETリクエスト

の2つの方法でクエリデータ:
    フィルタ#はデータが存在しない、空の戻りが推奨
    する場合#を取得このプロパティは、エラーが存在しない



、編集4を

得るためのオブジェクトIDを編集するモード: 
実施例1:戻り値をもたらすために、同時に、缶隠し入力タイプ=隠されたタグを使用して
<INPUTタイプは=「隠し」名は=「edit_id」値=「{} {} user_obj.pkを」>
第二の方法:アクションのパラメータ設定フォームの形を取るために
、<フォームアクション= "/編集/メソッド= "ポスト" edit_id = {{user_obj.pk}}?"> 

編集:
。モード1:
models.User.objects。フィルタ(ID = edit_id).update(名=ユーザ名、パスワード=パスワード) 
実施例2:現在のデータオブジェクト取得
USER_OBJ = models.User.objects.filter 1次回(ID = edit_id)()
user_obj.name =ユーザ名
USER_OBJ。セーブ()

  

モデルレイヤと関連するデータのテーブルが変更された場合は、再度、データベース移行コマンドを実行しなければならない
小型の帳簿に記録manage.py makemigrationsのpython 
のpythonを実際の運用データベースを移行manage.pyの

  

  

 

おすすめ

転載: www.cnblogs.com/changwenjun-666/p/10993941.html