สำหรับพาร์ทนี้ก็เป็นพาร์ทแรกสำหรับส่วนใหม่ของซีรีย์ Django นะครับ ในส่วนนี้เราจะมาโฟกัสที่การใช้ Form ใน Django ซึ่งถือว่าเป็นอะไรที่มีประโยชน์มากๆครับ เพราะจะทำให้เราสามารถรับข้อมูลจากผู้ใช้เข้ามาได้ ทำให้มีการติดต่อกันระหว่างเว็บไซต์กับผู้ใช้งาน


ก่อนที่จะเริ่มโปรเจ็คก็ต้องไปตั้ง template ก่อนเหมือนเดิมครับ วิธีตั้ง

ในโฟลเดอร์โปรเจค(ที่มี urls.py) ผมสร้างไฟล์ขึ้นมา 2 ไฟล์คือไฟล์ forms.py และ views.py ไว้เก็บ Form และ View ตามลำดับ

forms.py และ views.py

สำหรับพาร์ทนี้เราจะไม่ทำอะไร fancy มากครับ แค่จะสร้างหน้าเพจที่มีช่องให้กรอก พอกรอกไปก็จะไป Print บน console ให้เรารู้ว่ามัน Work เฉยๆ

เข้าไปที่ forms.pyfrom django import formsclass TestForm(forms.Form):
   email = forms.EmailField()

สำหรับการสร้าง Form ก็คล้ายๆกันกับ Model ครับ สร้าง Class แล้วก็ใส่ Field แล้ว Django ก็จะเสกมนตร์ทำทุกอย่างให้เป็นจริง 5555from django.shortcuts import render
from .forms import TestFormdef home(request):
   if request.method == 'POST':
       print(request.POST)

   return render(request, 'home.html', {'form': TestForm})

ใน View จะเริ่ม fancy ขึ้นมานิดนึง เราจะ import form ที่เราสร้างเมื่อกี้นี่เข้ามา ใน View เราจะเช็คว่า method ที่ผู้ใช้ request หน้านั้นเป็น POST รึเปล่า ถ้าใช่ก็จะ print request.POST ซึ่งก็คือข้อมูลที่ผู้ใช้ POST มา<!DOCTYPE html>
<html lang="en" dir="ltr">
 <head>
   <meta charset="utf-8">
   <title>Home</title>
 </head>
 <body>
   <form method="post">
     {% csrf_token %}
     {{ form }}
     <input type="submit" value="submit">
   </form>
 </body>
</html>

สำหรับ template ของหน้า home.html เราสามารถยัด form ที่เราโยนมาจาก context ใส่ได้เลย แต่เนื่องจาก Django Default ความปลอดภัยมาว่าเราจำเป็นต้องมี csrf_token(เพื่อกัน Cross-Site Request Forgery) ด้วยเลยต้องมีการแปะ token ไว้ด้วยครับ แต่ถ้าไม่ต้องการก็ไปลบออกใน settings.py ได้

สังเกตตรง tag form จะมี method เป็น POST เวลาเรากด submit มันก็จะ POST ไปที่เซิฟเวอร์from django.conf.urls import url
from django.contrib import admin
from .views import homeurlpatterns = [
   url(r'^admin/', admin.site.urls),
   url(r'^$', home)
]

สุดท้ายก็อย่าลืมตั้ง url

ลองใช้ดู python manage.py runserver

จะได้หน้าเว็บประมาณนี้
ทดสอบ

ผมลองกรอกอีเมลล์ john@hotmail.com ลงไป จะเห็นว่า console ของเราจะปรินต์ข้อมูลออกมาเป็น QueryDict ที่มีคีย์ email เป็น data : john@hotmail.com ซึ่งก็คือโปรแกรมของเราทำงานได้สำเร็จครับ


Medium ที่ 29
ปีนี้ผมตั้งใจว่าจะเขียน Medium ให้ได้เดือนละ 4–5 Medium ครับ สิ้นปีก็จะมี 52 Medium เท่ากับจำนวนสัปดาห์ใน 1 ปีพอดี ไม่รู้จะทำได้มั้ย แต่ก็ถือเป็น Passion เล็กๆน้อยๆของผมครับ 5555
ผมเขียนบทความหลายแนวแล้วแต่ว่าอยากเขียนยังไง ถ้าอยากให้กำลังใจช่วยกด Clap ให้ซักที สองทีด้วยนะครับ :D
เจอกันบทความหน้าครับ