第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

顯示 django 注冊表單錯誤

顯示 django 注冊表單錯誤

精慕HU 2023-09-05 20:17:41
我想在用戶嘗試注冊時顯示注冊錯誤,但他做了一些錯誤的事情,例如輸入現(xiàn)有電子郵件地址或兩個密碼不匹配,或者不考慮 django 的默認密碼驗證器之一(例如輸入短密碼),并能夠使用引導警報設(shè)置每個錯誤的樣式,如我在下面的模板中所示models.py 中的用戶模型from django.db import modelsfrom django.contrib.auth.models import AbstractBaseUser, BaseUserManagerfrom django.conf import settingsclass User(AbstractBaseUser):    email = models.EmailField(verbose_name="Email",max_length=250, unique=True)    username = models.CharField(max_length=30, unique=True, null=True)    date_joined = models.DateTimeField(verbose_name='Date joined', auto_now_add=True)    last_login = models.DateTimeField(verbose_name='Last login', auto_now=True)    is_admin = models.BooleanField(default=False)    is_active = models.BooleanField(default=True)    is_staff = models.BooleanField(default=False)    is_superuser = models.BooleanField(default=False)    full_name = models.CharField(verbose_name="Full name", max_length=150, null=True)    profile_pic = models.ImageField(null=True, blank=True)    USERNAME_FIELD = 'email'    REQUIRED_FIELDS = ['full_name']    objects = MyAccountManager()    def __str__(self):        return self.full_name    # For checking permissions.    def has_perm(self, perm, obj=None):        return self.is_admin    # For which users are able to view the app (everyone is)    def has_module_perms(self, app_label):        return True
查看完整描述

1 回答

?
繁花如伊

TA貢獻2012條經(jīng)驗 獲得超12個贊

一旦調(diào)用form.is_valid()表單的實例,是否存在錯誤就變得非常重要,因為這些錯誤存在于該實例上。因此,您需要將其傳遞回用戶才能顯示錯誤。


我的意思的一個簡單例子是:


    def register(request):

        form = CustomUserCreationForm()

            

        if request.method == "POST":

    

            form = CustomUserCreationForm(request.POST)

    

            if form.is_valid():

                user = form.save(commit=False)

    

                user.is_valid = False

                user.save()

                # Maybe redirect here

            else:

                messages.info(request, 'invalid registration details')

                

        return render(

            request, "users/register.html",

            {"form": form}

        )


這樣,您就可以迭代模板中的錯誤。



    <form method="post" action="">

        {% csrf_token %}


        {% if form.non_field_errors %}

            {% for error in form.non_field_errors %}

                {{ error }}

            {% endfor %}

        {% endif %}


        {% for hidden in form.hidden_fields %}

            {{ hidden }}

        {% endfor %}


        {% for field in form %}

            {{ field }}

            {{ field.errors.as_ul }}

        {% endfor %}


        <button class="btn btn-primary" type="submit">Submit</button>

    </form>

像這樣的更通用的模板也會對您有所幫助,因為您可以將其重用于任何表單,而不是像示例中那樣指定特定的表單和字段名稱。


我要指出的另一件事是,您認為存在很多復雜性,例如對請求方法的大量檢查。還有3種不同的形式。如果頁面中有不同的表單,您可以命名提交按鈕,以便您可以檢查正在提交哪個表單。我在這里有一個答案來展示如何處理多種表單。


您這樣做時user.email沒有檢查用戶是否經(jīng)過身份驗證或檢查電子郵件是否存在,因此那里也會發(fā)生錯誤。


因此,為了簡化您的視圖,您可以執(zhí)行類似的操作(在命名表單按鈕之后);



def home(request):

    user = request.user


    # for rendering texts

    text_form = TextForm()

    signin_form = SigninForm()

    signup_form = SignupForm()


    if request.method == "POST":

        if 'text_form' in request.POST:

            text_form = TextForm(request.POST)

            if text_form.is_valid() and request.user.is_authenticated:

                obj = text_form.save(commit=False)

                author = User.objects.filter(email=user.email).first()

                obj.author = author

                text_form.save()


        if 'signin_form' in request.POST:

            signin_form = SigninForm(request.POST)

            if signin_form.is_valid():

                email = request.POST['email']

                password = request.POST['password']

                user = authenticate(email=email, password=password)

                if user:

                    login(request, user)

                elif user is None:

                    messages.error(request, '?Email or password is incorrect')


        if 'signup_form' in request.POST:

            signup_form = SignupForm(request.POST)

            if signup_form.is_valid():

                User = signup_form.save()

                full_name = signup_form.cleaned_data.get('full_name')

                email = signup_form.cleaned_data.get('email')

                raw_password = signup_form.cleaned_data.get('password1')

                account = authenticate(email=email, password=raw_password)

                login(request, account)


    texts = Text.objects.all().order_by('-id')


    context = {

        'signin_form': signin_form,

        'signup_form': signup_form,

        'text_form': text_form,

        'texts': texts

    }


    return render(request, 'main/home.html', context)


查看完整回答
反對 回復 2023-09-05
  • 1 回答
  • 0 關(guān)注
  • 130 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號