1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 | import logging from simplejson import dumps from formencode.api import Invalid from restmarks.lib.base import * log = logging.getLogger(__name__) class UsersController(BaseController): """REST Controller styled on the Atom Publishing Protocol""" # To properly map this controller, ensure your config/routing.py file has # a resource setup: # map.resource('user', 'users') def index(self, format='html'): """GET /users: All items in the collection.<br> @param format the format passed from the URI. """ #url_for('users') users = model.User.select() if format=='json': data = [] for user in users: d = user._state['original'].data del d['password'] d['link'] = h.url_for('user', id=user.name) data.append(d) response.headers['content-type'] = 'text/javascript' return dumps(data) else: c.users = users return render('/users/index_user.mako') def create(self): """POST /users: Create a new item.""" # url_for('users') user = model.User.get_by(name=request.params['name']) if user: # The client tried to create a user that already exists abort(409, '409 Conflict', headers=[('location', h.url_for('user', id=user.name)), ]) else: try: # Validate the data that was sent to us params = model.forms.UserForm.to_python(request.params) except Invalid, e: # Something didn't validate correctly abort(400, '400 Bad Request -- '+str(e)) user = model.User(**params) model.objectstore.flush() response.headers['location'] = h.url_for('user', id=user.name) response.status_code = 201 c.user_name = user.name return render('/users/created_user.mako') def new(self, format='html'): """GET /users/new: Form to create a new item. @param format the format passed from the URI. """ # url_for('new_user') return render('/users/new_user.mako') def update(self, id): """PUT /users/id: Update an existing item. @param id the id (name) of the user to be updated """ # Forms posted to this method should contain a hidden field: # <input type="hidden" name="_method" value="PUT" /> # Or using helpers: # h.form(h.url_for('user', id=ID), # method='put') # url_for('user', id=ID) old_name = id new_name = request.params['name'] user = model.User.get_by(name=id) if user: if (old_name != new_name) and model.User.get_by(name=new_name): abort(409, '409 Conflict') else: params = model.forms.UserForm.to_python(request.params) user.name = params['name'] user.full_name = params['full_name'] user.email = params['email'] user.password = params['password'] model.objectstore.flush() if user.name != old_name: abort(301, '301 Moved Permanently', [('Location', h.url_for('users', id=user.name)),]) else: return '' def delete(self, id): """DELETE /users/id: Delete an existing item. @param id the id (name) of the user to be updated """ # Forms posted to this method should contain a hidden field: # <input type="hidden" name="_method" value="DELETE" /> # Or using helpers: # h.form(h.url_for('user', id=ID), # method='delete') # url_for('user', id=ID) user = model.User.get_by(name=id) user.delete() model.objectstore.flush() return '' def show(self, id, format='html'): """GET /users/id: Show a specific item. @param id the id (name) of the user to be updated. @param format the format of the URI requested. """ # url_for('user', id=ID) user = model.User.get_by(name=id) if user: if format=='json': data = user._state['original'].data del data['password'] data['link'] = h.url_for('user', id=user.name) response.headers['content-type'] = 'text/javascript' return dumps(data) else: c.data = user return render('/users/show_user.mako') else: abort(404, '404 Not Found') def edit(self, id, format='html'): """GET /users/id;edit: Form to edit an existing item. @param id the id (name) of the user to be updated. @param format the format of the URI requested. """ # url_for('edit_user', id=ID) user = model.User.get_by(name=id) if not user: abort(404, '404 Not Found') # Get the form values from the table c.values = model.forms.UserForm.from_python(user.__dict__) return render('/users/edit_user.mako') |
Powered by Pylons - Contact Administrators
Comments (0)
You must login before you can comment.