1、新しく作成されたアプリは、settings.pyに行くために登録する必要があります
略称: 'app01'
完了: 'app01.apps.App01Config'
2、Djangoプロジェクトを開始する時間、それは(ページを更新するためのコードを変更した後も効果はありません)ポート番号がそれ以外の場合は、バグを引き起こす可能性が高いだろう、唯一のDjangoプロジェクトの占有であることを確認する必要があります
3、ユーザーが唯一のあなたに関連するリソースにアクセスできるURLを開くには、両方のURLで、リソースにアクセスすることができます
図4に示すように、バックエンド・リソースは、一般的に手動でユーザーに公開するかどうかを指定する必要があります
5は、Djangoはあなただけのページにすることができますいくつかの回をリフレッシュする必要があるので、自動的に、コードをリセットデフォルトでサポートされますが、時にはそれが再起動メカニズムが比較的遅いですが、それは一般的に手動でジャンゴを再起動されます
再起動のメカニズム:コード内のリアルタイム監視ファイルの変更は、限り変更があったとして、それが自動的に再起動します、あなたのコードはまだ終わっていないことがあり、この時は自動的にエラーます
6、フォームは、双方向データで運ばれたデフォルトのフォームget要求は、URL /?名である=&PWD = XXXのXXX、http://127.0.0.1:8000/login/?username=zekai&password=123
ポストは、リクエストメソッドにより変更することができた後に、ミドルウェアの設定ファイルへのリクエストを投稿する必要がコメント
ミドルウェア= [ ' django.middleware.security.SecurityMiddleware ' 、 ' django.contrib.sessions.middleware.SessionMiddleware ' 、 ' django.middleware.common.CommonMiddleware ' 、 #'django.middleware.csrf.CsrfViewMiddleware'、 " django.contrib .auth.middleware.AuthenticationMiddleware ' ' django.contrib.messages.middleware.MessageMiddleware ' ' django.middleware.clickjacking.XFrameOptionsMiddleware " 、 ]
フォームフォームの提出データの送信先は、制御作用を有します。
1.場合は、提出され、現在のデフォルトのネットワークアドレスを書かれていません
2.また、接尾辞/インデックス/(使用)を書くことができます
3.また、完全なパスを書くことができます
第二に、静的ファイル
静的ファイル:前歯れて書かれた文書、私たちはこれらのファイルは、前フレームのブートストラップクラスを含む「静的ファイル」、画像、CSSファイル、JSファイルと呼ばれる呼び出すことができ、その後、引き継ぐ使用します
CSSフォルダ(現在のサイトのすべてのスタイルファイル)、jsのフォルダ(すべてのjsファイルの現在のサイト)、IMGフォルダ(現:デフォルトでは、静的な、静的なデフォルトフォルダのサブフォルダの下のフォルダ内のすべての静的ファイルは、フォルダを作成しましたウェブサイトのすべての画像ファイル)、その他(前のスケルトンコード、サードパーティ製のプラグインのコード)
静的な設定ファイル:
= STATICFILES_DIRS [ os.path.join(BASE_DIR、「静的」) ] #は、限り、あなたはパスの静的フォルダを入力すると、特定のファイルにアクセスすることができます STATIC_URL = 「/静的/ 」 #これは静的ではなく、フォルダインターフェイスの名前ではありません接頭辞 「」「限り、あなたは、静的なファイルにアクセスしたいリソース・ファイル・パスのような静的で開始する必要があります「」」 #手動で静的ファイルのユーザーに公開されているすべてのリソースフォルダ STATICFILES_DIRSの=を[ os.path.join(BASE_DIR、「静的」)、 #実際のフォルダパスの os.path.join(BASE_DIR、' static1 ')、 #実際のフォルダパスの os.path.join(BASE_DIR、"STATIC2 ')、 #の実際のフォルダパス os.path.join(BASE_DIR、' static3 ') #実際のフォルダパス ] #静的ファイルインターフェイス接頭語"動的解像度" {%負荷静的%} <リンクREL = " このスタイルシート" HREF = " %{ 'ブートストラップ3.3.7-DIST / CSS / bootstrap.min.cssの'静的%} " > <SCRIPT SRC = " ブートストラップ3.3.7-DIST / JS /上のブートストラップに{%静的」 .min.js'}%" > </ SCRIPT> #動的インターフェイスプレフィックスを取得するパーサーを使用して
三、リクエストメソッド
あなたが現在の要求を取得することができます1、request.method方法は、要求モードでは、GETリクエストを分割することができますし、POSTは異なる書き込み論理を要求します
データ処理の多くのデータの2、処理だけでなく、唯一wsgirefモジュール、Djangoの後端
GET (それは大きな辞書のようなものです)を提出取得request.GETデータ収集フロントエンドを 値 request.GET.get(「ユーザ名」) #をデフォルトの値はリストですが、ちょうど最後の要素のリスト取る #を強くお使用することをお勧め形で括弧内の値 #あなたはすべてのアウト(******)のリストに直接たい場合 request.GET.getlist(「ホビー」) POST request.POSTデータ収集フロントエンドポスト提出(それは大きな辞書のようなものです) 値 request.POST.get(「ユーザ名」) #デフォルト値はリストですが、ちょうど最後の要素のリストを取る #は強くあなたが括弧の中にフォームの値を使用することをお勧め #あなたが直接(すべてを一覧表示したい場合*** ***) request.POST.getlist(' 趣味')
第四に、データベース
1は、Djangoのデフォルトは、内蔵されたSQLiteデータベース、あなたはそれが別のデータベースを使用する場合は、あなたが設定コンフィギュレーションファイルを設定する必要があります
DATABASES = { ' デフォルト' { ' ENGINE ':' django.db.backends.mysql ' 、 ' NAME ':' day51 ' 、 ' ホスト':' 127.0.0.1 ' 、 ' PORT ':3306 、 ' USER '。' ルート' 、 ' PASSWORD ':"123 "、 ' CHARSET ':' UTF8 ' } }
2は、だけでなく、ファイルやアプリケーション名の初期化初期化ファイルの名前でDjangoプロジェクトを伝えるために、デフォルトの接続のMySQLdb MySQLを使用していませんが、pymysqlの使用
輸入pymysql pymysql.install_as_MySQLdb()
五、ORM
アプリケーションの下models.pyでモデルクラスを書く必要性
クラスのユーザー(models.Model): #は、Djangoでのユーザのテーブルの主キーフィールドへのidフィールドが主キーフィールドという名前のIDを作成するためにあなたのテーブルにデフォルト設定されますマスターキージャンゴ辞書に書き込むことはできませんORM #1 (ID = models.AutoFieldをあなたはDjangoが自動的に作成するのに役立ちますができません主キーフィールドを指定するとPRIMARY_KEY = TRUE)# ユーザ名= models.CharField(max_lengthを= 32) #のユーザ名VARCHAR(32)CharFieldですがMAX_LENGTHパラメータを指定する必要があります パスワード= models.IntegerField ()# のパスワードはint
その後、次の2つのコマンドを実行する必要があります
#のデータベースの移行(同期)コマンド のpython3 manage.py makemigrations #だけの小さなノート(移行用フォルダ)にデータベースの変更を記録し、データベースの変更はありません のpython3移行のmanage.pyの #は、実際にデータベースに同期データベースレコード変更します #の速記を makemigrations 移行
注:限りモデルがデータベース・コード・ラインパイプで移動するように、それが必要である上記の2つのコマンドは必須再実行
六、削除は、検索テーブルのフィールドを変更します
:表がフォローアップの外に作成されたときにもフィールドを追加したいと思い、2つの方法があります
#1、新しいフィールドのデフォルト値が アドレス= models.CharField(= 32 MAX_LENGTH、デフォルト= 「中国」) #新しいフィールドへの2は、空に 年齢= models.IntegerField(ヌル=真)
削除された(注意):に2つのコマンドを再実行してフィールドmodels.pyに直接フィールド、コメントを削除し、
注:実行後、すべての対応するフィールドのテーブルのすべてのデータを削除し、通常の状況下で、真の意味を削除するために使用されないよう
変更:その後、モデルクラスで直接変更し、変更を保存します
検索データを変更するには、七、追加および削除
#のORMのアクションは、クラスモデルの名前が必要です から app01 インポートモデル #チェックデータ models.User.objects.all() #すべてのデータ取得 models.User.onjects.get(ユーザー名=ユーザー名) #を直接取得オブジェクト、文句を言うでしょう RES = models.User.objects.filter(ユーザー名=ユーザー名) #をオブジェクトのリスト」を取得し、文句はありません res.queryの #は、SQL文を取得 USER_OBJ = res.first() #GET最初のオブジェクト #の成長データ 1.models.User.objects.create(ユーザー名=ユーザー名、パスワード= パスワード) 2.user_obj = models.User(ユーザ名=ユーザ名、パスワード= パスワード) user_obj.save() #は推奨されません使用 #削除されたデータ models.User.objects.filter(条件).Delete() #1 の変化のデータを途中:. Models.User.objects.filter(条件).Update() ユーザー名 = request.POST.get(" ユーザ名' ) パスワード = request.POST.get(' passowrd " ) models.User.objects.filter(ID = edit_id).Update(ユーザー名=ユーザー名、パスワード= パスワード) #のフィルタは、getリスト、実際にフィルタ演算でありますすべてのバルク・オペレーション・ #複数のデータのフィルタ結果の一覧がある場合は、それが一度にすべてを変更します。同様に一つのループのために修飾 2 第二の方法:. Denit_obj.save()は推奨されない edit_obj.usernameを = ユーザー名 edit_obj.password =パスワード edit_obj.save() #すべての変更を再び第二のアプローチは、すべてのフィールドを完了するために開始すると、非常に低い効率
八、要約データCRUD
1. ORMショーに先行するデータのすべての すべて() ループ用テンプレート構文 2. [新規]ボタン(新しいユーザーの操作を)追加 のhrefラベルを直接バックエンドのロジックトリガー 3.ボタンを削除、編集を追加 get要求は、パラメータを運ぶ使用対応するデータのバックURLのid値に追いつくための特性、 request.GET.get() あなたが編集している場合は、再レンダリングページ、編集対象の先端が通るに 削除した場合、直接(フィルタリング)。削除()