2009-05-17 12 views
5

Estoy construyendo un sitio web (en Django) y estoy confundido acerca de la convención de nomenclatura correcta para usar en mis funciones. Ejemplo trivial: digamos que tengo una página que le permite al usuario decidir si quiere ver la imagen A o la imagen B. Una vez que el usuario envía la decisión, el sitio muestra la imagen que el usuario solicitó.Convención de nomenclatura para vistas de Django?

Estas son las dos funciones que tendría en mi módulo de vistas:

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.""" 

¿Cuál es la convención para nombrar las funciones que hacen esto? Veo por lo menos de dos maneras posibles:

Opción 1: function1: "decide", function2: "view_image"

Opción 2: function1: "view_choices", function2: "decide"

La cuestión central es que cada una de estas funciones tiene 2 cosas: (1) el proceso y almacena los datos que el usuario envió y (2) devuelve la siguiente página, que puede estar o no relacionada con la entrada del usuario. Entonces, ¿debería nombrar mis funciones después de (1) o (2)?

Respuesta

1

Mientras tengas esos lindos comentarios, sospecho que nunca será un problema para ti.

De todos modos, es mejor nombrar las funciones en función de lo que hacen, por lo que function1 podría ser "displayImageChoices" y function2 podría ser "displayImage".

IE, la función 1 toma algunas entradas y muestra algunas opciones, la función 2 toma algunas entradas y muestra una imagen.

+3

PEP8 (http://www.python.org/dev/peps/pep-0008/) dice: "Los nombres de las funciones deben ser minúsculas, con las palabras separadas por guiones bajos según sea necesario para mejorar la legibilidad. mixedCase está permitido solo en contextos donde ese es el estilo prevaleciente (por ejemplo, threading.py), para retener la compatibilidad hacia atrás ". –

+0

Ese es un buen punto, me estaba centrando en "lo que transmiten los nombres", en lugar de las convenciones de camelCase/formato. –

8

Normalmente, la convención es algún tipo de CRUD (crear, recuperar, actualizar, eliminar). Personalmente utilizo index, detail, create, update, delete para mis acciones. Sin embargo, no creo que esto se aplique a sus funciones personalizadas.

Realmente parece que sus funciones deberían fusionarse en la misma función "elegir". A continuación, puede mostrar el formulario o el resultado según si el resultado fue un POST o no.

Nota: he codificado en gran medida este ejemplo del 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

Gracias Soviut! Esto podría ser justo lo que estoy buscando. Pero me pregunto: ¿esta función de "elección" también contendría el código para devolver la página con la imagen, o ese código pertenecería a otra función? (No estaría redireccionando a '/ thanks /' en mi caso.) – RexE

+2

@RexE: Si el formulario está POST (que debería ser si modifica los datos), entonces _desdebe_ redirigir después de procesar los datos a una vista diferente que muestra la página. De lo contrario, expone al usuario a mensajes confusos y posiblemente ejecute involuntariamente la acción varias veces si intentan actualizar la página. –

+0

@Carl: en la mayoría de los casos estoy de acuerdo, excepto en situaciones en las que haces algo como devolver un resultado de búsqueda, pero todavía se muestra el cuadro de búsqueda en la parte superior de la página, en ese caso la redirección es innecesaria. Este puede ser el caso con la pregunta del OP. – Soviut

1

que haría uso de algo similar a la incorporada en las vistas (object_list, object_detail, etc) en su caso. (Siempre es una buena idea)

El resto seguiría esa noción (elemento_acción) en la medida de lo posible.

0

Sé que esto está un poco desactualizado ahora, pero desde el cambio a las vistas basadas en clases.

PEP8 (python.org/dev/peps/pep-0008) convenciones de nomenclatura para las clases serían mayúsculas de cada palabra, sin espacios. Si todavía utiliza las vistas de estilo de función, entonces serían los nombres de función en minúsculas con espacios reemplazados por guiones bajos para facilitar la lectura.

Por ejemplo, con vistas a base de clase:

class MyClassBasedView(): 
    ... 

función basada

def my_function_based_view(): 
    ... 
Cuestiones relacionadas