I think this should probably be broken up into a couple checks so we can return the appropriate HTTP response. Return a 404 if the ``Clipping`` object just doesn't exist, and return 403 if it exists but ``clip.user`` doesn't match ``request.user``. For example:

```python
@login_required
def delete_clipping(request, clip_id):
    clip = get_object_or_404(Clipping, id=clip_id)
    if clip.user != request.user:
        return HttpResponseForbidden()

    api = generate_api(request)
    for ext in ['pdf', 'html']:
        filename = '.'.join([clip.filename, ext])
        path = '/smartclip/%s/%s' % (ext, filename)
        api.client.post('/path/oper/remove', path=path)

    clip.delete()
    return HttpResponse('deleted')
```

Doing it this way gives us flexibility in letting the user know what went wrong.