[TIL] CRUD (2)
APIサーバの作成
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のインストール
2.仮想環境の設定
conda -n
conda activate
pip install django
pip install mysqlclient
appの作成
アプリを作成し、Pythonファイルを変更します(しないとエラー!)
./manage.py startapp user
: settings.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
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の作成
from django.urls import path
from products.views import CategoryView
urlpatterns = [
path('/category', CategoryView.as_view()),
]
まず、私が働いているアプリケーションのパスを確認します!urlルールを守った場合に記入するのが便利です.
住所の最後の場所はスラッシュ禁止…!
#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確認後、安全に渡された値が挿入されているか確認できます!!><
Reference
この問題について([TIL] CRUD (2)), 我々は、より多くの情報をここで見つけました https://velog.io/@haileeyu21/TIL-CRUD-2テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol