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)