Как использовать сеансы Django
Я новичок в Django и пытаюсь создать приложение Todo с аутентификацией пользователей, но я хочу добавить к нему сессии, чтобы каждый мог иметь различные задачи, привязанные к его учетной записи, но я не знаю, как это сделать. Я проверил документацию Django по этому вопросу, но так и не понял.
Вот мой models.py
from django.db import models
from django.contrib.auth.models import AbstractUser
# Create your models here.
class Task(models.Model):
name = models.CharField(max_length=15)
completed = models.BooleanField(default=False)
def __str__(self):
return self.name
class User(AbstractUser):
name = models.CharField(max_length=200, null=True)
email = models.EmailField(unique=True, null=True)
bio = models.TextField(null=True, blank=True)
USERNAME_FIELDS = "email"
REQUIRED_FIELDS = []
Тогда вот мой view.py
from django.shortcuts import render, redirect
from .models import Task, User
from .forms import AddTaskForm
@login_required(login_url="loginPage")
def home(request):
tasks = Task.objects.all()
context = {"tasks": tasks, }
return render(request, "task/home.html", context)
# Add task view
@ login_required(login_url="loginPage")
def addTask(request):
addTaskForm = AddTaskForm()
if request.method == "POST":
addTaskForm = AddTaskForm(request.POST)
if addTaskForm.is_valid():
addTaskForm.save()
return redirect('home')
context = {"addTaskForm": addTaskForm}
return render(request, "task/addtask.html", context)
# Update task view
@login_required(login_url="loginPage")
def update(request, pk):
updateTask = Task.objects.get(id=pk)
updateTaskForm = AddTaskForm(instance=updateTask)
if request.method == "POST":
updateTaskForm = AddTaskForm(request.POST, instance=updateTask)
if updateTaskForm.is_valid():
updateTaskForm.save()
return redirect('home')
context = {"updateTaskForm": updateTaskForm}
return render(request, "task/update-task.html", context)
# Delete task view
@ login_required(login_url="loginPage")
def delete(request, pk):
deleteTask = Task.objects.get(id=pk)
if request.method == 'POST':
deleteTask.delete()
return redirect("home")
context = {"deleteTask": deleteTask}
return render(request, "task/delete-task.html", context)
Не нужно использовать сессии. Вам нужно улучшить модель, используя Django ORM.
Нравится:
#models.py
class User(AbstractUser):
name = models.CharField(max_length=200, null=True)
email = models.EmailField(unique=True, null=True)
bio = models.TextField(null=True, blank=True)
USERNAME_FIELDS = "email"
REQUIRED_FIELDS = []
class Task(models.Model):
user = models.ForeignKey(User,on_delete=models.CASADE)
name = models.CharField(max_length=15)
completed = models.BooleanField(default=False)
def __str__(self):
return self.name
При сохранении задач в модели Task укажите id пользователя в поле user.
посмотрите это простое использование сессий в django :
from django.http import HttpResponseRedirect
from django.shortcuts import render
from django import forms
from django.urls import reverse
class NewTaskForm(forms.Form) :
task = forms.CharField(label="Add Task ")
# Create your views here.
Tasks = []
def index(request) :
if "Tasks" not in request.session :
request.session["Tasks"] = []
return render(request , "tasks/index.html",{
"tasks" : request.session["Tasks"]
})
def add(request) :
if request.method == "POST" :
form = NewTaskForm(request.POST)
if form.is_valid() :
task = form.cleaned_data["task"]
request.session["Tasks"] += [task]
return HttpResponseRedirect(reverse("index"))
else :
return render(request , "tasks/add.html" , {
"form" : form
})
return render(request , "tasks/add.html" ,{
"form" : NewTaskForm()
})
при таком методе каждый пользователь просматривает свои собственные списки задач, у меня есть проект, подобный тому, что вы ищете, здесь