Я создал регистрационную форму через django формы. Но это не rendring? - PullRequest
1 голос
/ 19 июня 2019

Я пытаюсь создать приложение для блога с помощью django. Я создал регистрационную форму с помощью форм django. В официальной документации django для запроса на получение кода используется форма form.classname (). Я также кодировал таким образом. Но его возвращающий регистр ()отсутствует 1 обязательный позиционный аргумент: «запрос»?

 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 ]

2 голосов
/ 19 июня 2019

Проблема в том, что имя вашей формы совпадает с именем представления. Измените имя формы на что-то другое.

Я также заметил другие ошибки:

  • перед доступом к конкретным полям формы вы должны проверить ее правильность:
if form.is_valid():
    field1 = form.cleaned_data["field1"]
  • Ваши имена полей формы не совпадают с поиском данных с использованием form.cleaned_data["someFieldName"]
1 голос
/ 19 июня 2019

Почему бы вам не попробовать самый простой способ регистрации пользователей, как этот

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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...