Changes between Version 18 and Version 19 of BluePrintRESTImplementation


Ignore:
Timestamp:
01/02/09 02:03:22 (16 years ago)
Author:
Fran Boon
Comment:

New Implementation with shn_rest_controller() broken out :)

Legend:

Unmodified
Added
Removed
Modified
  • BluePrintRESTImplementation

    v18 v19  
    22
    33== Model ==
    4 Simplified:
    5 {{{
    6 db.define_table('cr_shelter',
    7                 SQLField('modified_on','datetime',default=now),
    8                 SQLField('uuid',length=64,default=uuid.uuid4()),
    9                 SQLField('name'))
    10 db.cr_shelter.represent=lambda table:shn_list_item(table,resource='shelter',action='display')
    11 }}}
    12 
    13 == Controller ==
    14 {{{
    15 # RESTful controller function
    16 # Anonymous users can Read
    17 # Authentication required for Create/Update/Delete
    18 def shelter():
    19     resource='shelter'
     4{{{
     5def shn_crud_strings_lookup(resource):
     6    "Look up CRUD strings for a given resource."
     7    if resource=='shelter':
     8        return Storage(title_create=T('Add Shelter'),
     9            title_display=T('Organisation Details'),
     10            title_list=T('List Shelters'),
     11            title_update=T('Edit Shelter'),
     12            subtitle_list=T('Shelters'),
     13            subtitle_create=T('Add New Shelter'),
     14            label_list_button=T('List Shelters'),
     15            label_create_button=T('Add Shelter'),
     16            msg_record_created=T('Shelter added'),
     17            msg_record_modified=T('Shelter updated'),
     18            msg_record_deleted=T('Shelter deleted'),
     19            msg_list_empty=T('No Shelters currently registered'))
     20    else:
     21        # Undefined Resource!
     22        return
     23
     24def shn_rest_controller(module,resource):
     25    """
     26    RESTful controller function.
     27   
     28    Anonymous users can Read.
     29    Authentication required for Create/Update/Delete.
     30   
     31    ToDo:
     32        Alternate Representations
     33        Search method
     34        Customisable Security Policy
     35    """
     36   
    2037    table=db['%s_%s' % (module,resource)]
    21     if request.args:
     38   
     39    crud_strings=shn_crud_strings_lookup(resource)
     40
     41    if len(request.args)==0:
     42        # No arguments => default to list (or list_create if logged_in)
     43        list=t2.itemize(table)
     44        if list=="No data":
     45            list=crud_strings.msg_list_empty
     46        title=crud_strings.title_list
     47        subtitle=crud_strings.subtitle_list
     48        if t2.logged_in:
     49            form=t2.create(table)
     50            response.view='list_create.html'
     51            addtitle=crud_strings.subtitle_create
     52            return dict(module_name=module_name,modules=modules,options=options,list=list,form=form,title=title,subtitle=subtitle,addtitle=addtitle)
     53        else:
     54            add_btn=A(crud_strings.label_create_button,_href=t2.action(resource,'create'))
     55            response.view='list.html'
     56            return dict(module_name=module_name,modules=modules,options=options,list=list,title=title,subtitle=subtitle,add_btn=add_btn)
     57           
     58    else:
    2259        method=request.args[0]
    23         try:
    24             # 1st argument is ID not method => display
    25             id = int(method)
     60        if request.args[0].isdigit():
     61            # 1st argument is ID not method => display.
     62            # Default format (representation) is full HTML page
    2663            item=t2.display(table)
    2764            response.view='display.html'
    28             title=T('Shelter Details')
     65            title=crud_strings.title_display
    2966            edit=A(T("Edit"),_href=t2.action(resource,['update',t2.id]))
    30             list_btn=A(T("List Shelters"),_href=t2.action(resource))
     67            list_btn=A(crud_strings.label_list_button,_href=t2.action(resource))
    3168            return dict(module_name=module_name,modules=modules,options=options,item=item,title=title,edit=edit,list_btn=list_btn)
    32         except:
     69        else:
    3370            if method=="create":
    3471                if t2.logged_in:
    35                     t2.messages.record_created=T("Shelter added")
     72                    t2.messages.record_created=crud_strings.msg_record_created
    3673                    form=t2.create(table)
    3774                    response.view='create.html'
    38                     title=T('Add Shelter')
    39                     list_btn=A(T("List Shelters"),_href=t2.action(resource))
     75                    title=crud_strings.title_create
     76                    list_btn=A(crud_strings.label_list_button,_href=t2.action(resource))
    4077                    return dict(module_name=module_name,modules=modules,options=options,form=form,title=title,list_btn=list_btn)
    4178                else:
     
    4582            elif method=="update":
    4683                if t2.logged_in:
    47                     t2.messages.record_modified=T("Shelter updated")
     84                    t2.messages.record_modified=crud_strings.msg_record_modified
    4885                    form=t2.update(table)
    4986                    response.view='update.html'
    50                     title=T('Edit Shelter')
    51                     list_btn=A(T("List Shelters"),_href=t2.action(resource))
     87                    title=crud_strings.title_update
     88                    list_btn=A(crud_strings.label_list_button,_href=t2.action(resource))
    5289                    return dict(module_name=module_name,modules=modules,options=options,form=form,title=title,list_btn=list_btn)
    5390                else:
     
    5592            elif method=="delete":
    5693                if t2.logged_in:
    57                     t2.messages.record_deleted=T("Shelter deleted")
     94                    t2.messages.record_deleted=crud_strings.msg_record_deleted
    5895                    t2.delete(table,next=resource)
    5996                    return
     
    6198                    t2.redirect('login',vars={'_destination':'%s/delete/%i' % (resource,t2.id)})
    6299            else:
    63                 # Invalid!
    64                 return
    65     else:
    66         # No arguments => default to list
    67         list=t2.itemize(table)
    68         if list=="No data":
    69             list="No Shelters currently registered."
    70         title=T('List Shelters')
    71         subtitle=T('Shelters')
    72         if t2.logged_in:
    73             form=t2.create(table)
    74             response.view='list_create.html'
    75             addtitle=T('Add New Shelter')
    76             return dict(module_name=module_name,modules=modules,options=options,list=list,form=form,title=title,subtitle=subtitle,addtitle=addtitle)
    77         else:
    78             add_btn=A(T("Add Shelter"),_href=t2.action(resource,'create'))
    79             response.view='list.html'
    80             return dict(module_name=module_name,modules=modules,options=options,list=list,title=title,subtitle=subtitle,add_btn=add_btn)
     100                # Unsupported method!
     101                t2.redirect(resource)
     102}}}
     103
     104Simplified module table:
     105{{{
     106db.define_table('cr_shelter',
     107                SQLField('modified_on','datetime',default=now),
     108                SQLField('uuid',length=64,default=uuid.uuid4()),
     109                SQLField('name'))
     110db.cr_shelter.represent=lambda table:shn_list_item(table,resource='shelter',action='display')
     111}}}
     112
     113== Controller ==
     114{{{
     115def shelter():
     116    "RESTful CRUD controller"
     117    return shn_rest_controller(module,'shelter')
    81118}}}
    82119