首页 > 解决方案 > 如何在使用 UserRegisterForm 时停止 django 以自动激活用户

问题描述

视图.py

from django.shortcuts import render, redirect
from django.contrib import messages
from django.contrib.auth.decorators import login_required
from .forms import UserRegisterForm, UserUpdateForm, ProfileUpdateForm


def register(request):
    if request.method == 'POST':
        form = UserRegisterForm(request.POST)
        if form.is_valid():
            form.save()
            username = form.cleaned_data.get('username')
            messages.success(request, f'Your account has been created! You are now able to log in')
            return redirect('login')
    else:
        form = UserRegisterForm()
    return render(request, 'users/register.html', {'form': form})

表格.py

from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
from .models import Profile


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

    class Meta:
        model = User
        fields = ['username', 'email', 'password1', 'password2']

使用RegisterForm注册表格django自动激活用户。我想在激活用户之前添加注册电子邮件确认。

标签: djangodjango-modelsdjango-formsdjango-views

解决方案


所以很简单,你可以花点时间commit=False保存表格

        if form.is_valid():
            user=form.save(commit=False)
            # sets the field to False
            user.is_active=False
            user.save()
            username = form.cleaned_data.get('username')
            messages.success(request, f'Your account has been created! You are now able to log in')
            return redirect('login')

你也说过

我想在激活用户之前添加注册电子邮件确认。

为此,您可以查看以下链接

2017:https ://medium.com/@frfahim/django-registration-with-confirmation-email-bb5da011e4ef

或 2018:Django 2 - 如何使用电子邮件确认和 CBV 注册用户?


推荐阅读