วันอาทิตย์ที่ 29 มกราคม พ.ศ. 2560

ลองใช้ Django #3

Tutorial 4


  • Write simple form
  • use generic views - less code is better

 แก้ไขไฟล์ detail.html ให้เป็นดังนี้ เพื่อทำการสร้างฟอร์มแบบสำหรับตอบแบบสอบถาม
detail.html

  • name="choice"  เมื่อ submit form จะส่ง post data เป็น choice=id
  • action="{% url 'polls:vote' question.id %}" เมื่อกดจะลิงก์ไปที่ url ของหน้า vote 
  • ค่าที่ส่งไปคือ value ซึ่งคือ choice.id
  • ใช้ method="post" เมื่อต้องการเปลี่ยนแปลงข้อมูลใน server (อ้างอิงจาก tutorial)


views.py

  • request.POST['choice'] > return ค่า id ของตัวเลือกที่เลือกอยู่
  • HttpResponseRedirect > simple argument > ใช้ทุกครั้งหลัง POST data
  • reverse > return a string like '/polls/3/results/'
  • render results.html และส่งค่า question ไป

results.html หน้าแสดงผลลัพท์จากการโหวต
ผลลัพธ์ที่ได้


ทำการทำให้โค้ดสั้นลงโดยใช้ GenericViews


ขั้นแรกทำการแก้ไขไฟล์ urls.py โดยเปลี่ยน question_id เป็น pk เพื่อใช้กับ generic view
urls.py
 จากนั้นแก้ไขใน views.py โดยใช้ class สืบทอดจาก ListView, DetailView

DetailView ต้องการตัวแปร pk (ดังนั้นจึงเปลี่ยนใน urls.py ด้านบน จาก question_id ให้เป็น pk)


  • ตัวแปร template_name ไว้กำหนด template ที่ต้องการจะ render
  • ตัวแปร context_object_name ไว้กำหนดให้เหมือนชื่อตัวแปรในไฟล์ index.html ที่ต้องกำหนดเองเพราะว่า โดยปกติแล้ว DetailView จะทำการ generate context name อัติโนมัติซึ่งในที่นี้จะ generate เป็น question_list แต่ว่าใน index.html เป็นชื่อ lastest_question_list จึงต้องเปลี่ยนให้สอดคล้องกัน
  • model เป็นตัวกำหนดว่าจะให้แสดงข้อมูลของ object ไหน


views.py




ไม่มีความคิดเห็น:

แสดงความคิดเห็น

commit เพิ่มเติม : เพื่ม userstory, bookmark

>>  add userstory ทำการเพิ่ม userstory ใน functional tests >>  add bookmark for user เพิ่มระบบ Bookmark โดยการสร้าง model ขึ...