Как исправить представление register, которое генерирует токен и присваивает его cookie? ошибка django
Здравствуйте, у меня проблемы с созданием представления регистра для моего домашнего задания по django. Я новичок и пытаюсь работать над функциональностью регистрации, и файл представления - это то, где я испытываю трудности. Он должен добавлять нового пользователя в таблицу user в базе данных, а также создавать строку ключа сессии и присваивать ее куки, чтобы пользователь мог оставаться подписанным. Всякий раз, когда я добавляю нового пользователя, он перенаправляется и выдает мне эту ошибку
ValueError: Поле 'id' ожидало число, но получило 'pjtjtksydunpdysgxcxtmpazfyawvqzg' (сгенерированная мной строка)
Вот мой взгляд на регистр
def register(request: HttpRequest):
if request.method == 'POST':
params = request.POST
user = User(
name = params.get("name"),
email = params.get("email"),
password_hash = params.get("password")
)
hasher = hashlib.sha256()
hasher.update(bytes(user.password_hash, "UTF-8"))
user.password_hash = hasher.hexdigest()
user.save()
token = ""
letters = string.ascii_lowercase
for _ in range(32):
token = "".join(random.choice(letters) for _ in range(32))
session_token = Session.objects.create(user=user, token=token)
response = redirect("/")
response.set_cookie('token', token)
return response
return render(request, "destination/register.html")
вот мои модели на случай, если понадобится
class User(models.Model):
id = models.BigAutoField(primary_key=True)
name = models.TextField()
email = models.EmailField(unique=True)
password_hash = models.TextField()
class Session(models.Model):
id = models.BigAutoField(primary_key=True)
user = models.OneToOneField(User, on_delete=models.CASCADE)
token = models.TextField()
register.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<form action="/register" method="POST">
<label for="">Username</label>
<input type="text" name="name" id="name">
<label for="">Email</label>
<input type="email" name="email" id="email">
<label for="">Password</label>
<input type="password" name="password" id="password">
<button type="submit">Register</button>
</form>
</body>
</html>
Это должно работать, насколько я знаю, но я не уверен, в чем именно проблема. Если кто-то может помочь или направить меня по новому пути, это было бы очень кстати. (Также мой профессор не разрешает использовать встроенные функции аута, сессии или администрирования, поэтому, пожалуйста, не предлагайте их)