from django.shortcuts import render
from django import forms
def contact_form(request):
if request.method == 'POST':
name = request.POST.get('name')
email = request.POST.get('email')
message = request.POST.get('message')
# Validate data (example)
if not name or not email or not message:
error = "กรุณากรอกข้อมูลให้ครบถ้วน"
return render(request, 'contact_form.html', {'error': error})
# Process data (example)
print(f"Name: {name}, Email: {email}, Message: {message}")
success_message = "ส่งข้อมูลสำเร็จ"
return render(request, 'contact_form.html', {'success_message': success_message})
return render(request, 'contact_form.html')
<form method="post">
<label for="name">Name:<label><br/>
<input type="text" id="name" name="name"/><br/><br/>
<label for="email">Email:<label>lt;br/>
<input type="email" id="email" name="email"/><br/><br/>
<label for="message">Message:<label/><br/>
<textarea id="message" name="message">lt;/textarea><br/><br/>
<button type="submit">Submit</button>
</form>
{% if error %}
<p style="color:red;">{{ error }}</p>
{% endif %}
{% if success_message %}
<p style="color:green;">{{ success_message }}</p>
{% endif %}
from django import forms
class ContactForm(forms.Form):
name = forms.CharField(label="Name", max_length=100)
email = forms.EmailField(label="Email")
message = forms.CharField(label="Message", widget=forms.Textarea)
* สร้าง Form class โดย inherit จาก forms.Form
* กำหนด fields ด้วย forms.CharField
, forms.EmailField
, etc.
* กำหนด label และ widget (เช่น Textarea)
from django.shortcuts import render
from .forms import ContactForm
def contact_form_view(request):
if request.method == 'POST':
form = ContactForm(request.POST)
if form.is_valid():
# Process data
name = form.cleaned_data['name']
email = form.cleaned_data['email']
message = form.cleaned_data['message']
print(f"Name: {name}, Email: {{email}}, Message: {message}")
success_message = "ส่งข้อมูลสำเร็จ"
return render(request, 'contact_form.html', {'success_message': success_message})
else:
form = ContactForm()
return render(request, 'contact_form.html', {'form': form})
* สร้าง instance ของ Form class
* ตรวจสอบว่า Form valid หรือไม่ด้วย form.is_valid()
* ดึงข้อมูลที่ cleaned แล้วจาก form.cleaned_data
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Submit</button>
</form>
{% if form.errors %}
<p style="color:red;">มีข้อผิดพลาดใน Form</p>
{{ form.errors }}
{% endif %}
{% if success_message %}
<p style="color:green;">{{ success_message }}</p>
{% endif %}
* ใช้ {{ form.as_p }}
เพื่อ render Form fields
* แสดง errors ด้วย {{ form.errors }}
* อย่าลืม {% csrf_token %}
สำหรับป้องกัน CSRF attacks
from django.views.generic import ListView
from myapp.models import Student
class StudentListView(ListView):
model = Student
template_name = 'myapp/student/list.html' # ระบุ path ของ template
* Inherit จาก ListView
* กำหนด model
เพื่อระบุ Model ที่ต้องการแสดง
* กำหนด template_name
เพื่อระบุ path ของ template file (สำคัญ)
<h1>Student List</h1>
<ul>
{% for student in object_list %}
<li>{{ student.name }} - {{ student.email }}></li>
{% endfor %}
</ul>
* object_list
คือชื่อตัวแปร default ที่ ListView ส่งให้ template
* วน loop ผ่าน object_list
เพื่อแสดงข้อมูล Student
from django.urls import path
from . import views
urlpatterns = [
path('students/', views.StudentListView.as_view(), name='student_list'),
]
* Map URL ไปยัง ListView โดยใช้ .as_view()
ตรวจสอบให้แน่ใจว่าคุณสร้าง directory structure myapp/templates/myapp/student/
และมีไฟล์ list.html
อยู่ใน directory นั้น
from django.views.generic import CreateView
from myapp.models import Student
from django.urls import reverse_lazy
class StudentCreateView(CreateView):
model = Student
fields = ('name', 'dob', 'email')
template_name = 'myapp/student/create.html'
success_url = reverse_lazy('myapp:student_list') # Redirect หลังจาก save
* Inherit จาก CreateView
* กำหนด model
, form_class
, template_name
, และ success_url
* CreateView
จัดการการสร้าง Form และ save ข้อมูลให้
<h1>Create Student</h1>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Save</button>
</form>
* Render Form ด้วย {{ form.as_p }}
* CreateView
ส่ง Form instance ให้ใน Template
from django.views.generic import DetailView
from .models import Student
class StudentDetailView(DetailView):
model = Student
template_name = 'myapp/student/detail.html' # ระบุ template
context_object_name = 'student' # เปลี่ยนชื่อ object เป็น student
* Inherit จาก DetailView
* กำหนด model
เพื่อระบุ Model ที่ต้องการแสดง
* กำหนด template_name
เพื่อระบุ template file
* กำหนด context_object_name
(optional) เพื่อเปลี่ยนชื่อ object ที่ส่งไปยัง template (default คือ object
)
<h1>Student Detail</h1>
<p>Name: {{ student.name }}</p>
<p>Email: {{ student.email }}</p>
<p>Date of Birth: {{ student.dob }}</p>
* ใช้ {{ student.name }}
, {{ student.email }}
, {{ student.dob }}
เพื่อแสดงข้อมูลของ Student
* student
คือชื่อตัวแปรที่เรากำหนดใน context_object_name
(ถ้าไม่ได้กำหนด default คือ object
)
from django.urls import path
from . import views
urlpatterns = [
path('student/<int:pk>/', views.StudentDetailView.as_view(), name='student_detail'),
]
* กำหนด URL ที่มี pk
(primary key) เพื่อระบุ Student object ที่ต้องการแสดง
* DetailView จะ fetch object จาก database โดยใช้ pk
นี้
pk
ใน URL ต้องตรงกับ primary key field ของ Student model
from django.views.generic.edit import UpdateView
from .forms import StudentForm
from .models import Student
from django.urls import reverse_lazy
class StudentUpdateView(UpdateView):
model = Student
fields = ('name', 'dob', 'email')
template_name = 'myapp/student/update.html'
success_url = reverse_lazy('student_list')
* Inherit จาก UpdateView
* กำหนด model
, form_class
, template_name
, และ success_url
* UpdateView
จะ fetch object จาก database และแสดงใน Form
from django.urls import path
from . import views
urlpatterns = [
path('student/<int:pk>/update/', views.StudentUpdateView.as_view(), name='student_update'),
]
* ต้องส่ง pk
(primary key) ใน URL เพื่อระบุ Student object ที่ต้องการแก้ไข
<h1>Update Student</h1>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Update</button>
</form>
* Render Form ด้วย {{ form.as_p }}
* UpdateView
ส่ง Form instance ที่มีข้อมูลเดิมอยู่แล้วให้ใน Template
from django.views.generic.edit import DeleteView
from .models import Student
from django.urls import reverse_lazy
class StudentDeleteView(DeleteView):
model = Student
template_name = 'student_confirm_delete.html' # Template สำหรับยืนยันการลบ
success_url = reverse_lazy('student_list')
* Inherit จาก DeleteView
* กำหนด model
, template_name
, และ success_url
* DeleteView
จะ fetch object จาก database และแสดงหน้ายืนยันการลบ
from django.urls import path
from myapp import views
urlpatterns = [
path('student/<int:pk>/delete/', views.StudentDeleteView.as_view(), name='student_delete'),
]
* ต้องส่ง pk
(primary key) ใน URL เพื่อระบุ Student object ที่ต้องการลบ
<h1>ยืนยันการลบ Student<</h1>
<p>คุณต้องการลบ {{ object }} ใช่หรือไม่?</p>
<form method="post">
{% csrf_token %}
<button type="submit">ยืนยัน</button>
<a href="{% url 'student_list' %}">ยกเลิก</a>
</form>
* แสดงข้อความยืนยันการลบ
* ใช้ {{ object }}
เพื่อแสดงข้อมูลของ Student object ที่ต้องการลบ
students
)Student
(name, email, dob)Student
urls.py
Student
ใน database