TurboGears - Operasi CRUD

Metode sesi berikut melakukan Operasi CRUD -

  • DBSession.add(model object) - memasukkan catatan ke dalam tabel yang dipetakan.

  • DBSession.delete(model object) - menghapus catatan dari tabel.

  • DBSession.query(model).all() - mengambil semua record dari tabel (sesuai dengan query SELECT).

Anda dapat menerapkan filter ke kumpulan record yang diambil dengan menggunakan atribut filter. Misalnya, untuk mengambil record dengan city = 'Hyderabad' dalam tabel siswa, gunakan pernyataan berikut -

DBSession.query(model.student).filter_by(city = ’Hyderabad’).all()

Sekarang kita akan melihat bagaimana berinteraksi dengan model melalui URL pengontrol.

Pertama mari kita rancang formulir ToscaWidgets untuk memasukkan data siswa

Hello\hello\controllers.studentform.py

import tw2.core as twc
import tw2.forms as twf

class StudentForm(twf.Form):
   class child(twf.TableLayout):
      name = twf.TextField(size = 20)
      city = twf.TextField()
      address = twf.TextArea("",rows = 5, cols = 30)
      pincode = twf.NumberField()

   action = '/save_record'
   submit = twf.SubmitButton(value = 'Submit')

Di RootController (root.py dari aplikasi Hello), tambahkan pemetaan fungsi berikut '/ tambahkan' URL -

from hello.controllers.studentform import StudentForm

class RootController(BaseController):
   @expose('hello.templates.studentform')
   def add(self, *args, **kw):
      return dict(page='studentform', form = StudentForm)

Simpan kode HTML berikut sebagai studentform.html di folder template -

<!DOCTYPE html>
<html xmlns = "http://www.w3.org/1999/xhtml"
   xmlns:py = "http://genshi.edgewall.org/"
   lang = "en">
   
   <head>
      <title>Student Registration Form</title>
   </head>
   
   <body>
      <div id = "getting_started">
         ${form.display(value = dict(title = 'Enter data'))}
      </div>
   </body>

</html>

Memasukkan http://localhost:8080/adddi browser setelah memulai server. Formulir informasi siswa berikut akan terbuka di browser -

Formulir di atas dirancang untuk diserahkan ke ‘/save_record’URL. Oleh karena itu asave_record() fungsi perlu ditambahkan di root.pyuntuk mengeksposnya. Data dari bentuk siswa diterima oleh fungsi ini sebagai adict()obyek. Ini digunakan untuk menambahkan record baru dalam tabel siswa yang mendasari model siswa.

@expose()
#@validate(form = AdmissionForm, error_handler = index1)

def save_record(self, **kw):
   newstudent = student(name = kw['name'],city = kw['city'],
      address = kw['address'], pincode = kw['pincode'])
   DBSession.add(newstudent)
   flash(message = "new entry added successfully")
   redirect("/listrec")

Harap dicatat bahwa setelah penambahan berhasil, browser akan dialihkan ke ‘/listrec’ URL. URL ini diekspos oleh alistrec() function. Fungsi ini memilih semua record dalam tabel siswa dan mengirimkannya dalam bentuk objek dict ke template studentlist.html. Inilistrec() fungsinya adalah sebagai berikut -

@expose ("hello.templates.studentlist")
def listrec(self):
   entries = DBSession.query(student).all()
   return dict(entries = entries)

Template studentlist.html melakukan iterasi melalui objek kamus entri menggunakan py: untuk direktif. Template studentlist.html adalah sebagai berikut -

<html xmlns = "http://www.w3.org/1999/xhtml"
   xmlns:py = "http://genshi.edgewall.org/">
   
   <head>
      <link rel = "stylesheet" type = "text/css" media = "screen" 
         href = "${tg.url('/css/style.css')}" />
      <title>Welcome to TurboGears</title>
   </head>
   
   <body>
      <h1>Welcome to TurboGears</h1>
      
      <py:with vars = "flash = tg.flash_obj.render('flash', use_js = False)">
         <div py:if = "flash" py:replace = "Markup(flash)" />
      </py:with>
      
      <h2>Current Entries</h2>
      
      <table border = '1'>
         <thead>
            <tr>
               <th>Name</th>
               <th>City</th>
               <th>Address</th>
               <th>Pincode</th>
            </tr>
         </thead>
         
         <tbody>
            <py:for each = "entry in entries">
               <tr>
                  <td>${entry.name}</td>
                  <td>${entry.city}</td>
                  <td>${entry.address}</td>
                  <td>${entry.pincode}</td>
               </tr>
            </py:for>
         </tbody>
         
      </table>
   
   </body>
</html>

Sekarang kunjungi kembali http://localhost:8080/adddan memasukkan data ke dalam formulir. Dengan mengklik tombol kirim, browser akan dibawa ke studentlist.html. Ini juga akan mem-flash pesan 'catatan baru berhasil ditambahkan'.