from django.conf.urls import patterns, include, url
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
url(r'^admin/', include(admin.site.urls)),
url(r'^time/$', 'Stamp.views.display_time'),
url(r'^time/plus_m/(\d+)/$', 'Stamp.views.minutes_ahead'),
)
จากนั้นเข้าไปเพิ่มโค้ด ในไฟล์ views.py ดังนี้
from django.http import HttpResponse,Http404
import time,datetime
def display_time(request):
now = time.localtime()
return HttpResponse("""
<html>
<head>
<title>Test</title>
</head>
<body bgcolor="skyblue"><font color="brown" size="10">
<center>Year : """ + str(now[0]) + """<br><br>
Month : """ + str(now[1]) + """<br><br>
Day : """ + str(now[2]) + """<br><br>
Time : """ + str(now[3]) + ":" + str(now[4]) + ":" + str(now[5]) + """
</center>
</body>
</html>""")
def minutes_ahead(request, offset):
try:
offset = int(offset)
except ValueError:
raise Http404()
dt = datetime.datetime.now() + datetime.timedelta(minutes=offset)
html = """<html><body bgcolor="skyblue"><center><font color="brown" size="10">In %s minute(s), it will be %s.</font><center></body></html>""" % (offset, dt)
return HttpResponse(html)
จะสังเกตได้ว่าในโค้ดนีี้มีรูปแบบของ Urls อยู่สองแบบคือ
url(r'^time/$', 'Stamp.views.display_time'),
url(r'^time/plus_m/(\d+)/$', 'Stamp.views.minutes_ahead'),
ซึ่งจะเห็นว่าแบบแรกนั้นหากเราพิม 127.0.0.1/time ก็จะแสดงรูปแบบของเพจออกมาได้เพียงแบบเดียวซึ่งเพจแบบนี้เรียกว่า Static เพจซึ่งการทำ Web Application ส่วนใหญ่จะใช้เพจแบบ Dynamic ซึ่งจะเป็นแบบที่สอง 127.0.0.1/time/plus_m/1 ก็จะเป็นการโชว์เวลาที่เพิ่มไปอีก 1 นาทีตามที่ได้เขียนไว้ใน Function minutes_ahead ใน Views โดยหากเพิ่มเป็น 127.0.0.1/time/plus_m/2 ก็จะเพิ่มเวลาไปอีก 2 นาทีเช่นที่เขียนใน Function
โดย url(r'^time/plus_m/(\d+)/$', 'Stamp.views.minutes_ahead'), นั้นจะเห็นว่ามี (\d+) ซึ่งในส่วนนี้จะเป็นส่วนที่ทำให้โค้ดของเรา Dynamic เพราะในส่วนนี้นั้นจะเป็นการรับค่าจาก Url ที่พิมเข้าไปให้ Function minutes_ahead โดยค่าที่ส่งไปจะเป็นค่าของตัวแปร offset และนำไปใช้ใน Function ในส่วนของ Function นั้น จะมีโค้ด
try:ซึ่งทำหน้าที่ในการเช็คว่าค่าที่รับมาจาก Url นั้นเป็นตัวแปรประเภท int หรือไม่หาก ไม่ใช่ int ก็จะเกิด exception แล้วเพจจะเด้งไปที่หน้า Page not found 404 แทนเพราะหากไม่ใช่ตัวแปรที่เป็น int เมื่อนำไปคำนวณในบรรทัด
offset = int(offset)
except ValueError:
raise Http404()
dt = datetime.datetime.now() + datetime.timedelta(minutes=offset)ไม่ได้ซึ่ง exception นั้นมีไว้เพื่อป้องกันเหตุการณ์นี้โดยเฉพาะ
โดย API ที่ใช้ใน Views มี 3 API คือ time , datetime และ HttpResponse , Http404 ซึ่ง time ใช้ใน Function display_time โดยเป็นการดึงเวลาในปัจจุบัน ณ ขณะเรียกเพจขึ้นมาแสดงผล
datetime ใช้ใน Function minutes_ahead โดยเรียกเวลา ปัจจุบันขึ้นมาแล้วเพิ่มด้วยเวลาที่เพิ่มจากเวลาในปัจจุบันไปอีกตามค่าของ offset เป็นนาที
HttpResponse ใช้ในการส่ง String กลับไปแสดงผลใน HTML ซึ่งจะเป็นรูปแบบตามในแต่ละ Function และ Http404 จะเรียก Page not found 404 มาแสดงผลแทนการส่ง String กลับไปแสดงผลใน HTML
ดังนั้นในไฟล์ views นั้นเราสามารถใช้ในการกำหนดรูปแบบที่จะเอาไว้ใช้ในการแสดงผลโดยการเขียน Function ไว้ในนั้นและใช้ urls ในการเรียกใช้ Function ใน views มาแสดงผลออกทาง HTML
ไม่มีความคิดเห็น:
แสดงความคิดเห็น