视图 users.views.edit_profile 没有返回 HttpResponse 对象。它返回 None 。它返回 None 代替

时间:2021-02-23 10:21:20

标签: python django

views.edit_profile 不返回字段错误,而是返回网页错误。

在 views.registration 中 - 它确实返回字段错误,但在 views.edit_profile 而不是字段错误中,它返回网页错误。当两者具有相似的代码时会发生什么? 下图是views.register提交后的错误。

views.register 字段错误:

enter image description here

这是来自 views.edit_profile 的错误。由于手机无效而导致错误。错误应该与views.register 相同。 views.edit_profile 字段错误:

enter image description here

models.py

CustomUser 模型:我在这里设置验证并制作表格。

class CustomUser(AbstractBaseUser, PermissionsMixin):
    username = models.CharField(
        _('Username'),
        max_length=150,
        unique=True,
        help_text=_('Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.'),
        validators=[UnicodeUsernameValidator()],
        error_messages={
            'unique': _("A user with that username already exists."),
        },
    )
    email = models.EmailField(_('Email Address'), unique=True)
    palotype = models.CharField(_('Type'), max_length=150, choices=TYPE_CHOICES, default='Palon-on')
    suffix = models.CharField(_('Suffix'), max_length=150, blank=True)
    first_name = models.CharField(_('First Name'), validators=[AlphaSpaces()], max_length=150, blank=False)
    middle_name = models.CharField(_('Middle Name'), validators=[AlphaSpaces()], max_length=150, blank=True)
    last_name = models.CharField(_('Last Name'), validators=[AlphaSpaces()], max_length=150, blank=False)
    birth_date = models.CharField(_('Birth Date'), validators=[BirthdateRegex()], max_length=10, blank=False)
    region = models.CharField(_('Region'), validators=[AlphaSpaces()], max_length=150, blank=False)
    city = models.CharField(_('City'), validators=[AlphaSpaces()], max_length=150, blank=False)
    barangay = models.CharField(_('Barangay'), max_length=150, blank=False)
    unitno = models.CharField(_('Unit / Apartment No.'), max_length=150, blank=True)
    floorno = models.CharField(_('Floor'), max_length=150, blank=True)
    bldgname = models.CharField(_('Building Name'), max_length=150, blank=True)
    housebldgno = models.CharField(_('House/Building No.'), max_length=150, blank=True)
    streetname = models.CharField(_('Street Name'), max_length=150, blank=True)
    villagedistrict = models.CharField(_('Village / District'), max_length=150, blank=True)
    mobileno = models.CharField(_('Mobile Number'), validators=[PhoneRegex()], max_length=150, blank=False)
    landline = models.CharField(_('Landline'), validators=[LandlineRegex()], max_length=150, blank=True)
    qr_code = models.ImageField(upload_to='qr_codes', blank=True)
    start_date = models.DateTimeField(default=timezone.now)
    about = models.TextField(_(
        'about'), max_length=500, blank=True)
    is_staff = models.BooleanField(default=True)
    is_active = models.BooleanField(default=True)
    

    objects = CustomAccountManager()

    USERNAME_FIELD = 'username'
    REQUIRED_FIELDS = ['email', 'first_name', 'last_name', 'birth_date', 'region', 'city', 'barangay', 'mobileno']

    def __str__(self):
        return self.username

    def save(self, *args, **kwargs):
        qrcode_img = qrcode.make(self.username)
        canvas = Image.new('RGB', (290, 290), 'white')
        canvas.paste(qrcode_img)
        fname = f'qr_code-{self.username}.png'
        buffer = BytesIO()
        canvas.save(buffer,'PNG')
        self.qr_code.save(fname, File(buffer), save=False)
        canvas.close()

        # if len(str(self.birth_date))<10:
        #     raise ValueError(('Birthdate cannot less than 10 characters.'))
        # elif self.birth_date > datetime.date.today().strftime("%m/%d/%Y"):
        #     raise ValueError(('Birthdate cannot be set as future date.'))
        # elif self.birth_date == datetime.date.today().strftime("%m/%d/%Y"):
        #     raise ValueError(('Birthdate cannot be set equal to todays date.'))

        super().save(*args, **kwargs)   

用户注册表:

class UserRegisterForm(UserCreationForm):
    email = forms.EmailField()

    class Meta:
        model = CustomUser
        fields = ['username', 'email', 'password1', 'password2', 'palotype',  'suffix','first_name',
                  'middle_name', 'last_name', 'birth_date','region','city','barangay','unitno','floorno','bldgname',
                  'housebldgno','streetname','villagedistrict','mobileno','landline']

forms.py

UserEdit 表单 - 我删除了密码。

class UserEditForm(UserChangeForm):
    email = forms.EmailField()
    
    class Meta:
        model = CustomUser
        fields = ['username', 'email', 'palotype', 'suffix','first_name',
                  'middle_name', 'last_name', 'birth_date','region','city','barangay','unitno','floorno','bldgname',
                  'housebldgno','streetname','villagedistrict','mobileno','landline'] 

views.py

def register(request):
    if request.method == 'POST':
        form = UserRegisterForm(request.POST)
        if form.is_valid():
            form.save()
            username = form.cleaned_data.get('username')
            password = form.cleaned_data.get('password1')
            new_user = authenticate(username=username, password=password)
            login(request, new_user)
            return redirect('home')
    else:
        form = UserRegisterForm() 
    return render(request, 'register.html', {'form': form})


def edit_profile(request):
    if request.method == 'POST':
        form = UserEditForm(request.POST, instance=request.user)

        if form.is_valid():
            form.save()
            messages.info(request, 'Information successfully updated!')
            return redirect('home')
    else:
        form = UserEditForm(instance=request.user)
        args = {'form': form}
        return render(request, 'change-info.html', args)

注意:我尝试在 edit_profile 中使用 UserRegisterForm 作为表单,但遇到了同样的错误。

我设法通过此代码修复了错误。

def edit_profile(request):
    if request.method == 'POST':
        form = UserEditForm(request.POST, instance=request.user)

        if form.is_valid():
            form.save()
            # username = form.cleaned_data.get('username')
            # password = form.cleaned_data.get('password1')
            # user = authenticate(username=username, password=password)
            # login(request, user)

            messages.info(request, 'Information successfully updated!')
            return redirect('home')
        else:
            messages.info(request, form.errors)
            form = UserEditForm(instance=request.user)
            args = {'form': form}
            return render(request, 'change-info.html', args)
    else:
        form = UserEditForm(instance=request.user)
        args = {'form': form}
        return render(request, 'change-info.html', args)

固定结果:

enter image description here

但它与 views.register 有很大不同。 我希望错误与 views.register 相同。

0 个答案:

没有答案