در این مطلب که مروری بر دوره آموزش کار با فرم ها در جنگو رزومه ساز است، به طور مختصر توضیحات کوتاهی در مورد هر قسمت ارائه می کنیم. این دوره را می توانید از سایت دانشجویار (این لینک) تهیه کنید. دوره های قبلی (آموزش مقدماتی جنگو) و (آموزش ساخت فروشگاه آنلاین جنگو) را از دست ندهید.
قسمت اول ساخت اولین فرم در Django:
ابتدا توضیحاتی در مورد بخش های مختلف پروژه ارائه می شود. در این پروژه از چند اپلیکیشن استفاده شده است و مدل های مربوط به پروژه را توضیح می دهیم. در مدل ها از ارث بری استفاده شده است و از abstract = True استفاده شده است. همچنین ارتباطات یک به یک و یک به چند در مدل ها استفاده شده است.
در مدل ها تمامی جزئیات مربوط به یک روزمه ساز ساده پیش بینی شده است. برای بخش تماس با ما هم یک مدل ایجاد کرده ایم تا برخی موارد را در فرم ثبت تماس آموزش دهیم.
در ادامه توضیحاتی در مورد کانفیگ کردن template ها، ارث بری در تمپلت ها، مسیردهی به اپلیکیشن ها و فایل های static ارائه شده است.
در انتهای این قسمت با forms.py آشنا می شویم و یک کلاس برای تماس با ما ایجاد می کنیم.
قسمت دوم نمایش فرم و آشنایی با csrf_token در Django:
در این قسمت یک ویو جدید برای تماس با ما ایجاد می کنیم تا از فرم ایجاد شده در قسمت قبل استفاده کنیم. سپس برای این ویو به تمپلت مناسب می سازیم و در ادامه url مناسب هم ایجاد می کنیم.
در ادامه ظاهر فرم را اصلاح می کنیم که خروجی مناسبی داشته باشیم. سپس اطلاعاتی با فرم ثبت می کنیم و csrf_token را توضیح می دهیم.
قسمت سوم تفاوت as_p و as_ul و as_table در Django:
در این قسمت روش های مختلف رندر کردن فرم در تمپلت را توضیح می دهیم و روش صحیح استفاده از as_p و as_ul و as_table و موارد دیگر را در تمپلت های جنگو توضیح می دهیم.
قسمت چهارم نمایش فرم به صورت دستی و غیرخودکار در Django:
در این قسمت همه فیلدها را در سمت تمپلت به صورتی دستی ایجاد می کنیم. سپس label ها را برای فیلدها اضافه می کنیم. سپس با استفاده از div ها در html تغییرات دیگری اضافه می کنیم.
در ادامه روش استفاده از حلقه for برای رندر کردن فیلدها را آموزش می دهیم.
قسمت پنجم شخصی سازی فیلدها با widget ها در Django:
ابتدا توضیحاتی در مورد widgetها ارائه می شود. سپس از برخی widget ها استفاده می کنیم و تاثیر انتخاب widget را در خروجی مشاهده می کنیم.
در ادامه با استفاده از این قابلیت به هر کدام از فیلدها کلاس های اختصاصی اعمال می کنیم. برای نمایش بهتر فرم از کلاس های بوت استرپ استفاده می کنیم.
قسمت ششم آشنایی با is_valid و cleaned_data در Django:
در این قسمت ابتدا تفاوت های get و post شرح داده می شود. سپس با متد پست فرم را ثبت می کنیم و متد is_valid را توضیح می دهیم. در ادامه با معرفی دیکشنری cleaned_data مقادیر دربافتی از متد post را در ترمینال نمایش می دهیم.
قسمت هفتم استفاده از novalidate در فرم در Django:
ابتدا توضیحاتی در مورد اجباری بودن فیلدها ارائه می شود. سپس توضیح داده می شود که دلیل valid نبود فرم در صورتی که از widget نامناسب استفاده شود چیست.
سپس با تغییراتی در سمت مرورگر فرم را به صورت نامعتبر نمایش می دهیم تا فرم valid نباشد. سپس خطاهای اعتبارسنجی را به فرم اضافه می کنیم. و در ادامه کاربرد novalidate را توضیح می دهیم.
قسمت هشتم سفارشی کردن اعتبارسنجی فرم در Django:
جهت سفارشی کردن اعتبارسنجی در جنگو می توانیم از clean کمک بگیریم، پس برای فیلد مورد نظرمون متد clean را شخصی سازی می کنیم و با استفاده از استثناء validationError پیغام خطا را به کاربر نمایش می دهیم.
قسمت نهم بازنویسی متد clean و ساخت Validator اختصاصی در Django:
ابتدا کلاس validators را import می کنیم و با استفاده از آن اعتبارسنجی را به فیلد اضافه می کنیم.
در ادامه یک متد اختصاصی برای اعتبارسنجی فیلدها استفاده می کنیم و با استفاده از value ارسال شده برای این متد، و انتساب آن برای فیلدهای مناسب، استثنا مناسب را هنگام valid نبودن، به کاربر نمایش می دهیم.
در ادامه توضیح می دهیم که چطور می توانیم اعتبارسنجی برای بیش از یک فیلد انجام دهیم. پس یک فیلد جدید با عنوان retype_email می سازیم تا کاربر را مجبور کنیم ایمیل خودش را مجددا وارد کند. سپس با استفاده از متد clean بررسی می کنیم که کاربر تکرار ایمیل را درست وارد کرده باشد.
در ادامه با non_feild_errors آشنا می شویم تا پیغام های خطای عمومی فرم را نمایش دهیم.
قسمت دهم نمایش پیغام خطای مناسب با توجه به نوع آن در Django:
در این قسمت ابتدا مجددا novalidate را فعال می کنیم تا خطاهای سمت سرور را مشاهده کنیم. و به ازای هر خطا پیغام مناسب نمایش دهیم.
پس در هر فیلد یک پارامتر با نام error_messages تعریف می کنیم و برای هر خطا پیغام مناسب را تعیین می کنیم و نتیجه را در خروجی مشاهده خواهیم کرد.
قسمت یازدهم ساخت فرم با ارث بری از ModelForm در Django – بخش اول:
در این قست قصد داریم اطلاعات وارد شده توسط کاربر را در مدل contact ذخیره کنیم. لذا ابتدا توضیحاتی ارائه می شود، سپس با استفاده از form.is_valid و مدل contact و دستورات django ORM رکورد جدیدی در contact اضافه می کنیم. تا اینجا از forms.Form استفاده کرده بودیم.
در ادامه برای ذخیره رکورد در مدل، ابتدا فرمی که در forms.py ایجاد کرده ایم را تغییر می دهیم و از forms.ModelForm ارث بری می کنیم. و تنظمیات مربوط را انجام می دهیم. در ادامه widget های قبلی را به ModelForm اضافه می کنیم و در نهایت جنگو با استفاده از این فرم، اطلاعات را در جدول مربوطه ذخیره می کند.
قسمت دوازدهم ساخت فرم با ارث بری از ModelForm در Django – بخش دوم:
در این قسمت قصد داریم فرم های مربوط به رزومه ساز را ایجاد کنید تا آموزش وارد مرحله عملی شود. پس برای همه مدل های مورد نیاز یک ModelForm ایجاد می کنیم.
ابتدا برای Resume یک فرم با نام ResumeForm می سازیم و از این کلاس در ویو استفاده کرده و خروجی را بررسی می کنیم. سپس توضیحاتی در مورد منطق رزومه ساز ارائه می دهیم.
برای Education ، Experience و skill هم موارد قبلی را تکرار می کنیم. و خروجی را بررسی می کنیم.
قسمت سیزدهم پیاده سازی رزومه ساز در Django:
ابتدا با استفاده از فرم ساخت رزومه یک رزومه جدید می سازیم. و در ادمین می بینیم که فایل های رزومه آپلود نشده اند، لذا مشکل آپلود فرم را برطرف می کنیم. و توضیحات لازم را ارائه می کنیم.
سپس دکمه های Next و Previous را به فرم ها اضافه می کنیم تا وقتی کاربر اطلاعات را وارد کرد بتواند به فرم بعدی یا قبلی وارد شود.
در ادامه آموزش یک ویو جدید برای ویرایش رزومه می سازیم تا بتوانیم از ارتباط یک به یک مدل ها به درستی استفاده کنیم و بعد از ذخیره رزومه بتوانیم به فرم مرتبط بعدی منتقل شویم.
قسمت چهاردهم پیاده سازی رزومه ساز در Django – بخش دوم:
در این قسمت تغییراتی اعمال می کنیم تا بتوانیم از یک تمپلت برای دو ویو ذخیره و ویرایش استفاده کنیم و وقتی کاربر در حالت ویرایش است، عناوین تغییر یابد.
در مرحله بعد id روزمه را به دکمه Next اضافه می کنیم و ویو را متناسب با این حالت تغییر می دهیم.
سپس برای فرم سوابق تحصیلی یک جدول اضافه می کنیم تا بعد از اضافه شدن مدرک، به کاربر نمایش داده شود. سپس برای مهارت و سابقه کاری همین کارها را انجام می دهیم. در نهایت خروجی را بررسی کرده و تغییرات مورد نیاز را اعمال می کنیم.
قسمت پانزدهم پیاده سازی رزومه ساز در Django – بخش سوم:
ابتدا در فرم سوابق کاری تغییراتی در تمپلت اعمال می کنیم تا فیلدها به صورت غیر خودکار نمایش داده شوند. سپس یک کتابخانه جاوا اسکریپ را دانلود می کنیم که انتخاب تاریخ را به صورت بهتری نمایش دهیم. پس با راهنمای مربوط به کتابخانه ذکر شده، فیلد تاریخ را با قالبی که می خواهیم نمایش می دهیم.
و در مرحله بعدی تغییراتی در modelFormو ویو اعمال می کنیم که کاربر نتواند رزومه دیگران را انتخاب کند و رزومه کاربر به صورت اتوماتیک انتخاب شود و از دید کاربر مخفی باشد.
قسمت شانزدهم widget های پیشرفته در Django:
ابتدا توضیحاتی در مورد فیلدهای اجباری در مدل ها ارائه می شود و فیلدهای اختیاری را توضیح می دهیم. سپس با استفاده از widget ها یکی از آنها را اجباری می کنیم.
در ادامه ویجت جدیدی را معرفی می کنیم که المان های یک ComboBox را به صورت MultipleCheckBox نمایش دهد و برای همین فیلد فیلتر می نویسیم که همه مقادیر نمایش داده نشوند.
در ادامه ویجت های دیگری توضیح داده می شود و به صورت عملی با آنها آشنا می شویم.
قسمت هفدهم ساخت فرم ثبت نام با UserCreationForm در Django:
در این قسمت ابتدا با login_required آشنا می شویم و نمظیمات مربوط به این مورد را در settings.py اعمال می کنیم. سپس فرم های لاگین و logout را برای پروژه می سازیم.
در ادامه برای فرم register ویو مناسب را ساخته و کدهای html مربوطه و url را نیز ایجاد می کنیم. در ادامه برای استفاده از UserCreationForm آن را در forms.py ایمپورت می کنیم و فیلدهای مورد نیاز را اضافه می کنیم.
قسمت هجدهم ویرایش اطلاعات کاربر با UserChangeForm در Django:
ابتدا یک ویو برای نمایش پروفایل می سازیم. سپس جهت ویرایش اطلاعات یک مسیر جدید اضافه می کنیم تا کاربر بعد از لاگین وارد پروفایل خودش شده و بعد از ویرایش اطلاعات خودش بتواند اقدام به ثبت رزومه کند.
در ادامه فرم مورد نظر را در forms.py اضافه می کنیم و فیلدهای مورد نیازمان را تعیین می کنیم. و در نهایت ویو مربوط به ویرایش و تمپلت مربوط را ایجاد می کنیم.
قسمت نوزدهم تغییر رمز عبور با PasswordChangeForm در Django:
در این قسمت ابتدا url مربوطه را می سازیم. سپس در فایل views.py ویو جدیدی ایجاد می کنیم و PasswordChangeForm را ایمپورت کرده و تغییرات را در ویو اعمال می کنیم.
سپس فایل html مناسب را می سازیم و پسورد را تغییر می دهیم. پسورد با موفقیت تغییر می یابد و کاربر را logout می کند. در صورتی که بخواهیم بعد از تغییر رمز کاربر لاگین بماند متد update_sessison_auth_hash را ایمپورت کرده و از آن در ویو استفاده می کنیم.
قسمت بیستم ثبت رزومه با اطلاعات کاربر لاگین شده در Django:
اولین کاری که نیاز است انجام دهیم، نیاز است در همه فایل های forms.py فیلد user را از همه فرم ها حذف کنیم. سپس در فرم هایی که کاربر مورد نیاز است، بعد از متد form.is_valid کاربر را برای فرم تنظیم می کنیم.
در ادامه فیلدهای نام و نام خانوادگی را نیز از فرم ثبت رزومه حذف می کنیم و از کاربری که لاگین کرده است بر می داریم.
قسمت بیست و یکم آشنایی با FormSet در Django:
در ابتدای این ویدئو توضیحاتی در مورد formset ارائه می شود. سپس وارد تنظیمات فرم مربوط به skill می شویم تا با استفاده از formset_factory تغییرات مد نظرمان را اعمال کنیم.
در ادامه بعد از form.is_valid با استفاده از حلقه for همه فرم ها را از رکوئست post گرفته و اطلاعات فرم ها را ذخیره می کنیم. همچنین تغییراتی در html مربوط به ویو اعمال می کنیم تا formset به درستی نمایش داده شود.
در ادامه با اضافه کردن قابلیتی دیگر به کاربر اجازه می دهیم تا تعداد فیلدهارو خودش بتواند برای fromset مشخص کند.
قسمت بیست و دوم ویوهای Class-based و فرم ها در Django:
در این قسمت ابتدا توضیحاتی در مورد ویوهای کلاس محور ارائه می شود. سپس ویو CreateResume را با استفاده از ویوهای کلاس محور ایجاد می کنیم.
در ادامه متد get_success_url را در کلاس ویو جدید override می کنیم تا کاربر بعد از ذخیره رزومه به فرم مورد نظرش redirect شود. سپس برای ثبت اطلاعات کاربر لاگین شده از LoginRequiredMixin استفاده می کنیم.
در نهایت برای اینکه اطلاعات به درستی ذخیره شوند متد form_valid را نیز override می کنیم و تغییرات مورد نیاز را اعمال می کنیم.
قسمت بیست و سوم پیاده سازی Resume Generator در Django:
ابتدا ویو Generate_resume را تغییر می دهیم و با استفاده از get_object_or_404 رزومه رو لود می کنیم. و همه اطلاعات مربوط به رزومه از قبیل مهارت ها، سوابق کاری و سوابق تحصیلی را در همین ویو لود می کنیم.
در ادامه کدهای html را کامل می کنیم و اطلاعات رزومه را به صورتی مطلوب به کاربر نمایش می دهیم.
قسمت بیست و چهارم پیاده سازی فرم جستجو با فیلتر چندگانه در Django – بخش اول:
در این قسمت ابتدا تمپلت مورد نظر را با ساختن یک فرم جدید ایجاد می کنیم. فرم را با متد GET ایجاد می کنیم تا وقتی کاربر اطلاعات را جستجو کرد، مقادیر در url اضافه شوند.
در این فرم فیلترهای مختلفی اضافه می کنیم تا کاربر بتواند بر حسب هر کدام از این فیلدها خواست، جستجوی مورد نظرش را انجام دهد. و با استفاده از حلقه for مقادیر مورد نیاز برای کمبوها را لود می کنیم در این صورت فیلدهایی مثل جنیست، مهارت و … که قابل انتخاب هستند، از دیتابیس لود می شوند. و کاربر می تواند یک مورد را انتخاب کند.
سپس در ویو براساس مقادیر انتخابی کاربر، فیلترها را انجام می دهیم و اطلاعات فیلتر شده را لود می کنیم. در این قسمت با distinct و annotate و مواردی نظیر اینها آشنا می شویم.
قسمت بیست و پنجم پیاده سازی فرم جستجو با فیلتر چندگانه در Django – بخش دوم:
در این قسمت قصد داریم خروجی جستجو را به صورت مناسبی نمایش دهیم. و فیلترهای مختلف را تست می کنیم.
در ادامه برای اینکه بعد از هر جستجو مقادیر فرم ریست نشوند ، تغییراتی اعمال می کنیم و کاربر بعد از جستجو، اطلاعات مورد جستجوی قبلی را از دست نمی دهد.
پایان آموزش کار با فرم ها در جنگو. لطفا نظرات خود را در بخش نظرات ثبت کنید.