TurboGears - Operaciones CRUD

Los siguientes métodos de sesión realizan operaciones CRUD:

  • DBSession.add(model object) : Inserta un registro en la tabla asignada.

  • DBSession.delete(model object) - borra el registro de la tabla.

  • DBSession.query(model).all() - recupera todos los registros de la tabla (correspondientes a una consulta SELECT).

Puede aplicar un filtro al conjunto de registros recuperados mediante un atributo de filtro. Por ejemplo, para recuperar registros con city = 'Hyderabad' en la tabla de estudiantes, use la siguiente declaración:

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

Ahora veremos cómo interactuar con los modelos a través de las URL del controlador.

Primero, diseñemos un formulario ToscaWidgets para ingresar los datos del estudiante

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')

En RootController (root.py de la aplicación Hello), agregue la siguiente función de mapeo '/ agregar' 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)

Guarde el siguiente código HTML como studentform.html en la carpeta de plantillas -

<!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>

Entrar http://localhost:8080/adden el navegador después de iniciar el servidor. El siguiente formulario de información del estudiante se abrirá en el navegador:

El formulario anterior está diseñado para ser enviado al ‘/save_record’URL. De ahí unsave_record() la función debe agregarse en el root.pypara exponerlo. Los datos del formulario del alumno son recibidos por esta función comodict()objeto. Se utiliza para agregar un nuevo registro en la tabla de estudiantes subyacente al modelo de estudiantes.

@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")

Tenga en cuenta que después de la adición exitosa, el navegador será redirigido a ‘/listrec’ URL. Esta URL está expuesta por unlistrec() function. Esta función selecciona todos los registros en la tabla de estudiantes y los envía en forma de un objeto dict a la plantilla studentlist.html. Estalistrec() la función es la siguiente:

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

La plantilla studentlist.html itera a través del objeto del diccionario de entradas usando la directiva py: for. La plantilla studentlist.html es la siguiente:

<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>

Ahora revise el http://localhost:8080/adde ingrese los datos en el formulario. Al hacer clic en el botón enviar, el navegador llevará a studentlist.html. También mostrará un mensaje de "nuevo registro agregado correctamente".