- URL custom (bebas dibuat), selama URL tersebut tidak digunakan oleh SQLiteBoy (sudah dibuat).
Daftar URL yang sudah dibuat tersebut ditampilkan di layar manajemen website.
- URL dapat ditangani oleh fungsi python, redirect, file, template, atau HTML.
- Setiap URL ditentukan oleh:
- id: harus alfabet saja (panjang maksimum: 36), dikonversi ke huruf kecil saat disimpan. Id ini digunakan dalam python handler.
- url: harus berupa alfanumerik /underscore/titik/garis miring/tanda hubung (panjang maksimum: 128), dikonversi menjadi huruf kecil saat disimpan. Ini adalah URL. Silakan baca aturan tambahan di bawah ini.
- konten: konten, ditafsirkan.
- Aturan tambahan URL :
- Silakan gunakan / untuk home page. Tanpa URL ini, / akan diarahkan ke /index (/login jika pengguna belum login)
- Awali url dengan / (tapi jangan akhiri dengan /)
- Hanya nilai yang valid yang disimpan (id dan url diperiksa saat disimpan).
- Interpretasi konten:
# Jika ada fungsi python bernama web_<id> (dalam sqliteboy_user.py):
- Ia akan dipanggil dan nilai kembaliannya digunakan sebagai konten dinamis (dengan header HTTP custom)
- Jika ada pengecualian, pengalihan ke / indeks akan dilakukan. Pastikan fungsi python valid.
# Jika ada fungsi python bernama web_<id> (dalam sqliteboy_user.py):
- Ia akan dipanggil dan nilai kembaliannya digunakan sebagai konten dinamis (dengan header HTTP custom)
- Jika ada pengecualian, pengalihan ke / indeks akan dilakukan. Pastikan fungsi python valid.
# Jika python handler untuk URL tidak tersedia:
1. Jika konten terlihat seperti angka:
~ Jika angka tersebut adalah id file yang valid:
* Konten file akan dikembalikan (bersama dengan header yang disimpan)
* Untuk mengatur Content-Disposition sebagai lampiran, harap atur parameter unduhan (misalnya: ?download=download or ?download=true)
* Content-Disposition default sejalur
* Id file yang valid:
+ Ada di Files
+ Jika pengguna login:
Status file-sharing diperiksa. Jika file tidak dibagikan
(dan pengguna yang masuk bukan pemilik), itu dianggap
tidak valid. Ini berlaku untuk semua pengguna, termasuk admin.
~ Jika angka tersebut bukan id file yang valid:
* Konten akan dikembalikan
2. Jika konten bukan angka:
~ Jika konten dimulai dengan http:// atau https://, pengalihan dilakukan
~ Kalau tidak, konten ditafsirkan sebagai HTML dengan template.
- Interpretasi template HTML:
# Jika ada pengecualian (atau konten adalah HTML), konten akan dikembalikan apa adanya
# Jika ini dimaksudkan sebagai template, silakan mulai konten dengan
::
$def with (id, url, content, param)
# Fungsi-fungsi global berikut tersedia untuk template:
* size: sebuah fungsi, tidak memerlukan argumen, mengembalikan ukuran database sebagai string
* user: suatu fungsi, tidak memerlukan argumen, mengembalikan nama pengguna yang login sebagai string (atau string kosong)
* table_browse: suatu fungsi, untuk menelusuri tabel (tidak termasuk _sqliteboy_, sqlite_sequence, sqlite_master)
::
table_browse(table, what='*', where=None, order=None, group=None, limit=None, offset=None)
- Silakan baca template web.py untuk informasi lebih lanjut.
- Contoh (custom URL:/test, /test?hello=world):
::
$def with (id, url, content, param)
<!DOCTYPE html>
<html>
<head>
</head>
<body>
$ u = user()
$if u:
Hello, $u
<br>
$ data = table_browse('A', order='name')
$if data:
$for d in data:
$d['name']
<br>
URL: $url
<br>
Hello: $param.get('hello', '')
</body>
</html>
- Python handler:
# Argumen yang diperlukan:
- user: pengguna saat ini (str)
- db: objek koneksi database (objek database web.py)
- url_id: id url (str)
- url: url (str)
- content: konten (str)
- param: parameter (web.input ())
- data: data tambahan (fungsi pembantu, UDF, modul, dll) (dict)
# Function harus mengembalikan list dari 2 anggota:
- headers, empty list atau list dari [nama header HTTP, nilai header HTTP]
- content (str)
# Contoh (url id: test, url: /test, url: test?hello=world):
::
def web_test(user, db, url_id, url, content, param, data):
headers = [
['Content-Type', 'text/plain'],
]
content = 'hello %s' %(param.get('hello', ''))
return [headers, content]
- Metode POST:
# Hanya dapat ditangani oleh fungsi python bernama post_ <id> (dalam sqliteboy_user.py)
# Jika ada pengecualian, atau handler tidak tersedia, string kosong dikembalikan
# Contoh (url id: form, url: /form): :: <!DOCTYPE html> <html> <head> </head> <body> <form action="/form" method="post"> Hello <input type="text" name="name"> <input type="submit"> </form> </body> </html>
# Handler metode POST:
::
def post_form(user, db, url_id, url, content, param, data):
headers = [
['Content-Type', 'text/plain'],
]
content = 'POST: hello %s' %(param.get('name', ''))
return [headers, content]
- URL khusus tidak ditemukan:
# Dapat diatur pada konfigurasi Sistem
# Hanya berlaku saat tidak login
# Harap setel ke URL custom yang ada
- Tambahan: mungkin ide yang baik untuk mempertimbangkan / menggunakan proxy terbalik.
Tidak ada komentar:
Posting Komentar