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

Play with Django Tutorial 2

Building Software System II: Play with Django Tutorial 2
เริ่มต้นการเขียน Django app, Part 2
เปิดไฟล์ ที่เขียนไว้จาก Part 1 โดยใช้ Terminal ด้วยคำสั่ง
       $ cd directory_django(ไดเร็คทอรี่โปรเจ็คที่สร้างไว้)

ทำการ run server
       $ python manage.py runserver


      เมื่อลองใส่ url http://127.0.0.1:8000/admin/ ที่ browser แล้วจะได้
   
      จากนั้น ให้ log in เข้าไปโดยใช้ superusers ที่สร้างไว้ในตอนแรก Tutorial 1 โดยเมื่อ log in เข้าไปแล้วจะพบหน้า site administration ซึ่งส่วนนี้ได้มาจาก django.contirb.auth ตรงส่วนของ INSTALLED_APPS ในไฟล์ setting.py
การสร้าง Poll app (การเพิ่ม object Poll)

   สร้าง Poll app โดยการ เปิด ไฟล์ poll/admin.py เพื่อแก้ไข code ข้างใน ไฟล์ admin.py
       เป็นดังนี้
      
      อธิบายโค้ด
        จากโค้ดข้างต้นเป็นการเพิ่ม object Poll เข้าไปเพื่อที่จะบอก admin ว่า object Poll มี admin interface ซึ่งจะได้ผลออกมาดังรูปนี้ คือมีส่วนของ Poll เพิ่มขึ้นมาต่อจากส่วนของ Auth

    ทดลองใช้ โดย click ที่ polls จากหน้า admin ซึ่ง หน้าถัดไปจะเป็นหน้า change list ที่จะเอาไว้เลือกสำหรับแก้ไข หรือเปลี่ยนแปลง


     ต่อมาลองเลือกเข้าไปที่ "What's up?" poll เพื่อเข้าไปแก้ไขในหน้าถัดไป ดังรูปด้านล่างนี้ โดยส่วนนี้สร้างมาจาก polls/models.py ที่สร้างขึ้นใน Tutorial 1 
      แก้ไขที่ time เมื่อเวลาไม่ตรงกับเวลาปัจจุบันโดยการ click Time จากนั้น Click ที่ history เพื่อ show user ที่แก้ไข

การปรับแต่งรูปแบบ admin
   แก้ไขในส่วนนี้เป็นจากจัดรูปแบบการแสดงผลบนหน้า admin โดยการปรับเปลี่ยนโค้ดใน ไฟล์ poll/admin.py
     ลองแก้ไขโดยเพิ่ม class เข้าไปดังนี้

     อธิบายโค้ด
        จากโค้ดข้างต้น ในส่วนของ class ที่เพิ่มขึ้นมาเป็นการเรียงลำดับของการแสดงผลใหม่ จากเดิมที่ให้ question อยู่เป็นลำดับแรก และส่วนของวันที่และเวลา อยู่ในลำดับถัดไป ก็ให้เรียงใหม่โดยให้ วันที่และเวลาอยู่เป็นลำดับแรกแทน และในส่วนของ admin.site.register() รับ argument ได้สองตัว โดย argument ตัวที่สองคือ model admin object ที่สร้างขึ้นจาก class

   ต่อมาให้ลองแก้ไขในส่วนของ class ดังนี้
    

   อธิบายโค้ด
        จากโค้ดสร้าง field ให้เป็น set เพื่อแบ่งออกเป็น 2 fields คือส่วนของ question และ pub_dateโดยส่วนของ question ไม่ได้แสดงหัวข้อ แต่ส่วนของ pub_date ใช้ชื่อว่า Date information

            ต่อมาให้ลองเพิ่มส่วนของ HTML classes เพื่อใช้ซ่อนข้อความ   



   อธิบายโค้ด
        จากโค้ดจะเห็นได้ว่ามีส่วนที่เพิ่มขึ้นมา คือ 'classes' : ['collapse'] ซึ่งจะเอาไว้ซ่อน field ในที่นี้จะซ่อน field ส่วนที่เป็น pub_date



การเพิ่ม Object ที่เกี่ยวข้อง
    ตอนนี้เราได้ หน้า Poll admin แล้ว แต่ใน 1 poll นั้นมีหลาย choice ซึ่งในหน้า admin ยังไม่ได้แสดงส่วนของ choice ซึ่งวิธีแรกที่จะเพิ่มส่วนของ choice นั้นทำได้โดยแก้ไข code ในไฟล์ poll/admin.py ให้เป็นดังนี้



อธิบายโค้ด
        จากโค้ดจะเห็นได้ว่ามีการ import Choice เข้ามา และใช้เพียง admin.site.register() ในการรับ argument Choice มา ซึ่งจะทำให้หน้า admin และหน้าอื่นๆที่เมื่อ click ตรง choice มีลักษณะเป็นแบบนี้




   ส่วนวิธีที่สองเป็นการใช้ class ดังนี้



   อธิบายโค้ด
        จากโค้ดจะเห็นได้ว่ามีการใช้ class ChoiceInLine โดยให้มี 3 choice ซึ่งให้ object model เป็น Choice และยังคงมีส่วนของ PollAdmin อยู่ 


   จะเห็นได้ว่าการแสดงผลในลักษณะนี้จะเปลืองพื้นที่มาก จึงเปลี่ยนรูปแบบการแสดงผลโดยปรับเปลี่ยนโค้ดเป็นดังนี้



    อธิบายโค้ด
        จากโค้ดจะแก้ไขตรงส่วนของ attribute ของ class ChoiceInline จาก StackInline เป็น TabularInline ซึ่งจะทำให้รูปแบบการแสดงผลเปลี่ยนเป็นดังนี้

การปรับเปลี่ยนรูปแบบหน้า admin change list
    ทำการปรับเปลี่ยนรูปแบบการแสดงผลในหน้า admin change list โดยเพิ่ม code ดังนี้

    อธิบายโค้ด
        จากโค้ดจะแก้ไขโดยเพิ่มส่วนที่เป็น list_display = ('question', 'pub_date') ซึ่งจากที่เพิ่มส่วนนี้เข้าไป ทำให้การแสดงผลเปลี่ยนไปเป็นดังนี้ คือมีการแสดงวันที่เพิ่มขึ้นมา



  ต่อมาลองเพิ่มโค้ดให้เป็นดังนี้



 อธิบายโค้ด
        จากโค้ดจะแก้ไขโดยเพิ่มส่วนที่เป็น 'was_published_recently'  จะทำให้การแสดงผลเป็นดังนี้




   ต่อมาลองปรับเปลี่ยนโค้ดโดยเพิ่ม ฟังก์ชันเข้าไปในไฟล์ poll/models.py ดังนี้
อธิบายโค้ด
        ฟังก์ชันหรือ method ที่เพิ่มขึ้นมานั้นเป็นการเปลี่ยนการแสดงผล ตรงส่วน published recently ให้เป็นดังนี้



  ต่อมาให้เพิ่มโค้ดใน poll/admin.py

  จากการเพิ่ม list_filter = ['pub_date'] จะแสดง sidebar ดังรูป

  จากนั้นให้เพิ่ม search_field = ['question'] ในไฟล์ poll/admin.py ซึ่งจะเพิ่มการแสดงผลเป็นช่องสำหรับ search และได้ผลดังนี้

การปรับเปลี่ยน path ของ Template
   สร้าง directory templates ใน directory ของ project จากนั้นให้เข้าไปแก้ไปไฟล์ setting.py  และ เพิ่ม TEMPLATE_DIRS ให้เป็นดังนี้

     TEMPLATE_DIRS = [os.path.join(BASE_DIR, 'templates')]



 



ที่มาและแหล่งค้นคว้าเพิ่มเติม: Django Documect Tutorial 2





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

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