2009-05-17 10 views
5

Sto costruendo un sito Web (in Django) e sono confuso circa la convenzione di denominazione corretta da utilizzare per le mie funzioni. Esempio banale: diciamo che ho una pagina che consente all'utente di decidere se vuole vedere l'immagine A o l'immagine B. Una volta che l'utente ha inviato la decisione, il sito visualizza l'immagine richiesta dall'utente.Convenzione di denominazione per le viste Django?

Qui ci sono le due funzioni avrei nel mio modulo di vista:

def function1(request): 
    """Returns the page that presents the user with the choice between A and B""" 

def function2(request): 
    """Takes in the submitted form and returns a page with the image the user requested.""" 

Qual è la convenzione per la denominazione delle funzioni che fanno questo? Vedo almeno due modi possibili:

Opzione 1: function1: "decide", function2: "view_image"

Opzione 2: function1: "view_choices", function2: "decide"

Il problema centrale è che ciascuna di queste funzioni fa 2 cose: (1) processo e memorizzare i dati inviati dall'utente e (2) restituire la pagina successiva, che può o meno essere correlata all'input dell'utente. Quindi dovrei nominare le mie funzioni dopo (1) o (2)?

risposta

1

Finché ci sono quei bei commenti, sospetto che non sarà mai un problema per voi.

In ogni caso, è meglio assegnare un nome alle funzioni in base a ciò che fanno in modo che function1 possa essere "displayImageChoices" e function2 potrebbe essere "displayImage".

IE, la funzione1 richiede un po 'di input e visualizza alcune scelte, la funzione 2 richiede un input e visualizza un'immagine.

+3

PEP8 (http://www.python.org/dev/peps/pep-0008/) dice: "I nomi delle funzioni devono essere in minuscolo, con le parole separate dai trattini di sottolineatura come necessario per migliorare la leggibilità mixedCase è consentito solo in contesti in cui è già lo stile prevalente (ad esempio threading.py), a mantenere la retrocompatibilità. " –

+0

Questo è un buon punto, mi sono concentrato su "ciò che i nomi trasmettono", piuttosto che le convenzioni CamelCase/formattazione. –

8

In genere la convenzione è una sorta di CRUD (creazione, recupero, aggiornamento, eliminazione). Personalmente uso indice, dettaglio, creazione, aggiornamento, cancellazione per le mie azioni. Tuttavia, non penso che questo si applica alle tue funzioni personalizzate.

In realtà sembra che le tue funzioni debbano essere unite nella stessa funzione "scegli". Quindi si visualizza il modulo o il risultato a seconda che il risultato sia o meno un POST.

Nota: ho copiato pesantemente questo esempio del modulo django docs on form handling.

def choose(request): 
    """ 
    Presents the user with an image selection form and displays the result. 
    """ 
    if request.method == 'POST': # If the form has been submitted... 
     form = ChoiceForm(request.POST) # A form bound to the POST data 
     if form.is_valid(): # All validation rules pass 
      # Process the data in form.cleaned_data 
      # ... 
      return HttpResponseRedirect('/thanks/') # Redirect after POST 
    else: 
     form = ChoiceForm() # An unbound form 

    return render_to_response('choose.html', { 
     'form': form, 
    }) 
+0

Grazie Soviut! Questo potrebbe essere proprio quello che sto cercando. Ma mi chiedo - questa funzione "scegli" contenga anche il codice per restituire la pagina con l'immagine, o il codice dovrebbe appartenere a un'altra funzione? (Non vorrei reindirizzare a '/ thanks /' nel mio caso.) – RexE

+2

@RexE: Se il modulo viene inviato POST (che dovrebbe essere se modifica i dati), allora _should_ reindirizza dopo aver elaborato i dati in una vista diversa che mostra la pagina. Altrimenti esponi l'utente a messaggi confusi e, eventualmente, eseguendo involontariamente l'azione più volte se provano ad aggiornare la pagina. –

+0

@Carl: nella maggior parte dei casi sono d'accordo, tranne in situazioni in cui si sta eseguendo qualcosa come restituire un risultato di ricerca, ma si sta ancora visualizzando la casella di ricerca nella parte superiore della pagina, in tal caso il reindirizzamento non è necessario. Questo potrebbe essere il caso della domanda dell'OP. – Soviut

1

userei qualcosa di simile a quello costruito in vista (Object_List, object_detail, ecc) se del caso. (Sempre una buona idea)

Il resto seguirà il concetto (item_action) il più lontano possibile.

0

So che questo è un po 'obsoleto ora, ma dal passaggio alle viste basate su classi.

PEP8 (python.org/dev/peps/pep-0008) le convenzioni di denominazione per le classi sarebbero la maiuscola di ogni parola, senza spazi. Se si utilizzano ancora le viste di stile della funzione, i nomi delle funzioni in minuscolo con spazi sostituiti da caratteri di sottolineatura per la leggibilità.

Ad esempio, con una vista a base di classe:

class MyClassBasedView(): 
    ... 

Funzione basato

def my_function_based_view(): 
    ... 
Problemi correlati