[TIL] CRUD (2)


APIサーバの作成

  • 画面情報ではなく、画面を構成するために必要なデータを提供します.
  • バックエンドの主要な役割は、Webブラウザの構成に必要なデータを簡単に交換できることを保証します.
    JavaでDAOを使用する場合、dJango/pythonでviewsを使用します.pyで論理を記述して交換する.

    今まで触れてきた子供たちの大まかな役は?

  • models.py:DBと通信するためのファイル
    テーブルの作成、追加、削除などの管理が可能です.
  • urls.py:パスを設定するファイル
    Webブラウザに接続パスを設定します.
    アプリケーションを使用して、最上位プロジェクトの作業パスを指定できます.
  • views.py:機能実装用の論理ファイルの作成
    処理したい論理を対応するファイルに宣言して操作します.get() , post , put , delete
  • manage.py:サイトの管理を支援するスクリプト
    他のインストールタスクを必要とせずにWebサーバを駆動
    migrate起動!
  • settings.py:Webサイトの設定があるファイル
    このファイル内でWebプロジェクトに関する設定ができます
    データベースバインド、アクセス可能なipアドレスなど...
  • 1.httpieのインストール

  • プロトコルツール
  • http webサービスを送信、受信するツール!

  • 2.仮想環境の設定

    conda -n
    conda activate
    pip install django
    pip install mysqlclient

    appの作成


    アプリを作成し、Pythonファイルを変更します(しないとエラー!)
    ./manage.py startapp user
  • settings.pyファイルのINSTALLED APPS
  • を修正
  • urls.pyのurlpatterns(担当パス)を変更する
    : settings.pyコメントの部分を一緒にコメントすると、サーバを実行してもエラーが発生しません.
  • views.py(動作担当)

    コード開始!


    1)GET方法


    1. models.pyの作成

    class Category(models.Model):
    	name = models.CharField(max_length=20)
        
        class Meta:
        	db_table = 'categories'

    Q.なぜMeta類の情報を提供するのか?



    これまで、テーブル名は
  • として自動的に生成された.
    上記のようにmetaクラス情報を提供すれば、私が設定した名前でテーブルを作成できますから!
  • 2. views.pyの作成

  • 画面の論理処理、
  • レンダリング
      1	import json
      2 from django.views import View
      3 from django.views import JsonResponse
  • json形式でフロントと通信し、dictionary資料構造のみが直接jsonに変換できる.application명 + models.py 내 작성한 클래스명メソッドを使用すると、ディックシャーキャンプの形で直接使用できますが、便利ですが、
    様々な練習を行うために、getAll()メソッドを使用した後、all()区間で資料構造を変更!
  •  import json
     from django.http        import JsonResponse
    
     from django.views       import View
     from products.models    import Category, Drinks
    
     # Create your views here.
     class CategoryView(View):
    
         def get(self, request):
             categories_data = Category.objects.all()
             categories = []
             # Drinks_data = Drinks.objects.all()
             for i in categories_data:
                 categories.append({
                     "name" : i.name,
                     "menu_id": i.menu_id
                 })
             print(categories)
    まずprintのみを使用して値が超えているかどうかをチェックします!

    3. urls.pyの作成

  • products/urls.py
  • from django.urls        import path
     from products.views      import CategoryView
    
     urlpatterns = [
         path('/category', CategoryView.as_view()),
     ]
    まず、私が働いているアプリケーションのパスを確認します!
    urlルールを守った場合に記入するのが便利です.
    住所の最後の場所はスラッシュ禁止…!
  • westarbucks/urls.py
  • #from django.contrib import admin
     from django.urls import path, include
    
     urlpatterns = [
         path('products', include('products.urls')),
     ]
    これで、最上位プロジェクトフォルダのurlsになります.pyからのパスの位置決め
    対応するurls.pyのパスは最上位のパスなので、スラッシュは付けません.
    スラッシュを入れると、サブパスのスラッシュと重なり、パスエラーが発生するため

    4.httpieでチェック



    products/views.py内のresponse関数のみを記述したからです.
    httpでエラーが発生しますが、私のコンソールでは、入力した値が辞書のように見えます.
    from products.models    import Category, Drinks
    
     # Create your views here.
     class CategoryView(View):
    
         # 가져오는 것
         def get(self, request):
             categories_data = Category.objects.all()
             categories = []
             # Drinks_data = Drinks.objects.all()
             for i in categories_data:
                 categories.append({
                     "name" : i.name,
                     "menu_id": i.menu_id
                 })
             return JsonResponse({'data':categories}, status=200)
    今、車に戻るお金、情報をください.もう一度やってみてください.

    httpieに出力されたデータを表示できます.👆🏻👆🏻

    2)POST方法


    models.pyは上記の条件で行います!
    私たちにとって重要なのは観点です.これはpyの論理だから><

    1. views.pyに作成されたデータ検証ロジック

        # 입력받는 것
         def post(self, request):
             data = json.loads(request.body)
             print(data)
    まずビューです.POSTメソッドに関するロジックを記述し,pyからhttpから入力されたjsonデータを出力する.
    httpieにデータを転送してテストします!

    2.httpieに送信されたデータのテスト



    コンソールを調べてみると、転送されたデータがありました.
    POSTに関する処理ロジックがないため、500エラーが発生します!

    3. views.pyの作成

         # 입력받는 것
         def post(self, request):
             data = json.loads(request.body)
             Category.objects.create(name=data['name'], menu_id=data['menu_id'])
    
             return JsonResponse({'message' : 'SUCCESS'},status=200)
    POST処理ロジックを本当に書きましょう.
    もちろんこれからやってみます.catchもexceptionも書き終わりますが、まず簡単にテストしてみましょう.
    この場合nullの列は許可されません.よくチェックして渡してください.渡された値がない場合null関連エラーが発生します.
    (特に外部キーに注意)

    4.httpieでチェック



    入力した値が安全にスキップされていることを確認できます.

    DB確認後、安全に渡された値が挿入されているか確認できます!!><