Я так понял - вопрос в том, что в одной функции объединить обработку всего, что связано с действием с фотографиями, или писать отдельные.
Я для себя в свое время сделал выбор - в одной. Особенно, когда все просто.
Когда обработка занимать начинает много времени - в разных )))
Единственное, для этих действий интереснее будет сделать все же не через GET, а полными урлами /album/delete/23 и разводить их или в едниной функции
url.py
url(r'^album/(?P<action>[^/]+)/(?P<o_id>\d+)/$', 'album.albums', name='albums'),
views.py
def albums(request, action, o_id):
if action == 'delete'
...
return render_to_response(...
elif ...
или с промежутком
def album_delete(o_id):
from .models import Image
...
return 'ok'
def albums(request, action, o_id):
if action == 'delete'
...
return album_delete(o_id)
elif ...
или в разных
url.py
url(r'^album/delete/(?P<o_id>\d+)/$', 'album.album_delete', name='album_delete'),
все зависит от сложности, потребности и необходимости использования распределения