2009-05-17 22 views
5

Buduję stronę internetową (w Django) i jestem zdezorientowany, jeśli chodzi o właściwą konwencję nazewnictwa, której używam do moich funkcji. Przykładowy przykład: powiedzmy, że mam stronę, która pozwala użytkownikowi zdecydować, czy chce zobaczyć obraz A lub obraz B. Po podję ciu decyzji przez użytkownika witryna wyś wietla obraz, który prosi użytkownik.Konwencja nazewnictwa dla widoków Django?

Oto dwie funkcje chciałbym mieć w moim modułu Views:

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

Jaki jest konwencja nazewnictwa funkcje, które to zrobić? Widzę co najmniej dwie wykonalne sposoby:

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

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

Głównym problemem jest to, że każda z tych funkcji ma 2 rzeczy: (1) proces i przechowuje dane przesłane przez użytkownika i (2) zwraca następną stronę, która może, ale nie musi być związana z danymi użytkownika. Więc czy powinienem nazwać moje funkcje po (1) lub (2)?

Odpowiedz

1

Dopóki masz te miłe komentarze, podejrzewam, że nie będzie to dla ciebie problemem.

W każdym razie najlepiej jest nazywać funkcje w oparciu o to, co robią, więc funkcja1 może być "displayImageChoices", a funkcja 2 może być "displayImage".

IE, funkcja 1 pobiera dane wejściowe i wyświetla niektóre opcje, funkcja 2 pobiera dane wejściowe i wyświetla obraz.

+3

PEP8 (http://www.python.org/dev/peps/pep-0008/) mówi: "Nazwy funkcji powinny być pisane małymi literami, ze słowami oddzielonymi podkreśleniami w razie potrzeby, aby poprawić czytelność. mixedCase jest dozwolone tylko w kontekstach, w których jest to już styl dominujący (np. Threading.py), aby zachowaj kompatybilność wsteczną. " –

+0

To dobry punkt, skupiałem się na "tym, co przekazują nazwy", a nie na konwencjach CamelCase/formatowaniu. –

8

Zazwyczaj konwencją jest pewnego rodzaju CRUD (tworzenie, pobieranie, aktualizacja, usuwanie). Osobiście używam indeksu, szczegółów, tworzenia, aktualizacji, usuwania dla moich działań. Jednak nie sądzę, aby miało to zastosowanie do twoich funkcji niestandardowych.

Wygląda na to, że twoje funkcje powinny zostać połączone w tę samą funkcję "wybierz". Następnie można wyświetlić formularz lub wynik w zależności od tego, czy wynikiem był test POST, czy nie.

Uwaga: Mam ciężko skopiowany ten przykład z formularza 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

Dzięki Soviut! To może być właśnie to, czego szukam. Ale zastanawiam się - czy ta funkcja "wybierz" również zawiera kod zwracający stronę ze zdjęciem, czy też ten kod należałby do innej funkcji? (Nie będę przekierowywał do "/ thanks /" w moim przypadku.) – RexE

+2

@RexE: Jeśli formularz jest POSTed (który powinien być, jeśli modyfikuje dane), to musisz przekierować po przetworzeniu danych do innego widoku wyświetla stronę. W przeciwnym razie, jeśli spróbujesz odświeżyć stronę, możesz narazić użytkownika na mylące wiadomości i prawdopodobnie nieumyślnie wykonując akcję. –

+0

@Carl: W większości przypadków zgadzam się, z wyjątkiem sytuacji, w których robisz coś w rodzaju zwracania wyniku wyszukiwania, ale nadal wyświetla się pole wyszukiwania u góry strony, w tym przypadku przekierowanie jest niepotrzebne. Tak może być w przypadku pytania OP. – Soviut

1

użyję czegoś podobnego do wbudowanego w widokach (object_list, object_detail, etc) w stosownych przypadkach. (Zawsze dobry pomysł)

Reszta będzie następnie stosować to pojęcie (item_action) w miarę możliwości.

0

Wiem, że jest to trochę przestarzałe, ale od momentu przejścia do widoków opartych na klasach.

PEP8 (python.org/dev/peps/pep-0008) konwencje nazewnictwa dla klas byłyby dużymi literami każdego słowa, bez spacji. Jeśli nadal używasz widoków stylu funkcji, będą to małe nazwy funkcji ze spacjami zastąpionymi przez podkreślenia dla czytelności.

Na przykład z widokiem na bazie Klasa:

class MyClassBasedView(): 
    ... 

Funkcja oparta

def my_function_based_view(): 
    ... 
Powiązane problemy