پشتیبانی بیشتر از همگامسازی، فیلدهای فرم سادهتر و روشهای آسانتر برای مدیریت انتخابهای فرم همگی به جنگو جدید میآیند.
جانگو، چارچوب وب پایتون با تمام باتریها، در آستانه انتشار پنجمین نسخه اصلی خود است. در اینجا خلاصه ای از پنج ویژگی جدید جنگو ۵ وجود دارد که می توانید از آنها در پروژه های موجود و جدید جنگو استفاده کنید.
۵ ویژگی جدید برتر در جنگو ۵
- فیلدهای فرم سادهتر ارائه میشوند
- فیلدهای مدل برای محاسبات و ستون های تولید شده
- نوشتن انتخابهای فیلد آسانتر است
- دکوراتورهای بیشتر با نمای ناهمگام
- مدیریت استثنا برای قطع ارتباط ناهمگام
۱. ارائه فیلدهای فرم ساده تر است
فیلدهای فرم در جنگو دارای چندین عنصر هستند – برچسب توصیفی، متن راهنما، برچسب خطا و خود فیلد. اگر فرمی با چندین فیلد از این دست دارید، قرار دادن آنها به صورت دستی ممکن است خسته کننده باشد.
برای رفع آن، جنگو ۵ یک جدید ارائه می دهد روش گروه فیلد برای فیلدهای فرم. هنگامی که در یک الگو استفاده می شود، روش .as_field_group
همه عناصر موجود در گروه فیلد را به طور خودکار بر اساس الگویی که می توانید سفارشی کنید، ارائه می دهد.
با گروههای فیلد، میتوانید همه این موارد را رندر کنید:
{{ form.username.label_tag }}
{% if form.username.help_text %}
<div class="helptext" id="{{ form.username.auto_id }}_helptext">
{{ form.username.help_text|safe }}
</div>
{% endif %}
{{ form.username.errors }}
{{ form.username }}
… فقط به این صورت:
{{ form.name.as_field_group }}
باز هم، ارائه قابل سفارشیسازی است—شما میتوانید الگوی پیشفرض را برای گروههای فیلد در سطح برنامه جایگزین کنید، یا میتوانید آن را در هر فیلد یا حتی در هر درخواست سفارشی کنید.
۲. فیلدهای مدل برای محاسبات و ستون های تولید شده
ستونهای محاسبهشده در پایگاههای داده به شما امکان میدهند مقدار ستون را بهعنوان خروجی برخی از فرمولها تعریف کنید، که قبل از ارسال به مشتری در پایگاه داده محاسبه میشود.
Django 5 اکنون به شما امکان می دهد فیلدهایی را در مدل هایی با یک پارامتر پیشفرض پایگاه داده، که به شما امکان میدهد یک مقدار پیشفرض محاسبهشده با پایگاه داده ارائه دهید. به عنوان مثال، یک DateTimeField
می تواند از Now()
به عنوان پیش فرض استفاده کند.
توجه داشته باشید که db_default
را فقط میتوان روی چیزی تنظیم کرد که خروجی ترکیبی از حروف و توابع پایگاه داده پشتیبانی شده.
یکی دیگر از Django 5.0 افزودنی مفید در این زمینه GeneratedField—نوع فیلد جدیدی که مقدار آن همیشه از مقادیر فیلدهای دیگر تولید می شود. نتایج را می توان در پایگاه داده زمانی که ردیف نوشته یا به روز می شود (یک فیلد “ذخیره شده”) ذخیره کرد، یا فقط زمانی که ردیف خوانده شد (یک فیلد “مجازی”) محاسبه شد.
همچنین توجه داشته باشید که GeneratedField
ها فقط می توانند از فیلدهای دیگر در همان مدل به عنوان ورودی استفاده کنند. همچنین نمی توانید از سایر فیلدهای تولید شده به عنوان منبع استفاده کنید، فقط از فیلدهای واقعی استفاده کنید.
۳. انتخاب فیلدها برای نوشتن آسان تر است
در نسخههای قبلی جنگو، زمانی که میخواستید گزینههای موجود برای اشیاء Field.choices
و ChoiceField.choices
را فهرست کنید، باید یک آرایش نامناسب از ۲ ایجاد میکردید. -tuples یا زیر کلاسهای Enumeration
:
HQ_LOCATIONS = [
("United States", [("nyc", "New York"), ("la", "Los Angeles")]),
("Japan", [("tokyo", "Tokyo"), ("osaka", "Osaka")]),
("virtual", "Anywhere"),
]
با جنگو ۵، میتوانید با استفاده از نگاشت فرهنگ لغت، از بیانیه بسیار مختصرتری استفاده کنید:
HQ_LOCATIONS = {
"United States": {"nyc": "New York", "la": "Los Angeles"},
"Japan": {"tokyo": "Tokyo", "osaka": "Osaka"},
"virtual": "Anywhere",
}
این باعث میشود انتخابها بهعنوان لفظی رمزگذاری شوند، و همچنین تولید برنامهای نیز کمی آسانتر میشود.
۴. بسیاری دیگر از تزئینات نمای غیرهمگام
جانگو اولین پشتیبانی خود را از مکانیسمهای ناهمزمان پایتون در نسخه ۳.۰ اضافه کرد، اما همه بخشهای جنگو از همان ابتدا پشتیبانی همگام را دریافت نکردند. این در لایه ها اضافه شده است، با پشتیبانی از نماهای همگام در نسخه ۴.۰ و پشتیبانی از ORM که در نسخه بعدی عرضه می شود.
از آنجایی که جنگو بهتدریج پشتیبانی همگامسازی را اضافه میکند، بسیاری از دکوراتورها قبلاً از بستهبندی نماهای همگامسازی پشتیبانی نمیکردند. این با نسخه ۵ تغییر می کند، که در آن اکنون بسیاری از دکوراتورها می توانند نماهای ناهمگام را بپیچند از جمله مفیدترین آنها مواردی هستند که از CSRF (جعل درخواست بین سایتی) محافظت از بازدیدها را تضمین می کنند.
۵. مدیریت استثنا برای قطع اتصالات ناهمگام
با اتصالات ناهمگام، همیشه این خطر وجود دارد که قبل از اینکه جنگو پاسخی را برگرداند، یک اتصال طولانی مدت بسته شود. پیش از این، مکانیزم داخلی برای رسیدگی به پاکسازی زمانی که اتصال ناهمگام لغو شد وجود نداشت. جنگو ۵ یک استثناء مناسب را ایجاد میکند، asyncio.CancelledError
، که در صورت نیاز می توانید آن را به دام بیندازید.
پست های مرتبط
۵ ویژگی جدید عالی در جنگو ۵
۵ ویژگی جدید عالی در جنگو ۵
۵ ویژگی جدید عالی در جنگو ۵