前回の記事では、Django プロジェクトのセットアップの基本を説明し、フロントエンドにリストとして表示する演習モデルを作成しました。この記事では、CRUD オペレーションの実行について詳しく説明します。馴染みのない方のために説明すると、CRUD は作成、読み取り、更新、削除の略で、基本的にデータに対して実行できる 4 つの基本的なアクションです。
アプリ フォルダに API が設定されたので、作成、更新、削除リクエストを処理するためにインデックス ビューを拡張するだけです。
ユーザーが演習を作成できるフォームを設定しましょう。この目的でも HTML テンプレートを使用します。まず、app/templates フォルダーに add_exercise.html という新しいテンプレートを作成します。
次に、次の方法を使用して、index.html テンプレートに add_exercise.html テンプレートを含めます。
{% extends "base.html" %} {% block content %}Exercises
{% include 'add_exercise.html' %} ... {% endblock %}
ここでは include タグを利用しています。これにより、HTML テンプレート全体での構成可能性が促進され、コードの保守と理解が容易になります。ブラウザでページを更新すると、画面にフォームが表示されるはずです。
HTML では、メソッド属性が POST に設定され、アクション属性が / を指す
リスト内の各演習に
また、演習ビューでは、リクエストを区別するために次の変更を加えます。
def index(request): if request.method == 'POST': create = 'create' in request.POST update = 'update' in request.POST if create == True: models.Exercise.create(request) elif update == True: models.Exercise.update(request) return redirect('/') exercises = ( models.Exercise.objects.all().order_by("created_at") ) return render(request, "index.html", context={'exercises': exercises})
ボタン名を確認し、それに応じてリクエストを適切な Exercise メソッドに転送します。
app/models.py の演習モデルに更新クラス メソッドを追加しましょう。
def update(request): id = request.POST.get('id') title = request.POST.get('title') date = request.POST.get('date') exercise = Exercise.objects.filter(pk=id).update(title=title, date=date) return exercise
データベース内の行を更新するには、演習モデルで利用可能な更新メソッドを使用できます。ただし、更新する前に、正しい演習を更新していることを確認する必要があります。これを行うには、主キー(id)で演習をフィルタリングし、その特定の演習のみを更新します。
同様に、exercise.html テンプレートの各演習の横に削除ボタンを追加します。
name 属性の値として delete を設定し、views.py で、削除操作を処理するために if...elif ステートメントを拡張します。
def index(request): if request.method == 'POST': create = 'create' in request.POST update = 'update' in request.POST delete = 'delete' in request.POST if create == True: models.Exercise.create(request) elif update == True: models.Exercise.update(request) elif delete == True: models.Exercise.delete(request) return redirect('/') exercises = ( models.Exercise.objects.all().order_by("created_at") ) return render(request, "index.html", context={'exercises': exercises})
そして、演習モデルに、クラス メソッド delete を追加します。
def delete(request): id = request.POST.get('id') is_deleted = Exercise.objects.filter(pk=id).delete() if is_deleted == 1: return True return False
この追加により、Python および Django アプリケーションに CRUD 操作を正常に実装できるようになりました。
from django.http import HttpResponseRedirect def index(request): ... return redirect('/') # or return HttpResponseRedirect(request.META['HTTP_REFERER'])
要約すると、POST リクエストを効果的に管理し、適切なリダイレクトを確保することで、Django アプリケーションに CRUD 操作を実装しながらシームレスなユーザー エクスペリエンスを作成できます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3