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

Django Tutorial Part 1 - Database&models


Django Tutorial Part1

1.เริ่มต้นให้ทำการสร้าง Project โดยการเปิด terminal แล้วทำการ cd ไปยัง Directory ที่ต้องการจะเก็บ Project ไว้จากนั้นพิมคำสั่ง django-admin.py startproject Tutorial1

2.ทำการแก้ชื่อเพื่อป้องกันความสับสนเช่นเดิมโดยใช้คำสั่ง mv Tutorial1/ Django_Tutorial1


3.เข้าไปแก้ไขไฟล์ settings.py โดยเปลี่ยน TIME_ZONE เป็น Asia/Bangkok หรือเปลี่ยนไปยังที่ ที่เราอยู่

  

4.จากนั้นให้ cd กลับไปยัง Directory ที่มีไฟล์ manage.py อยู่แล้วพิมคำสั่ง python manage.py syncdb

5.จะมีข้อความขึ้นมาถามว่าเราต้องการสร้าง superusers ไหมให้ตอบ yes แล้วใส่รายละเอียดตามที่กำหนดลงไป



6.เริ่มสร้าง models โดยพิมคำสั่ง python manage.py startapp polls



7.จะพบว่ามีโฟลเดอร์ polls เพิ่มเข้ามาจากนั้นให้ cd เข้าไปใน polls จะพบไฟล์ models.py ให้ทำแก้ไฟล์เป็นตามนี้

from django.db import models
class Poll(models.Model):
    question = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')
class Choice(models.Model):
    poll = models.ForeignKey(Poll)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

    จากโค้ดที่ใส่เข้าไปใน models.py นั้นเป็นการสร้าง Class 2 Class ที่ชื่อ Poll และ Choice ซึ่งเป็น Class ที่สืบทอดมาจาก models.Model ซึ่งเป็น API ของ django.db ที่เราได้ import มาในบรรทัดแรก

    โดยใน Class Poll ประกอบด้วยตัวแปรสองตัวคือ question ซึ่งเป็นตัวแปรที่มาจาก Class CharField โดยมีความยาวสูงสุด 200 ตัวอักษร และตัวแปร pub_date ซึ่งมาจาก Class DateTimeField ซึ่งใช้เก็บวัน เดือน ปี และ เวลา

    ส่วน Class Choice ประกอบด้วยตัวแปร 3 ตัวคือ poll เป็นการสร้างความสัมพันธ์ ว่า Class Choice นั้นมีความสัมพันธ์กับ Class Poll ตัวแปร choice_text เป็นตัวแปรที่มาจาก Class CharField ซึ่งกำหนดความยาวสูงสุดไว้ที่ 200 ตัวอักษร และตัวแปร votes มาจาก Class IntegerField ซึ่งหลักการจะคล้ายๆกับ CharFiels เพียงแต่ Class นี้เก็บตัวแปรในรูปแบบของ Integer แทน

   
8.กลับไปแก้ไขไฟล์ settings.py ที่เราแก้ TIME_ZONE อีกครั้งโดยคราวนี้ให้แก้ไขที่ INSTALLED_APPS โดยเพิ่ม polls เข้าไปในส่วนของ INSTALLED_APPS ดังรูป


9.จากนั้นพิมคำสั่ง cd กลับไปยัง Directory ที่มีไฟล์ manage.py อยู่แล้วพิม python manage.py shell แล้วพิมคำสั่งตามรูปนี้


10.จะเห็นว่า Output รอบสุดท้ายจะได้เป็น [<Poll: Poll object>] ซึ่งแสดงผลออกมาว่าเป็น Poll Object แต่จะไม่สามารถดึงค่าที่อยู่ใน Object มาแสดงผลได้ดังนั้นให้ไปแก้โค้ดอีกครั้งในไฟล์ models.py ที่แก้ไปก่อนหน้านี้ดังนี้ เพื่อให้สามารถดึงค่าภายใน Object ออกมาแสดงได้

from django.db import models
import datetime
from django.utils import timezone
class Poll(models.Model):
    # ...
    def __unicode__(self): # Python 3: def __str__(self):
        return self.question
    def was_published_recently(self):
        return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
class Choice(models.Model):
    # ...
    def __unicode__(self): # Python 3: def __str__(self):
        return self.choice_text

    จากโค้ดนี้ได้มีการ import API เพิ่มเข้ามาอีก 2 อันคือ datetime จาก python และ timezonne จาก django.utils เข้ามาเพื่อใช้ใน function was_published_recently

    โดย Function __unicode__ นั้นมีไว้เพื่อ return ตัวแปร question และ choice_text กลับออกไปเพื่อให้เวลาเรียกคำสั่ง Poll.objects.all() นั้นแสดงค่าของตัวแปร question และ choice_text ออกมาโดยตรง

    ส่วน Function was_published_recently นั้นคือการ return ค่าออกไปว่าเป็น True หรือ False โดยจะเป็น True ก็ต่อเมื่อ เวลาใน pub_date จะมีค่ามากกว่าหรือเท่ากับ เวลา ณ ปัจจุบัน ลบ ด้วยเวลาถัดไปอีก 1 วัน นั่นหมายความว่า Function นี้จะได้ค่า True หากเราเรียกเมื่อเวลาหลังจากที่เราสร้าง Poll ไม่เกิน 1 วันนั่นเอง

11.เมื่อแก้เสร็จแล้วกลับไปพิมคำสั่ง python manage.py syncdb และ python manage.py shell อีกครั้งหากใครยังไม่ได้ปิด shell ตัวเก่าก็ให้ปิดแล้วพิมคำสั่งรัน shell ใหม่อีกครั้งแล้วพิมคำสั่งตามรูปนี้

       
คำอธิบาย Code ใน Shell

โดยบรรทัดที่ 1 และ 5 เป็นการ import class เข้ามาใช้งาน

บรรทัดที่ 2, 3, 4, 7, 8, 9 เป็นการอ่านค่าจาก Poll ใน Database ออกมาแสดงผล

แต่จะเห็นว่าบรรทัดที่ 8 มี error เนื่องจากเรามี Object ใน Database เพียงแค่ตัวเดียวแต่บรรทัดที่ 8 เรียกหาตัวที่ 2 ซึ่งไม่มีใน Database จึงทำให้เกิด error

บรรทัดที่ 6 ดึงปีปัจจุบันออกมาเก็บไว้ใน current_year

บรรทัดที่ 10 และ 12 ให้ตัวแปร p ชี้ไปยัง Object ใน Database ผ่าน Poll.Object.get(pk=1) pk = Primary Key ซึ่งให้ผลเหมือนกับ Poll.Object.get(id=1)

บรรทัดที่ 11 เป็นการเรียกใช้ method was_published_recently โดยให้ค่ากลับมาเป็น True เมื่อ timezone.now() - datetime.timedelta(days=1) น้อยกว่าหรือเท่ากับ pub_date ที่เก็บไว้ตอนสร้าง Object เก็บใน Database

บรรทัดที่ 13, 18, 23 เป็นการแสดง set ของ Choice ที่มีความสัมพันธ์กับ Object ของ Database p

บรรทัดที่ 14, 15, 16 เป็นการสร้าง Choice 3 อันเข้าไป

บรรทัดที่ 17 เป็นการแสดง poll ที่สัมพันธ์กับ Choice นั้นๆ

บรรทัดที่ 19 แสดงจำนวน Choice ที่สัมพันธ์กับ poll นั้น

บรรทัดที่ 20 จะแสดง Choice โดยต้องเป็น Choice ที่ตั้งในปีนี้

บรรทัดที่ 21 ให้ c ชี้ไปที่ Object ของ Choice ที่เริ่มต้นด้วย Just hacking

บรรทัดที่ 22 ลบ Object ที่ c ชี้ไปจากบรรทัดที่ 21

    จาก Tutorial Part 1 ทำให้เรารู้จักการสร้าง models (Apps) เพื่อใช้สำหรับ Web Application โดยในเว็บ 1 เว็บเราสามารถมี Application ได้มากกว่า 1 Application การใช้งาน Database ในการเก็บข้อมูลใน Apps ซึ่งช่วยให้ง่ายต่อการจัดการข้อมูลสำหรับคนที่ไม่มีพื้นฐานทางด้าน Database มาก่อนเลย

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

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