How to fix my register view that generates a token and assigns it to a cookie? django error

Hello I am having trouble building a register view for my django homework assignment. I'm a beginner and trying to work on my register functionality and the views file is where I am having trouble. It's supposed to add a new user to user table in the database, and create a session key string and assign it to the cookie so the user can stay signed in. Whenever I submit a new user it redirects and gives me this error

ValueError: Field 'id' expected a number but got 'pjtjtksydunpdysgxcxtmpazfyawvqzg' (my generated string)

Here's my register view

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")

here are my models in case if needed

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>

This should be working to the best of my knowledge but I'm not sure exactly what the problem is. If anyone can help or direct me a new way it sure would help. (Also my professor won't allow the built in auth, session, or admin functionality so please don't suggest those)

Вернуться на верх