วันพฤหัสบดีที่ 2 กุมภาพันธ์ พ.ศ. 2560

ใช้ตารางในการแสดงคำถามและตัวเลือก


เพิ่ม url สำหรับหน้า เพิ่มคำถาม และ หน้าเพิ่มคำถาม (เซฟข้อมูลเข้า database)

เพิ่มฟังก์ชั่น add เพื่อแสดงหน้าเพิ่มคำถาม
เพิ่มฟังก์ชั่น adddb สำหรับ เพิ่มคำถามเข้า database


การเพิ่มคำถาม



เพิ่มหน้าเพื่มคำถามสำหรับผู้ใช้

เพิ่มหน้าคำถามสำหรับผู้ใช้งานทั่วไป
ตอนแรกจะต้องแก้ไขไฟล์ ursl.py เพื่อให้ลิงก์ไปยัง ฟังก์ชั่นใหม่ที่เราสร้าง คือ add และ adddb

ฟังก์ชั่นใหม่ที่สร้าง 
add ทำการ render หน้า page ที่ไว้เพิ่มคำถาม
adddb ทำการเพิ่มคำถาม ( เช็คคำถามว่าเขียนไหม + choice มากกว่า 1 ไหม) และ แสดง page ว่า เพิ่มคำถามแล้ว
หน้า add.html สำหรับ แสดงหน้าเพิ่มคำถาม
หน้า adddb สำหรับแสดงว่าเพิ่มคำถามไปแล้ว หรือ แสดงเออเร่อหากตรงเงื่อนไข
หน้าเพิ่มคำถาม

เพิ่มคำถามเสร็จแล้ว

หน้าแรกหลังจากเพิ่ม ส่วนเพิ่มคำถามไป

กรณี error (ไม่ได้ใส่คำถาม หรือ choice < 1 หรือ เข้าหน้านี้โดยตรง)
ทดลองโหวตคำถามใหม่

ทดลองโหวตคำถามใหม่


วันอาทิตย์ที่ 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 ขึ...