django: augmenter BadRequest que l'exception?

Est-il possible d'augmenter BadRequest comme exception dans django?

J'ai vu que vous pouvez soulever une 404 [1].

Cas d'utilisation: dans une méthode d'assistance que je charge un json à partir de la demande.OBTENIR. Si le json a été coupé depuis le navigateur (IE) couper l'url, je voudrais poser une correspondance d'exception.

Un BadRequest exception semble approprié, mais jusqu'à maintenant, il semble y aucune exception dans django.

En 1.6 il y a un SuspiciousOperation exception. Mais cela ne correspond pas à dans mon cas, puisqu'il n'est pas lié à la sécurité.

Bien sûr, je pourrais faire un essai..sauf autour de mon helper dans la méthode de vue, mais ce n'est pas SÈCHE.

Quelqu'un a une solution où je n'ai pas besoin d'essayer..exception autour de chaque appel de ma méthode d'aide?

[1] https://docs.djangoproject.com/en/1.6/ref/exceptions/#django.core.urlresolvers.Resolver404

Mise à jour

Exemple de Code:

def my_view(request):
    data=load_data_from_request(request) # I don't want a try..except here: DRY
    process_data(data)
    return django.http.HttpResponse('Thank you')

def load_data_from_request(request):
    try:
        data_raw=json.loads(...)
    except ValueError, exc:
        raise BadRequest(exc)
    ...
    return data
pourquoi ne pas juste retour django.http.HttpResponseBadRequest ?
Si vous voulez être à SEC, laissez votre méthode d'aide de retour à l'appropriées HttpResponse classe, ou d'en créer un autre raccourci autour d'elle, comme load_json_or_bad_request().
Je ne veux pas rentrer django.http.HttpResponseBadRequest depuis ma méthode retourne l'analyse des données, à l'exception de l'entrée de données est interrompue.
Après votre mise à jour, je pense que vous devez soulever une exception personnalisée et de les traiter dans un middleware comme suggéré par coldmind. C'est le même mécanisme utilisé par get_object_or_404

OriginalL'auteur guettli | 2014-08-21

Leave a Reply

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *