这是models.py
from django.db import models
class RegisterForm(models.Model):
fname = models.CharField(max_length=100)
lname = models.CharField(max_length=100)
pno = models.CharField(max_length=100)
email = models.EmailField(max_length=200)
pass1 = models.CharField(max_length=100)
pass2 = models.CharField(max_length=100)
这是我的 Views.py
from django.shortcuts import render
from .models import RegisterForm
# Create your views here.
def registerView(request):
if request.method=='POST':
fm = RegisterForm(request.POST)
if fm.is_valid():
fname = fm.cleaned_data['fname']
lname = fm.cleaned_data['lanme']
pno = fm.cleaned_data['pno']
email = fm.cleaned_data['email']
pass1 = fm.cleaned_data['pass1']
pass2 = fm.cleaned_data['pass2']
reg = RegisterForm.save(fname = fname,lname=lname,pno=pno,email=email,pass1=pass1,pass2=pass2)
reg.save()
fm = RegisterForm()
else:
fm = RegisterForm()
return render(request, 'register.html', {})
请求方式:POST
Django 版本:3.2
异常类型:属性错误
异常值:'RegisterForm' 对象没有属性 'is_valid'
异常位置:H:\Django\authetication\users\views.py, line 7, in registerView
答案 0 :(得分:1)
你的 RegisterForm
是一个 model,而不是一个 model form,因此 RegisterForm(request.POST)
没有意义,你的 RegisterForm
有没有 .is_valid(…)
方法。 模型处理在数据库中存储数据,而表单将接收,验证 em> 并清理数据。
看起来你想定义一个profile,所以你可以实现一个Profile
模型:
# app_name/models.py
from django.db import models
class Profile(models.Model):
fname = models.CharField(max_length=100)
lname = models.CharField(max_length=100)
pno = models.CharField(max_length=100)
email = models.EmailField(max_length=200)
pass1 = models.CharField(max_length=100)
pass2 = models.CharField(max_length=100)
然后根据该模型定义一个 ModelForm
:
# app_name/forms.py
from django import forms
class ProfileForm(forms.ModelForm):
class Meta:
model = Profile
fields = '__all__'
然后在您可以使用的视图中:
from django.shortcuts import render
from .forms import ProfileForm
def registerView(request):
if request.method == 'POST':
form = ProfileForm(request.POST)
if form.is_valid():
form.save()
return redirect('name-of-some-view')
else:
form = ProfileForm()
return render(request, 'register.html', {'form': form})
然而,您可能应该对您的模型进行修改:只使用一个字段来存储密码,并且密码应该散列以防止数据泄漏您的数据库的案例数据被盗。 Django 已经有一个用户模型,并且文档中有一个名为 Customizing authentication in Django 的部分。这可以帮助您为用户定义模型,并注册该用户。
注意:如果 POST 请求成功,您应该发出 redirect
[Django-doc]
实现Post/Redirect/Get pattern [wiki]。
这样可以避免您在用户刷新时发出相同的 POST 请求
浏览器。