TurboGears - Opérations CRUD

Les méthodes de session suivantes exécutent des opérations CRUD -

  • DBSession.add(model object) - insère un enregistrement dans la table mappée.

  • DBSession.delete(model object) - supprime l'enregistrement de la table.

  • DBSession.query(model).all() - récupère tous les enregistrements de la table (correspondant à une requête SELECT).

Vous pouvez appliquer un filtre à l'ensemble d'enregistrements récupéré à l'aide d'un attribut de filtre. Par exemple, pour récupérer des enregistrements avec city = 'Hyderabad' dans la table des étudiants, utilisez l'instruction suivante -

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

Nous allons maintenant voir comment interagir avec les modèles via les URL des contrôleurs.

Concevons d'abord un formulaire ToscaWidgets pour saisir les données de l'élève

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

Dans le RootController (root.py de l'application Hello), ajoutez l'URL de mappage de fonction suivante '/ add' -

from hello.controllers.studentform import StudentForm

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

Enregistrez le code HTML suivant sous studentform.html dans le dossier des modèles -

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

Entrer http://localhost:8080/adddans le navigateur après le démarrage du serveur. Le formulaire d'information étudiant suivant s'ouvrira dans le navigateur -

Le formulaire ci-dessus est conçu pour être soumis au ‘/save_record’URL. D'où unsave_record() la fonction doit être ajoutée dans le root.pypour l'exposer. Les données du formulaire étudiant sont reçues par cette fonction en tant quedict()objet. Il est utilisé pour ajouter un nouvel enregistrement dans la table des étudiants sous-jacente au modèle étudiant.

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

Veuillez noter qu'après l'ajout réussi, le navigateur sera redirigé vers ‘/listrec’ URL. Cette URL est exposée par unlistrec() function. Cette fonction sélectionne tous les enregistrements de la table Student et les envoie sous la forme d'un objet dict au modèle studentlist.html. Celistrec() la fonction est la suivante -

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

Le modèle studentlist.html parcourt l'objet dictionnaire d'entrées à l'aide de la directive py: for. Le modèle studentlist.html est le suivant -

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

Maintenant revisitez le http://localhost:8080/addet entrez les données dans le formulaire. En cliquant sur le bouton Soumettre, le navigateur accédera à studentlist.html. Il fera également clignoter un message «Nouvel enregistrement ajouté avec succès».