我正在尝试使用django创建博客应用程序。我使用django表单创建注册表单。在django官方文档中,获取请求的代码是form.classname()。我也以这种方式进行编码,但是其返回的register()缺少1个必需的位置参数:“ request”?
from django import forms
class register(forms.Form):
Email = forms.EmailField(required=True)
Username = forms.CharField(label='Username',
max_length=100,required=True)
Password = forms.CharField(widget=forms.PasswordInput(),required=True)
Confirm_Password =
forms.CharField(widget=forms.PasswordInput(),required=True)
views.py
def register(request):
if request.method == "POST":
form = register(request.POST)
email = form.cleaned_data['email']
User_name=form.cleaned_data['User_name']
Password1=form.cleaned_data['Password1']
Password2=form.cleaned_data['Password2']
if form.is_valid():
if User.objects.filter(username=User_name).exists():
messages.info(request,'Username Taken')
return redirect('register')
elif User.objects.filter(email=email).exists():
messages.info(request,'Email Taken')
return redirect('register')
else:
user = User.objects.create_user(username=User_name,
password=Password1,email=email)
user.save();
return redirect('/')
else:
messages.info(request,'Password Not Matching')
else:
form = register()
return render(request,'register.html',{'form': form})
models.py
from django.db import models
from django.conf import settings
# Create your models here.
class Post(models.Model):
title=models.CharField(max_length=100)
desc=models.TextField()
date=models.DateField(auto_now=True)
author=models.ForeignKey(settings.AUTH_USER_MODEL,
to_field="username",on_delete=models.CASCADE)
显示错误:register()缺少1个必需的位置参数:“ request”
答案 0 :(得分:2)
问题在于您的表单名称与视图名称相同。将表单名称更改为其他名称。
我还注意到了其他错误:
if form.is_valid():
field1 = form.cleaned_data["field1"]
form.cleaned_data["someFieldName"]
检索数据不匹配答案 1 :(得分:1)
为什么不尝试最简单的方法来注册这样的用户
forms.py
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
class Register(UserCreationForm):
# i am making email unique with check_email function while register the user
def check_email(self):
email = self.cleaned_data['email']
if User.objects.filter(email=email).exists():
raise ValidationError("Email already exists")
return email
class Meta:
model = User
fields = ['username','email','password1','password2']
Views.py
def register_user(req):
if req.method == "POST":
form = Register(req.POST or None)
if form.is_valid():
user = form.save()
user.save()
return redirect('redirect where you want')
else:
form = Register()
return render(req,'register.html',{'form':form})
register.html
<form action="" method="post">
{% csrf_token %}
{{ form.as_P }}
<input type="submit" value="Register">
</form>