シンプルなジャンゴCrudアプリ
こんにちは、あなたがちょうどJjangoを学び始めているならば、これは単純なCRUD(更新を検索して、削除する操作)の良い例です.
このチュートリアルでは、学生を作成、取得、更新、削除できるようにする単純なアプリケーションを作成します.
ステップ
1 .新規プロジェクトを作成する
モデルの作成
フォームを作成する
テンプレートフォルダの追加
5 .ビューを作成する
1 .新規プロジェクトを作成する
あなたの設定でアプリケーションを登録します.Pyファイル.
モデルの作成
我々は2モデル、ストリームモデルと学生モデルを持っている.
あなたの設定でアプリケーションを登録します.Pyファイル.
あなたの学生のアプリのモデルを開きます.Pyファイル.これは、以下のコードを使用してモデルを作成する場所です.
フォームを作成する
あなたのアプリケーションのフォルダで、新しいファイルを作成し、フォームの名前.Py
次のコードをファイルに追加します.
テンプレートのフォルダを作成する
テンプレートを簡単にアクセスできるようにするには、すべてのテンプレートを含むテンプレートという名前のフォルダーを作成します.
あなたの設定に移動します.Pyは、テンプレート配列を見つけ、次のように置き換えます.
5 .ビューを作成する
あなたの意見に移動します.Pyファイルとコードの書き込みを開始します.
これには関数ベースのビューを使用します.
まず、学生インスタンスを作成するビューを作成します.
これは、我々の着陸ページのための眺めでもあります.
これを行うには、フォームで作成したフォームをインポートする必要があります.Py
このインポートを
このテンプレートは、新しい学生を作成するためのフォームを示し、また、テーブル内の既存の学生を一覧表示されます.
各学生のインスタンスやレコードの場合は、表示または削除することができます.
私はそれがよく見えるようにブートストラップを追加しました.
あなたのインデックス.HTMLは次のようになります.
これを達成するためには、別のビューを作成する必要があります.
私たちは学生モデルで使用されているRegencer Noを使用してデータベースから学生を取得するつもりです.
このビューは、学生インスタンスを更新するために使用されます.したがって、フォームの前に学生インスタンスを渡します.
次のビューを示します.
URLを作成します.あなたのアプリケーションのPYファイルと以下を含みます
これで、単純なCRUDアプリケーションがあります.
このチュートリアルでは、学生を作成、取得、更新、削除できるようにする単純なアプリケーションを作成します.
ステップ
1 .新規プロジェクトを作成する
モデルの作成
フォームを作成する
テンプレートフォルダの追加
5 .ビューを作成する
1 .新規プロジェクトを作成する
django-admin startproject students-crud
を使用して新しいDjangoプロジェクトを作成しますpython manage.py startapp students
を使用してアプリケーションの学生を作成してください.あなたの設定でアプリケーションを登録します.Pyファイル.
モデルの作成
我々は2モデル、ストリームモデルと学生モデルを持っている.
あなたの設定でアプリケーションを登録します.Pyファイル.
あなたの学生のアプリのモデルを開きます.Pyファイル.これは、以下のコードを使用してモデルを作成する場所です.
class Stream(models.Model):
name = models.CharField(max_length=100)
def __str__(self):
return f'{self.name}'
class Student(models.Model):
name = models.CharField(max_length= 50)
description = models.TextField()
joindate = models.DateTimeField(auto_now_add = True)
reg_no = models.CharField(max_length=100, unique=True)
stream = models.ForeignKey(Stream, on_delete=models.CASCADE,
related_name="students")
def __str__(self):
return f'{self.name} reg {self.reg_no}'
管理者に移動します.Pyと2つのモデルを次のように登録します.from students.models import Student, Stream
# Register your models here.
admin.site.register(Student)
admin.site.register(Stream)
フォームを作成する
あなたのアプリケーションのフォルダで、新しいファイルを作成し、フォームの名前.Py
次のコードをファイルに追加します.
from django import forms
from .models import Student
class CreateStudentForm(forms.ModelForm):
class Meta:
model = Student
fields = "__all__"
テンプレートのフォルダを作成する
テンプレートを簡単にアクセスできるようにするには、すべてのテンプレートを含むテンプレートという名前のフォルダーを作成します.
あなたの設定に移動します.Pyは、テンプレート配列を見つけ、次のように置き換えます.
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
プロジェクトのルートフォルダに移動し、テンプレートという名前のフォルダを作成する5 .ビューを作成する
あなたの意見に移動します.Pyファイルとコードの書き込みを開始します.
これには関数ベースのビューを使用します.
まず、学生インスタンスを作成するビューを作成します.
これは、我々の着陸ページのための眺めでもあります.
これを行うには、フォームで作成したフォームをインポートする必要があります.Py
このインポートを
from .forms import CreateStudentForm
次のビューに進みます.def CreateStudent(request):
if request.method == "POST":
form = CreateStudentForm(request.POST)
if form.is_valid():
form.save()
form = CreateStudentForm()
else:
form = CreateStudentForm()
students = Student.objects.all().order_by("-id")
context = {'form':form, 'students':students}
return render(request, 'home.html', context)
私たちは最後の追加で始まる学生を表示したいと思いますstudents = Student.objects.all().order_by("-id")
ファイルインデックスを作成します.HTMLの前の手順で作成したテンプレートです.このテンプレートは、新しい学生を作成するためのフォームを示し、また、テーブル内の既存の学生を一覧表示されます.
各学生のインスタンスやレコードの場合は、表示または削除することができます.
私はそれがよく見えるようにブートストラップを追加しました.
あなたのインデックス.HTMLは次のようになります.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css"
integrity="sha384-TX8t27EcRE3e/ihU7zmQxVncDAy5uIKz4rEkgIXeMed4M0jlfIDPvg6uqKI2xXr2" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"
integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj"
crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"
integrity="sha384-ho+j7jyWK8fNQe+A12Hb8AhRq26LrZ/JpcUGGOn+Y7RsweNrtN/tE3MoK7ZeZDyx"
crossorigin="anonymous"></script>
<title>Good Schools | Home</title>
</head>
<body>
<div>
<form method="post">
{% csrf_token %}
{{form.as_p}}
<button type="submit">Submit</button>
</form>
</div>
<!-- list of students -->
<div>
<h4 class="text-center mb-3 mt-3">Students List</h4>
<div class="table-responsive-sm">
<table class="table table-hover">
<thead class="thead-light">
<tr>
<th scope="col">Name</th>
<th scope="col">Reg No.</th>
<th scope="col">Stream</th>
<th scope="col">Description</th>
<th scope="col">Join Date</th>
<th scope="col">View</th>
<th scope="col">Delete</th>
</tr>
</thead>
<tbody>
{% for student in students %}
<tr>
<td class="text-capitalize">{{student.name}}</td>
<td>{{student.reg_no}}</td>
<td>{{student.stream}}</td>
<td class="text-capitalize">{{student.description}}</td>
<td>{{student.joindate}}</td>
<td>
<a role="button" class="btn btn-sm btn-outline-success"
href="{% url 'std_detail' reg=student.reg_no %}">View</a>
</td>
<td>
<a role="button" class="btn btn-sm btn-outline-danger" href="{% url 'delete' id=student.id %}">Delete</a>
<!-- <button class="btn btn-sm btn-outline-danger">Delete</button></td> -->
</tr>
{% empty %}
<span class="text-center">No students to show</span>
{% endfor %}
</tbody>
</table>
</div>
</div>
</body>
上記のように、私たちは特定の学生を見たいです.これを達成するためには、別のビューを作成する必要があります.
私たちは学生モデルで使用されているRegencer Noを使用してデータベースから学生を取得するつもりです.
このビューは、学生インスタンスを更新するために使用されます.したがって、フォームの前に学生インスタンスを渡します.
def GetStudent(request, **kwargs):
reg = kwargs.get('reg')
student = get_object_or_404(Student, reg_no=reg)
if request.method == "POST":
form = CreateStudentForm(request.POST, instance=student)
if form.is_valid():
form.save()
else:
form = CreateStudentForm(instance=student)
context = {'student':student, 'form': form}
return render(request, 'std_detail.html', context )
我々のstdcho詳細.HTMLは次のようになります.<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" integrity="sha384-TX8t27EcRE3e/ihU7zmQxVncDAy5uIKz4rEkgIXeMed4M0jlfIDPvg6uqKI2xXr2" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js" integrity="sha384-ho+j7jyWK8fNQe+A12Hb8AhRq26LrZ/JpcUGGOn+Y7RsweNrtN/tE3MoK7ZeZDyx" crossorigin="anonymous"></script>
<title>Good Schools | Student Detail | {{student.reg_no}}</title>
</head>
<body>
<div class="big-box container-fluid d-flex justify-content-center align-items-center">
<div class="container mt-4 mb-5">
<h4 class="text-center text-capitalize">{{student.name}}'s Profile</h4>
<form class="mt-3" method="post">
{% csrf_token %}
<div class="form-group">
<div class="row">
<div class="col">
<label>Name:</label>
{{form.name}}
</div>
</div>
</div>
<div class="form-group">
<div class="row">
<div class="col">
<label>Reg No.</label>
{{form.reg_no}}
</div>
<div class="col">
<label>Stream:</label>
{{form.stream}}
</div>
</div>
</div>
<div class="form-group">
<label>Description:</label>
{{form.description}}
</div>
<div class="form-group">
<div class="row">
<div class="col d-flex justify-content-center">
<button class="btn btn-warning btn-block text-white w-50">Update</button>
</div>
<div class="col d-flex justify-content-center">
<a href="{% url 'delete' id=student.id %}" role="button" class="btn btn-danger btn-block text-white w-50">Delete</a>
</div>
</div>
</div>
</form>
</div>
</div>
<div class="container d-flex justify-content-center">
<a href="{% url 'create_student' %}" role="button" class="btn btn-outline-primary btn-block w-25">All Students</a>
</div>
</body>
</html>
学生を削除するには、我々はまた、それらを取得し、それらを削除するには、それらのRegencer noを使用します.次のビューを示します.
def DeleteStudent(request, **kwargs):
reg = kwargs.get('reg')
student = Student.objects.get(reg_no=reg)
student.delete()
return redirect('home')
我々は今我々のURLを定義する必要があるので、私たちが何をしたかを見ることができます.URLを作成します.あなたのアプリケーションのPYファイルと以下を含みます
from django.urls import path
from .views import CreateStudent,GetStudent, Delete
urlpatterns = [
path('', CreateStudent, name='create_student'),
path('std_detail/<str:reg>/', GetStudent, name='std_detail'),
path('delete/<int:id>', Delete, name='delete'),
プロジェクトのURLに.Pyを追加し、次のように追加します.
from django.urls import path,include
urlpatterns = [
path('', include("home.urls")),
path('admin/', admin.site.urls),
]
それだ!プロジェクトを移行し、サーバーを実行します.これで、単純なCRUDアプリケーションがあります.
Reference
この問題について(シンプルなジャンゴCrudアプリ), 我々は、より多くの情報をここで見つけました https://dev.to/mungaigikure/simple-django-crud-app-4akcテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol