Добавление входа в систему в django с помощью rest API в шаблоне
Как поживаете? Я совсем новичок в Django и я работаю над проектом, который предназначен для управления задачами. Каждый владелец задачи может редактировать или обновлять, но никто другой не может. Я написал функцию входа, которая работает правильно, но теперь я хочу переписать ее вместе с остальным. Я написал navbar, в котором при нажатии на кнопку login (в нем) вы увидите login.html. Как я могу написать логин в rest и связать его с моим login.html? Также у меня вопрос, как я могу защитить метод обновления и удаления, чтобы только админ и владелец могли их делать? Заранее спасибо
Мой логин.html
{%extends 'base.html' %}
{% block content %}
<body>
<div id="container">
<div></div>
<div class="container">
<h1>Login</h1>
<p>Please fill in this form to login.</p>
<hr>
<form method="post">
{% csrf_token %}
<input type="hidden" name="next" value="{{ request.path }}">
<label for="username"><b>Userame</b></label>
<input type="text" placeholder="Enter Username" name="username" required>
<label for="psw"><b>Password</b></label>
<input type="password" placeholder="Enter Password" name="password" required>
<div class="row justify-content-center ">
<button type="submit" class="signupbtn btn btn-primary" name="btn">Login</button>
</div>
</form>
{% for message in messages %}
<div class="alert alert-danger d-flex align-items-center" role="alert">
<svg class="bi flex-shrink-0 me-2" width="24" height="24" role="img" aria-label="Danger:"><use xlink:href="#exclamation-triangle-fill"/></svg>
<div>
{{ message }}
</div>
</div>
{% endfor %}
</div>
<div></div>
</div>
</body>
</html>
{% endblock %}
Это мой корень URLs.py
urlpatterns = [
path('admin/', admin.site.urls),
path('',include('task.urls')),
path('api-auth/', include('rest_framework.urls'))]
Это task/urls.py
app_name='task'
urlpatterns = [
path('', views.TaskListView.as_view(), name='all'),
path('task/<int:pk>/', views.TaskDetailView.as_view(), name='detail'),
path("accounts/login/", views.login, name='login'),
path("accounts/logout/", views.logout, name='logout'),
]
Это мой предыдущий логин, который работает
def login(req):
if not req.user.is_authenticated:
if req.method=='POST':
username=req.POST['username']
password=req.POST['password']
user=auth.authenticate(username=username,password=password)
if user is not None:
auth.login(req,user)
next = req.POST.get('next', '/')
print("----",next)
return HttpResponseRedirect(next)
else:
messages.info(req,"Entry not valid !")
return redirect("task:login")
else:
return render(req, "login.html")
else:
return redirect("task:all")
А это моя модель
class Task(models.Model):
title=models.CharField(max_length=250)
text=models.TextField()
user=models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, null=False)
status=models.ForeignKey('Status',on_delete=models.SET_NULL,null=True)
startDate=models.DateTimeField(auto_now_add=True)
endDate=models.DateField(null=True)
def __str__(self):
return self.title
class Status(models.Model):
name=models.CharField(max_length=250)
def __str__(self):
return self.name