Kamis, 28 Februari 2019

Website pada SQLiteBoy

- Untuk mengelola website, buka /admin /website (sebagai admin), atau buka info -> website.
  
- 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