اضافه کردن فیلد ایمیل به فرم ثبت نام

جنگو

سلام

به صورت پیش فرض فیلد ایمیل در UserCreationForm وجود ندارد اما به راحتی آن را می‌توان به فرم اضافه کرد.

فایلی به نام forms.py را در فولدر accounts  ایجاد کنیم.

accounts/forms.py

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

class SignUpForm(UserCreationForm):
    email = forms.CharField(max_length=254, required=True, widget=forms.EmailInput())
    class Meta:
        model = User
        fields = ('username', 'email', 'password1', 'password2')

خیلی خوب! حالا به جای استفاده از UserCreationForm در فایل views.py، از فرم جدید خود با نام SignUpForm استفاده می کنیم.

accounts/views.py

from django.contrib.auth import login as auth_login
from django.shortcuts import render, redirect

from .forms import SignUpForm

def signup(request):
    if request.method == 'POST':
        form = SignUpForm(request.POST)
        if form.is_valid():
            user = form.save()
            auth_login(request, user)
            return redirect('home')
    else:
        form = SignUpForm()
    return render(request, 'signup.html', {'form': form})

و خروجی به شکل زیر خواهد شد.

فایل تست را هم به روز می کنیم.

from .forms import SignUpForm

class SignUpTests(TestCase):
    # ...

    def test_contains_form(self):
        form = self.response.context.get('form')
        self.assertIsInstance(form, SignUpForm)

class SuccessfulSignUpTests(TestCase):
    def setUp(self):
        url = reverse('signup')
        data = {
            'username': 'john',
            'email': 'john@doe.com',
            'password1': 'abcdef123456',
            'password2': 'abcdef123456'
        }
        self.response = self.client.post(url, data)
        self.home_url = reverse('home')

    # ...

البته کلاس تست قبلی هنوز هم کار می کند. چون نکتۀ طلایی اینجاست که در فرم جدید ما، فرم UserCreationForm را توسعه داده است.

ببینیم واقعا چه اتفاقی افتاده. ما یک فیلد را به فرم اضافه کرده‌ایم.

fields = ('username', 'email', 'password1', 'password2')

و این قطعه کد به صورت خودکار در فایل HTML منعکس شده است.

حالا فرض کنیم که یک برنامه‌نویس دیگر درآینده بخواهد فرم ثبت نام را توسعه دهد. با این کار، هر فیلدی که به فرم ثبت نام اضافه شود، در خروجی مرورگر هم نمایش داده می شود و این در حالی باشد که ما نخواهیم چنین اتفاقی بیفتد.

خوب! نوبت به فایل تست می رسد:

accounts/tests.py

class SignUpTests(TestCase):
    # ...

    def test_form_inputs(self):
        '''
        The view must contain five inputs: csrf, username, email,
        password1, password2
        '''
        self.assertContains(self.response, '<input', 5)
        self.assertContains(self.response, 'type="text"', 1)
        self.assertContains(self.response, 'type="email"', 1)
        self.assertContains(self.response, 'type="password"', 2)

ترجمۀ اختصاصی توسط تمدن

 

مطلب بعدی: بهبود وضعیت فایل های تست

مطلب قبلی:  تست ویوی ثبت نام

بدون دیدگاه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

جنگو
پیکربندی گواهینامۀ https

سلام حالا می خواهیم برنامۀ خودمان را با گواهینامۀ https امن کنیم. ساده ترین کار برای انجام آن Let’s Encrypt است. قبل از Let’s Encrypt هرگز تنظیمات https به این راحتی نبوده و مهمتر اینکه اینکار کاملاً رایگان است. آن ها راه حلی به نام certbot را ارائه داده اند …

جنگو
پیکربندی سرویس ایمیل

سلام یکی از بهتر سرویس دهنده های ایمیل Mailgun با قابلیت ۱۲ هزار ایمیل رایگان در ماه است. به صورت رایگان ثبت نام کنید. برای اینکار باید آن را با سرویس دهندۀ دامین خود تنظیم کنید که در این آموزش از tamadon.org استفاده شده است. حالا اولین رکورد DNS را …

جنگو
پیکربندی NGINX

سلام کار بعدی که قرار است انجام شود؛ تنظیمان Nginx به شکلی است که پاسخگویی و سرویس دهی مربوط به فایل های استاتیک را خود انجام دهد و سایر درخواست ها را به Gunicorn بفرستد. یک فایل پیکربندی با نام boards را درون /etc/nginx/sites-available/ و با محتوای زیر اضافه می …

هرگونه استفادۀ از این آموزش به صورت رایگان و با ارجاع به تمدن جایز است.