我通过django表单创建了注册表单。

时间:2019-06-19 16:01:55

标签: python django

我正在尝试使用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”

2 个答案:

答案 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>