วันอาทิตย์ที่ 8 ธันวาคม พ.ศ. 2556

Play with Django Tutorial 4

Building Software System II:
Django with Tutorial part 4
ผลจากการศึกษา Django app, part 4
  ใน Tuttorial นี้จะเน้นไปที่รูปแบบการประมวลผลแบบง่ายๆ และลดรูปของโค้ดให้สั้นลง

    - ขั้นตอนการทำงาน         (ต่อจาก Django app, part 3)  
       1. Update file detail.html  ที่อยู่ใน polls/template/polls/ ให้มี โค้ดเป็นดังนี้         


  
      อธิบายโค้ด
               - จาก Template ข้างต้น จะแสดงรูปบบของ page  โดยการแสดงปุ่มสำหรับแต่ละ choice ของการสำรวจความเห็น ซึ่งค่าของแต่ละปุ่มจะเกี่ยวข้องกับ Choice’s ID และชื่อของแต่ละปุ่มก็คือของ choice
               - set รูปแบบของ action {% url ‘polls:vote’ poll.id %} และ set method = “post” โดย method นี้จะส่งรูปแบบของ action นี้ไปยังข้อมูลด้าน server
               - ใช้ forloop.counter เพื่อแสดงถึงจำนวนครั้งที่วน for ด้านหลังตัวแปรที่เปลี่ยนค่าตามตามเงื่อนไข ในที่นี้คือ ตัวแปร choice
         

       2. เพิ่มตัวอย่างการจำลอง function  vote() ใน file polls/ views.py



      อธิบายโค้ด
      - จาก function vote() ข้างต้น จะทำงาน คู่กับ url(r’^(?P<poll_id>\d+)/vote/$’ , views.vote, name = ‘vote’) โดย url นี้จะเรียกใช้     ฟังก์ชัน vote ใน file views.py และฟังก์ชัน vote() รับค่า request มาในฟังก์ชัน โดย  parameter  request นี้จะเป็นค่า choice.ID จากนั้นฟังก์ชันจะเพิ่มค่าทีละ 1 ทุกครั้งที่มีการเลือก choice แล้วกด vote และบันทึกค่าไว้ เสร็จแล้วจะ return ค่าไปยัง        url(r’^(?P<poll_id>\d+)/results/$’ , views.results, name = ‘results’) สุดท้าย url นี้จะเรียกใช้ function results() เพื่อดำเนินการขั้นต่อไป


        - ในฟังก์ชัน results() จะรับค่า poll id และ return ค่าออกไปแสดงผลบน page

        3. เมื่อลอง พิมพ์ url 127.0.0.1:8000/polls/3/results บน browser จะได้ผลดังนี้
               
        4. เข้าไปแก้ไขไฟล์ view ในส่วนของฟังก์ชั้น result ให้เป็นดังนี้
        


   - แก้ไขโดยการ return ค่าไปยัง template results ที่สร้างขึ้น โดยการ สร้าง object poll ขึ้นมาและส่งค่าไปยัง template ดังกล่าว

       5. สร้าง file result.html เป็น template เก็บไว้ใน polls/template/polls/ และ ใส่โค้ดไปดังนี้
<h1>{{ poll.question }}</h1>

<ul>
{% for choice in poll.choice_set.all %}
    <li>{{ choice.choice_text }} -- {{ choice.votes }} vote{{ choice.votes|pluralize }}</li>
{% endfor %}
</ul>


<a href="{% url 'polls:detail' poll.id %}">Vote again?</a>
           - ส่วนของ code ของ template นี้ ให้สำหรับการแสดงผลจำนวนการ vote ว่าแต่ละ choice มีการ vote เท่าไหร่ และ มี link สำหรับกลับไปหน้าที่ต้องการ vote อีกครั้ง
          6. เมื่อลอง พิมพ์ url 127.0.0.1:8000/polls/1 บน browser จะได้ผลดังนี้

                - และเมื่อเลือก choice แล้วกด vote url จะเปลี่ยนค่าและการแสดง page จะเปลี่ยนไป ดังนี้

         7. เข้าไปแก้ไขไฟล์ urls.py เพื่อเปลี่ยนรูปแบบของโค้ด       



            8. เข้าไปแก้ไขไฟล์ view โดยการลบ function  index(), detail() และ result() ออกแล้วเปลี่ยน โค้ดเป็นดังนี้
       


         - แก้ไขโดยการเปลี่ยนจากฟังก์ชันข้างต้นเป็น Class โดยที่รูปแบบการแสดงผลยังคงเหมือนเดิม และ โครงสร้างของโค้ดสั้นลง
              class IndexView() ทำหน้าที่เช่นเดียวกับ function index() โดยการเรียกใช้ generic.ListView หรือ display a list of object  ซึ่งเป็นการแสดงรายการของ object  โดยในฟังก์ชันนี้มีการเรียกใช้ template โดยใช้ template_name โดยการบอก ListView ส่วนใน  class อื่นๆ มีการเรียกใช้ DetailView หรือ display detail Django model โดยการใช้ model = poll และเรียกใช้ template เช่นเดียวกับ class IndexView

              9. เมื่อลอง พิมพ์ url 127.0.0.1:8000/polls/1 บน browser จะได้ผลดังนี้ 

- และเมื่อเลือก choice แล้วกด vote url จะเปลี่ยนค่าและการแสดง page จะเปลี่ยนไป ดังนี้









นางสาวศิริวิมล       สุนทร
54-010126-3024-0
sec.3

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

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