名称 'user' 未定义

name 'user' is not defined

我试图在不使用 usercreationform 的情况下制作自定义注册页面我制作了模型并导入了它但是当我 运行 它时我总是遇到这个错误 /register 处的名称错误 名称 'user' 未定义 该行特别是:
如果 user.password != user.repassword:

我尝试将方法更改为 GET 而不是 POST,但我得到了一个不同的错误 MultiValueDictKeyError 'fname'

views.py

from django.shortcuts import render,redirect
from .models import User
from django.contrib import messages




def home(request):
    return render(request, 'home.html')


def register(request):
    global user
    if request.method == 'POST':
        user = User()
        user.fname = request.POST['fname']
        user.lname = request.POST['lname']
        user.email = request.POST['email']
        user.password = request.POST['password']
        user.repassword = request.POST['repassword']

    if user.password != user.repassword:
        return redirect("register")
    elif user.fname == "" or user.password == "" :
        messages.info(request,f"some fields are empty")
        return redirect("register")
    else:
        user.save()
    return render(request, 'register.html')

models.py

from django.db import models


class User(models.Model):
    id=models.AutoField(primary_key=True)
    fname=models.CharField(max_length=100)
    lname=models.CharField(max_length=100)
    email=models.CharField(max_length=50)
    password=models.CharField(max_length=100)
    repassword=models.CharField(max_length=100)

html 页

{%extends 'base.html'%}
{%load static%}

{%block content%}
<link rel="stylesheet" href="{%static 'css/style.css'%}">
<form method="post">
    {%csrf_token%}
    <label for="fname">First Name</label>
    <input type="text" name="fname" placeholder="Enter your First Name"><br>
    <label for="lname">Last Name</label>
    <input type="text" name="lname" placeholder="Enter your Last Name"><br>
    <label for="email">Email</label>
    <input type="email" name="email" placeholder="Enter your Email"><br>
    <label for="password">Password</label>
    <input type="password" name="password" placeholder="Enter a password"><br>
    <label for="repassword">Re Password</label>
    <input type="password" name="repassword" placeholder="Re enter your password"><br>
    <button class="btn">Submit</button>
</form>
{%endblock%}

这是你想要的吗?:

def register(request):
    user = request.user
    if request.method == 'POST':
        user = User()
        user.fname = request.POST['fname']
        user.lname = request.POST['lname']
        user.email = request.POST['email']
    ....
    ....

如果请求方法不是POST:

,你应该做点什么
from django.core.exceptions import BadRequest

def register(request):
    if request.method == 'POST':
        user = User()
        user.fname = request.POST['fname']
        user.lname = request.POST['lname']
        user.email = request.POST['email']
        user.password = request.POST['password']
        user.repassword = request.POST['repassword']
       
        if user.password != user.repassword:
            return redirect("register")
        elif user.fname == "" or user.password == "" :
            messages.info(request,f"some fields are empty")
            return redirect("register")

        user.save()
        return render(request, 'register.html')
    else:
        raise BadRequest()  # Or do something else

此视图适用于 POST 个请求。