【问题标题】:name 'user' is not defined名称“用户”未定义
【发布时间】:2021-11-11 12:17:36
【问题描述】:

我正在尝试在不使用 usercreationform 的情况下制作自定义注册页面 /注册处的名称错误 名称“用户”未定义 特别是:
如果 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%}

【问题讨论】:

  • 您只在request.method == 'POST' 条件下为user 分配一个值 - 但是您在函数的其余部分无条件地使用它。也许其余的代码需要再缩进一级,这样它也是if的一部分?

标签: python django django-models


【解决方案1】:

如果请求方法不是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 请求。

【讨论】:

  • 如何将请求方式改为POST
  • @hillaryetafo 在您的 html 页面中您已经在执行 POST 请求:&lt;form method="post"&gt;。现在引发了什么错误?
【解决方案2】:

这是你想要的吗?:

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']
    ....
    ....

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-22
    • 2018-11-19
    • 2018-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多