2 พฤษภาคม 2560

Published พฤษภาคม 02, 2560 by with 1 comment

สร้างเว็บด้วย Bottle : ตอนที่ 2 องค์ประกอบเบื้องต้น

ในตอนที่ 2 องค์ประกอบเบื้องต้น ของบทความชุด "สร้างเว็บด้วย Bottle" เรามาทำความรู้จักกับองค์ประกอบเบื้องต้นของตัว Bottle

ควบคุมที่ตั้งหน้าเว็บ


Request Routing


เราสามารถสร้างหน้าเว็บใน Bottle โดยใช้
@route('ชื่อหน้าเว็บ')
บนฟังก์ชันที่ต้องการสำหรับหน้าเว็บนั้น เป็น Fixed ลิงค์ไปในตัว

ตัวอย่าง


from bottle import route, run, template

@route('/hi')
def hi():
   return 'Hi'


run(host='localhost', port=8080)

เมื่อรัน http://localhost:8080/hi จะแสดง Hi




Dynamic Routes


เป็นการกำหนดหน้าเว็บที่ไม่ Fixed ลิงค์ ขึ้นอยู่กับข้อมูลที่รับมาภายใต้รูปแบบลิงค์ที่กำหนด
เช่น หน้าเว็บ hello/ สามารถรับเป็น hello/hi หรือ hello/อะไร อะไรก็ได้เหมือนกัน

@route('/hello/<name>')
def index(name):
return template('<b>Hello {{name}}</b>!', name=name)

และสามารถกำหนดชนิดข้อมูลที่ต้องการรับจากลิงค์ได้ โดยใช้

<name:filter>
filter มีดังนี้

  • :int รับได้เฉพาะจำนวนเต็ม

  • :float รับได้เฉพาะจำนวนจริง

  • :path รับได้ตัวอักษรที่ตรงกันรวมทั้ง  slash character

  • :re รับได้เฉพาะที่ถูกต้องตาม re

ตัวอย่าง

@route('/object/<id:int>')
def callback(id):
  assert isinstance(id, int)

@route('/show/<name:re:[a-z]+>')
def callback(name):
  assert name.isalpha()

@route('/static/<path:path>')
def callback(path):
  return static_file(path, ...)

HTTP Request Methods


Bottle สามารถรับ request methods โดยรองรับ get(), post(), put(), delete() หรือ patch()
สามารถข้อมูลผ่าน POST ได้ง่าย ๆ ตามนี้

from bottle import get, post, request # or route

@get('/login') # or @route('/login')
def login():
  return '''<form action="/login" method="post">
  Username: <input name="username" type="text" />
  Password: <input name="password" type="password" />
  <input value="Login" type="submit" />
  </form>
 
  '''

@post('/login') # or @route('/login', method='POST')
def do_login():
  username = request.forms.get('username')
  password = request.forms.get('password')
  if check_login(username, password):
   return "Your login information was correct."
  else:
   return "Login failed."


Error Pages


เราสามารถทำหน้าเพจพิเศษแสดงเวลาแจ้งข้อผิดพลาด HTTP status code ได้ ดังนี้

from bottle import error
@error(404)
def error404(error):
  return 'Nothing here, sorry'

แสดงหน้าเพจแจ้งเมื่อไม่พบเพจที่ต้องการ 404


SimpleTemplate Engine


ในตัวของ Bottle มาพร้อมกับ template engine ที่ชื่อว่า "SimpleTemplate" แลนอกจากนั้น เราสามารถใช้ template engine อื่น ๆ ร่วมกับ Bottle
>>> from bottle import SimpleTemplate
>>> tpl = SimpleTemplate('Hello {{name}}!')
>>> tpl.render(name='World')
u'Hello World!'

ติดตามบทความ สร้างเว็บด้วย Bottle : ตอนที่ 3 ต่อไปนะครับ
ขอบคุณครับ

1 ความคิดเห็น:

แสดงความคิดเห็นได้ครับ :)