21.2.24


<Django CRUD 1>


スターバックスのウェブサイト上の飲料と食品情報データベースとモデル。PyのORM実践の挑戦


1.仮想環境の設定

  • miniconda 3のインストール
    仮想環境を設定する理由:分離バージョンとパッケージを取得するために複数のプロジェクトを行います.つまり、プロジェクトのために新しい紙を1枚出します.

  • まず端末にcondaをインストールします.
    インストール手順は次のとおりです.
    ダウンロード・ホームページからリンクのurlを取得します(バージョン3.7).wget+urlリンクにダウンロードします.

  • 仮想環境設定のcondaを実行します.
  • で発生したエラー:正常にインストールされていますが、condaをロード中にルーティング設定にエラーが発生しました.
    指導者と一緒に解決した結果、コンダのパスを変更し、端末の実行時に自動的に実行するように設定しました.具体的な方法が分からないので、後で似たような間違いがあったら試してみるべきです.
  • コンダをアクティブにします.conda create -n "westarbucks" python=3.7 conda activate westarbucks
  • ここで発生した問題:仮想化がなくgooglingによって解決方法が見つかり、source activate westarbucksで解決できます.
    ->仮想環境名はプロジェクト名と同じにする必要があります.
  • 仮想環境を一時的に閉じる必要がある場合は、conda deactivateを実行します.

  • 仮想環境の設定が完了したら、djangoとmysqlclientをインストールします.
    方法はpip install~.
    ->仮想環境を確認してください()

  • インストール完了後django-admin startproject westarbucks cd westarbucks python manage.py startapp productsアクティブなプロジェクトとアプリケーションを使用します.

  • データベースを設定します.mysql -u root -p ; +비밀번호 create database westarbucks character set utf8mb4 collate utf8mb4_general_ci;を選択して、データベース名を指定します.ここで指定したデータベース名は後でチャングセティンスファイルに直接書けばいいです.
  • データベースを設定しないと、後でいくら操作してもだめです.
  • ここまでが仮想環境の構築です.コンダを運転するには時間がかかりますが、確定していなければ仕事自体は不可能です.

    2. settings.py設定


    settings.pyはプロジェクトの「脳」部分なので、最も重要です.設定は難しいですが、守らなければならないことを守っていれば、すぐにできます.
  • IP:CRUD 2部分を許可し、先に設定します.
  • ALLOWED_HOSTS = ['*']
  • westarbucks/urls.pyのurlpatterns部分は空です.
  • 注記:
    未使用の要素にコメント処理を行います.
  • installでadminとauth
  • mediateでは、コマンドの下の2つの
  • DB部分:DB名が正しく入力されていないとCRUDはうまくいきません.
  • DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'westarbucks',
            'USER': 'root',
            'PASSWORD': 'sql칠 때 쓰던 것',
            'HOST': '127.0.0.1',
            'PORT': '3306',
        }
    }

    3. models.綴じ物


    まずは
  • 型です.pyはデータベースの内容と紙面を連用して直接現れる部分である.
  • ORMについては詳細に説明していませんが、移行中に倉庫で作成されたオブジェクトクラスがデータベース・テーブルに変換される可能性があるプロセスを慎重に推測します.
    指導者は、「それだけでなく、Python Shellで行われた一連の過程はORMの過程だ」と尖った.
  • は基本的に継承に基づいている.ここでは、倉庫モデルのプロパティを継承したクラスです.
  • クラスの各クラスは、データベースのテーブルです.
  • クラスの次の内容は、=とマークされた条件とともにテーブルに保存されます.
  • 各条件は、テーブル内のマーキング方法を決定する要因である.
    CharffieldはSQLでVARCHARの役割(すなわちテキスト)として機能します.
    DecimalFieldは小数点です(合計何桁+小数点を何個マークしますか?)
    最後にForeignKeyも
  • forinキーは、クラス内のキーの表示方法がデータベースのタイプに依存するデータベーステーブル間の関係を表します.
    △何もつながっていなければ、Forin Keyがないと書いてもいいです.
  • クラスmetaでは、データベース・テーブルに格納されている名前を制御したい場合に使用します.ここでスペースとタブを混用すると、引用符エラーが発生するので注意してください.
  • from django.db import models
    
    
    class Menu(models.Model):
        name = models.CharField(max_length=20)
        
        class Meta:
            db_table = "menu"
    
    
    class Category(models.Model):
        name = models.CharField(max_length=20)
        menu = models.ForeignKey('Menu', on_delete=models.CASCADE)
    
        class Meta:
            db_table = "categories"
    
    
    class Drink(models.Model):
        korean_name  = models.CharField(max_length=50)
        english_name = models.CharField(max_length=50)
        description  = models.CharField(max_length=100)
        category     = models.ForeignKey('Category', on_delete=models.CASCADE)
        
        class Meta:
            db_table = "drinks"
    
    
    class Image(models.Model):
        image_url = models.CharField(max_length=2000)
        drink     = models.ForeignKey('Drink', on_delete=models.CASCADE)
    
        class Meta:
            db_table = "images"
        
    
    class Allergy(models.Model):
        name = models.CharField(max_length=50)
    
        class Meta:
            db_table = "allergies"
    
        
    class Allergy_drink(models.Model):
        allergy_drink = models.ForeignKey('Allergy', on_delete=models.CASCADE)
        drink         = models.ForeignKey('Drink', on_delete=models.CASCADE)
    
        class Meta:
            db_table = "allergy_drinks"
        
    
    class Nutrition(models.Model):
        one_serving_kcal = models.DecimalField(max_digits=5, decimal_places=2)
        sodium_mg        = models.DecimalField(max_digits=5, decimal_places=2)
        saturated_fat_g  = models.DecimalField(max_digits=5, decimal_places=2)
        sugars_g         = models.DecimalField(max_digits=5, decimal_places=2)
        protein_g        = models.DecimalField(max_digits=5, decimal_places=2)
        caffeine_mg      = models.DecimalField(max_digits=5, decimal_places=2)
        size_ml          = models.CharField(max_length=50)
        size_fluid_ounce = models.CharField(max_length=50)
        drink            = models.ForeignKey('Drink', on_delete=models.CASCADE)
    
        class Meta:
            db_table = "nutritions" 
    質問は条件によって(模範解答)メニュー、カテゴリ、飲み物、アレルギー飲料、栄養素、イメージ、アレルゲンに分けられ、id値からどの値が長いかを判断します.これは復習が必要な部分です.
    よく漏れている部分settingsですpyinstallセクションでは、必ずアプリケーションを追加します.

    4.データおよびクエリーレポートデータベースCRUDの作成を試みる


  • 優先パラメータ:まず左がVSC+端末/右がMysqlです.

  • 長時間の環境で変更が完了した場合は、データベースに送信する操作が必要です.これは.
  • 組立およびプッシュ
  • 組立:python manage.py makemigrations
    ->そうすると、頭文字fiというパターンが生まれます.つまり、作業履歴を保存します.
    プッシュ:Python manage.py migrate
  • 環境設定が完了したら、Python shell(ロングシェル)に入ります.python manage.py shellそして今回のモデル派の全体的なレベルを持ってきて、importは以下のようにします.from products.models import *
  • Dan Python Shellを離れた後、再設定する必要があります.import全体としては、次の内容が同じアプリケーションから来ているので、正解ではなく、より快適にしたいと思っています.
    後続のid値、すなわちfolinキー値を入力する必要がある場合は、C操作時に変数として予め作成し、テーブル作成時に後続のクラスに挿入します.
  • 変数作成プロセス:
  • m1 = Menu.objects.create(name="음료")
  • 表:
  • を記入する
    Category.objects.get(name="콜드 브루", menu=m1)
  • ここでのエラー:
    ここでcreateで変数を作成し、次のテーブルでcreateで変数を作成することで、4つのテーブルではなく8つのテーブルが生成されます.すなわち,作成中に変数を同時に宣言し,必要であればgetを用いることができる.
    getは、1つの要素をインポートする場合にのみ使用できます.この場合に使用できます.
  • 正しい例
    >>> from products.models import *
    >>> c1 = Category.objects.get(name="콜드 브루")
    >>> c2 = Category.objects.get(name="블렌디드")
    >>> c3 = Category.objects.get(name="브레드")
    >>> c4 = Category.objects.get(name="케이크")
    >>> Drink.objects.create(korean_name = "나이크로 바닐라 크림", english_name="Nitro Vanila Cream", description = "부드러운 목넘김의 나이트로 커피와 바닐라 크림의 매력을 한번에 느껴보세요!", category=c1)
    <Drink: Drink object (1)>
    >>> Drink.objects.create(korean_name = "제주 비자림 콜드브루", english_name="Jeju Forest Cold Brew", description="[제주지역 한정음료] 제주 천년의 숲 비자림을 연상시키는음료로 제주에서 유기농 말차로 만든 파우더와 Cold Brew를 활용한 음료.", category=c1)             <Drink: Drink object (2)>
    >>> Drink.objects.create(korean_name = "망고패션후르츠", english_name="Mango Passion Fruit Blended", description="망고 패션 후르츠  주스와 블랙 티가 깔끔하게 어우러진 과일 블렌디드", category=c2)
    <Drink: Drink object (3)>
    >>> Drink.objects.create(korean_name = "딸기요거트블렌디드", english_name="Strawberry Yogurt Blended", description="딸기와 요거트의 상큼함이 가득 느껴지는 가벼운 과일 블렌디드", category=c2)
  • もちろん、これは仕方がないという意味ではありません.id値が少し変化した場合、私が設定したキー値が有効であれば、ここで変更できる方法は更新と削除です.
  • update :Class명.objects.filter(age=33;예시).update(job=FireFighter)delete :
    Class명.objects.filter(위동일).delete()
    ここで削除したいidまたはアイテム名を設定すると、セル全体を削除できます.
    実際、createプロセスが2回なければ、このプロセスは知りません.
    一連のプロセスが繰り返されると、結果が出力されます.


    このような過程です必ずもう一度やってみます.(再試行完了)