Skip to content

Commit e1bab4a

Browse files
committed
register and edit forms added
1 parent 4a9633a commit e1bab4a

File tree

11 files changed

+138
-5
lines changed

11 files changed

+138
-5
lines changed

accounts/urls.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# accounts/urls.py
2+
from django.urls import path
3+
from django.contrib.auth.views import LoginView, LogoutView
4+
from .views import UserListView, UserUpdateView, UserDeleteView, UserCreateView
5+
6+
app_name = "users"
7+
8+
urlpatterns = [
9+
path("", UserListView.as_view(), name="list"),
10+
path("create/", UserCreateView.as_view(), name="create"),
11+
path("<int:pk>/update/", UserUpdateView.as_view(), name="update"),
12+
path("<int:pk>/delete/", UserDeleteView.as_view(), name="delete"),
13+
# auth
14+
path("login/", LoginView.as_view(template_name="users/login.html"), name="login"),
15+
path("logout/", LogoutView.as_view(), name="logout"),
16+
]

accounts/views.py

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,31 @@
1+
# accounts/views.py
2+
from django.contrib.auth.models import User
3+
from django.views.generic import ListView, UpdateView, DeleteView
4+
from django.urls import reverse_lazy
5+
from django.views.generic import CreateView
6+
from django.contrib.auth.forms import UserCreationForm
17

2-
# Create your views here.
8+
class UserListView(ListView):
9+
model = User
10+
template_name = "users/index.html"
11+
context_object_name = "users"
12+
ordering = ["username"]
13+
14+
15+
class UserUpdateView(UpdateView):
16+
model = User
17+
fields = ["username", "first_name", "last_name"]
18+
template_name = "users/update.html"
19+
success_url = reverse_lazy("users:list")
20+
21+
22+
class UserDeleteView(DeleteView):
23+
model = User
24+
template_name = "users/delete.html"
25+
success_url = reverse_lazy("users:list")
26+
27+
28+
class UserCreateView(CreateView):
29+
form_class = UserCreationForm
30+
template_name = "users/create.html"
31+
success_url = reverse_lazy("users:list")

db.sqlite3

0 Bytes
Binary file not shown.

task_manager/settings.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,3 +128,7 @@
128128
# https://docs.djangoproject.com/en/5.2/ref/settings/#default-auto-field
129129

130130
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
131+
132+
LOGIN_URL = "users:login"
133+
LOGIN_REDIRECT_URL = "users:list"
134+
LOGOUT_REDIRECT_URL = "users:list"

task_manager/urls.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,11 @@
1515
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
1616
"""
1717
from django.contrib import admin
18-
from django.urls import path
18+
from django.urls import path, include
1919
from . import views
2020

2121
urlpatterns = [
2222
path('admin/', admin.site.urls),
2323
path("", views.index, name="home"),
24+
path("users/", include("accounts.urls", namespace="users")),
2425
]

templates/base.html

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@
1515
<a class="navbar-brand" href="/">Менеджер Задач</a>
1616
<div>
1717
<ul class="navbar-nav me-auto mb-2 mb-md-0">
18-
<li class="nav-item"><a class="nav-link" href="/login/">Вход</a></li>
19-
<li class="nav-item"><a class="nav-link" href="/signup/">Регистрация</a></li>
20-
<li class="nav-item"><a class="nav-link" href="/users/">Пользователи</a></li>
18+
<li class="nav-item"><a class="nav-link" href="{% url 'users:login' %}">Вход</a></li>
19+
<li class="nav-item"><a class="nav-link" href="{% url 'users:create' %}">Регистрация</a></li>
20+
<li class="nav-item"><a class="nav-link" href="{% url 'users:list' %}">Пользователи</a></li>
2121
</ul>
2222
</div>
2323
</div>

templates/users/create.html

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{% extends "base.html" %}
2+
{% block content %}
3+
<h1>Регистрация</h1>
4+
<form method="post">
5+
{% csrf_token %}
6+
{{ form.as_p }}
7+
<button type="submit" class="btn btn-success">Создать</button>
8+
</form>
9+
{% endblock %}

templates/users/delete.html

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{% extends "base.html" %}
2+
{% block content %}
3+
<h1>Удалить пользователя {{ object.username }}?</h1>
4+
<form method="post">
5+
{% csrf_token %}
6+
<button type="submit" class="btn btn-danger">Да, удалить</button>
7+
<a href="{% url 'users:list' %}" class="btn btn-secondary">Отмена</a>
8+
</form>
9+
{% endblock %}

templates/users/index.html

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
{% extends "base.html" %}
2+
3+
{% block title %}Пользователи{% endblock %}
4+
5+
{% block content %}
6+
<h1 class="mb-4">Пользователи</h1>
7+
8+
<table class="table table-striped align-middle">
9+
<thead class="table-light">
10+
<tr>
11+
<th scope="col">ID</th>
12+
<th scope="col">Имя пользователя</th>
13+
<th scope="col">Полное имя</th>
14+
<th scope="col">Дата создания</th>
15+
<th scope="col" class="text-end">Действия</th>
16+
</tr>
17+
</thead>
18+
<tbody>
19+
{% for u in users %}
20+
<tr>
21+
<td>{{ u.id }}</td>
22+
<td>{{ u.username }}</td>
23+
<td>{{ u.first_name }} {{ u.last_name }}</td>
24+
<td>{{ u.date_joined|date:"d.m.Y H:i" }}</td>
25+
<td class="text-end">
26+
<a href="{% url 'users:update' u.pk %}" class="btn btn-sm btn-outline-primary">Изменить</a>
27+
<a href="{% url 'users:delete' u.pk %}" class="btn btn-sm btn-outline-danger">Удалить</a>
28+
</td>
29+
</tr>
30+
{% empty %}
31+
<tr>
32+
<td colspan="5" class="text-center text-muted">Пока нет пользователей</td>
33+
</tr>
34+
{% endfor %}
35+
</tbody>
36+
</table>
37+
{% endblock %}

templates/users/login.html

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
{% extends "base.html" %}
2+
{% block title %}Вход{% endblock %}
3+
4+
{% block content %}
5+
<h1 class="mb-4">Вход</h1>
6+
<form method="post" class="w-100" style="max-width: 420px;">
7+
{% csrf_token %}
8+
{{ form.non_field_errors }}
9+
<div class="mb-3">
10+
<label for="id_username" class="form-label">Имя пользователя</label>
11+
{{ form.username }}
12+
</div>
13+
<div class="mb-3">
14+
<label for="id_password" class="form-label">Пароль</label>
15+
{{ form.password }}
16+
</div>
17+
<button type="submit" class="btn btn-primary">Войти</button>
18+
</form>
19+
{% endblock %}

0 commit comments

Comments
 (0)