Django #2

AutoManiac user section

Widoki logowania i wylogowania są predefiniowane jako klasy LoginView i LogoutView więc wystarczy tylko umieścić odpowiednie wpisy w pliku urls.py (jak opisałem w części 1) i utworzyć pliki szablonów tzn.

Listing szablonu login.html:

{% extends 'cars/base.html' %}
{% load crispy_forms_tags %}


{% block content %}
  <div class="row justify-content-center">
    <div class="col-4">
      <form method="POST" class="form-control-sm">
       {% csrf_token %}
       <fieldset class="form-group">
         <legend class="border-bottom text-primary">
            Log In
          </legend>
          {{ form|crispy }}
        </fieldset>
        <button class="btn btn-secondary" type="submit">Login</button>
        <p class="text-muted text-small mt-5 ml-2">Need an Account? <a href="{% url 'register_user' %}">Sign up</a></p>
        </form>
      </div>
    </div>
{% endblock %}
Szablon login.html

Listing szablonu logout.html:

{% extends 'cars/base.html' %}

{% block content %}
 <div class="row justify-content-center mb-5">
    <div class="col-4">
	   <h4 class="border-bottom text-primary mt-2">You're logged out now</h4>	
  <div class="text-muted text-small ml-2 mt-5">Back to: <a href="{% url 'login' %}">login page</a></div>
  </div>
 </div>
{% endblock %}
Szablon logout.html

Pozostało jeszcze utworzenie widoku odpowiedzialnego za zmianę hasła. Klasa widoku będzie dziedziczyć po klasie CreateView jak również po klasie LoginRequiredMixin. Klasa LoginRequiredMixin dodaje funkcjonalność polegającą na tym, że zmiany hasła może dokonać tylko zalogowany użytkownik.

Kod klasy widoku ChangePassword():

class ChangePassword(LoginRequiredMixin, CreateView):
    form_class = PasswordChangeForm

    def get(self, request, *args, **kwargs):
        form = PasswordChangeForm(request.user)
        return render(request, 'users/change-password.html', {'form': form})

    def post(self, request, *args, **kwargs):
        form = PasswordChangeForm(request.user, request.POST)
        if form.is_valid():
            user = form.save()
            update_session_auth_hash(request, user)
            messages.success(request, 'Password changed!')
            return redirect('cars')
        return render(request, 'users/change-password.html', {'form': form})

W powyższej klasie przesłaniam metody get() i post(). Gdy strona jest wyświetlana za pomocą metody get() to wyświetlany jest pusty formularz zmiany hasła dla zalogowanego użytkownika. Gdy strona jest wyświetlana za pomocą metody post(), to dokonywana jest walidacja przesłanych danych i jeśli są one poprawne następuje zapisanie zmienionego hasła, wyświetlenie komunikatu o zmianie hasła i przekierowanie na stronę o nazwie cars.

Pozostaje dodać plik szablonu tzn. change-password.html:

{% extends 'cars/base.html' %}
{% load crispy_forms_tags %}


{% block content %}
  <div class="row justify-content-center">
   <div class="col-4">
	  <form method="POST" class="form-control-sm">
      {% csrf_token %}
      <fieldset class="form-group">
        <legend class="border-bottom text-primary">
            New Password Settings
        </legend>
        {{ form|crispy }}
      </fieldset>
      <button class="btn btn-secondary" type="submit">Save</button>
    </form>
   </div>
  </div>
{% endblock %}
Szablon change-password.html

>>część 3<<

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *