Se pourrait-il quelque chose dans la ligne de:
Module lib
def add_error_message(request, status, result=0):
if status == 'ACTIVE' and not result:
msg = 'Active Message... bla bla bla'
elif status == 'TOO MANY FAILURES':
msg = 'Failed. Foooobarrrrr'
elif status == 'DEACTIVATED BY MERCHANT':
msg = 'Deactivated derpa derp'
messages.add_message(request, messages.ERROR, _(msg))
Ce ne serait pas pour la condition de 'p.result', un dictionnaire aurait été beaucoup mieux:
MESSAGES = {
'ACTIVE': 'Active Message... bla bla bla',
'TOO MANY FAILURES': 'Failed. Foooobarrrrr',
'DEACTIVATED BY MERCHANT': 'Deactivated derpa derp',
}
def add_error_message(request, status):
try:
messages.add_message(request, messages.ERROR, _(MESSAGES[status]))
except KeyError:
pass
vue Module
from lib import add_error_message
def your_view(request, *args, **kwargs):
# ...
add_error_message(request, status, p.result if p else 0)
return HttpResponseRedirect(reverse('billing_update'))
Je pense que j'aime ça et ça aide aussi à démontrer que je peux prendre beaucoup d'autres parties de code répétées et appliquer la même chose. Est-ce que '' lib.py'' est un modèle courant parmi les projets django? Je n'ai jamais construit mes vues en dehors de .... views.py;) – Flowpoke
Vous êtes libre de moduler notre code de toute façon que vous aimez. Cette fonction peut vivre dans le même module views.py si elle n'est pas nécessaire ailleurs. Le but de DRY est de décomposer le code commun en fonctions et de les mettre dans un endroit accessible. Certaines personnes utilisent 'lib.py' certains' utils.py', d'autres qui aiment Ruby on Rails pourraient penser à utiliser 'helpers.py'. Soyez simplement cohérent dans votre propre projet et documentez votre code. – rewritten
Cela ne l'aide pas vraiment à ne pas se répéter - la duplication de 'messages.add_message (request, messages.ERROR, _())' est toujours là. Ceci est juste une plus grande modularisation --- il pourrait simplement être fait en le mettant dans une méthode. Et, s'il est seulement utilisé depuis 'views.py', il n'appartient pas nécessairement sémantiquement à un autre module. – agf