فرم ها در جنگو چه کاربردی دارند و به چه روش هایی ایجا می شوند.
در روت هر اپلیکیشن پروژه جنگویی میتونید یک فایل با نام forms.py ایجاد کنید تا برای اعتبار سنجی اطلاعات، ساخت ویو راحت و سریع، و هندل کردن درخواست ازش بهره بگیرید.
برای این ابتدا کافیه یک فایل با نام forms.py در روت اپلیکیشن مورد نظر ایجا کنید.
class LoginForm(forms.Form):
user_name = forms.CharField(
widget=forms.TextInput(attrs={'placeholder': 'لطفا نام کاربری خود را وارد نمایید'}),
label='نام کاربری'
)
password = forms.CharField(
widget=forms.PasswordInput(attrs={'placeholder': 'لطفا کلمه عبور خود را وارد نمایید'}),
label='کلمه ی عبور'
)
در بالا ما یک فرم که از forms.Form ارث بری می کند ساختیم.
برای استفاده از فرم ها فقط به دو مرحله تغییر نیاز داریم
1-در فایل views.py اگر از ClassBaseView (که تو مقاله بعدی در موردش آموزش میدم) استفاده میکنید فیلد form_class را برابر با نام کلاس فرمی که ساختید قرار بدید مثل مثال ذیل
form_class = AccountLogin
و اگر از فانکشن ها استفاده میکنید با یک نام دلخوام (ترجیحا با کلمه form) خاتمه یابد یک متغیر ایجاد کرده و به شکل ذیل برابر با نام کلاس فرم خود قرار دهید.
login_form = AccountLogin(request.POST or None)
2- به لایه ویو (html) خود رفته و نامی متغیر را با شکل ذیل قرار دهید.
در صورت استفاده از فانکشن
<form action="{% url 'accounts:login' %}" method="post" class="w-50 bg-light p-5 justify-content-center align-items-center">
{% csrf_token %}
{{ login_form }}
<br>
<button class="btn btn-primary mt-3 w-100 " type="submit">ورود</button>
</form>
درصورت استفاده از ClassBaseView ها
<form action="{% url 'accounts:login' %}" method="post" class="w-50 bg-light p-5 justify-content-center align-items-center">
{% csrf_token %}
{{ form }}
<br>
<button class="btn btn-primary mt-3 w-100 " type="submit">ورود</button>
</form>
برای ساخت فرم ها در جنگو میتونیم از دو کلاس Form و یا کلاس ModelForm ارث بری کنیم.
توسعه فرم ها در جنگو با ارث بری از کلاس Form کمی وقت گیر تر از کلاس ModelForm هست و بشخصه ارث بری از کلاس ModelForm رو ترجیح میدم.
در جنگو فیلد های زیادی برای فرم ها وجود داره که به توضیح چند مورد از اون ها میپردازیم:
این پست هنوز کامل نشده!