سبد خرید شما خالی است
سیگنال ها (Signals) در جنگو یک موضوع بسیار مهم و کاربردی است و آشنا شدن با آن در عملکرد و کارهای وبسایت شما سرعت میبخشد همانطور که در دنیای واقعی سیگنال ها وجود دارند برای مثال شما برای برقراری یک تماس یک سینگال ارسال کرده و ارائه دهنده آن سیگنال را به مخاطب شما ارسال میکند و مکالمه شما شروع میشود در جنگو نیز تقریبا قبل یا بعد از هر عملکرد(برای مثال لاگین کردن, و ... ) و تغییر در سطح پروژه یا تغییر یک آبجکت در دیتابیس ( ایجاد کردن,حذف کردن, آپدیت کردن یک آبجکت) سیگنال هایی ارسال میشود و شما میتوانید با نوشتن یک Reciver که به آن دریافت کنند سیگنال میگوییم سیگنال خود را کنترل کنید برای مثال میتوانید یک قابلیت اضافه کنید تا اگر یک کاربر در دیتابیس شما ایجاد میشود به طور اتومات یک پروفایل برای آن ایجاد کنید
سیگنال ها از قبل درون فریمورک جنگو نوشته شده اند و برای کار کردن با یک سیگنال در جنگو باید در ابتدا سیگنال مورد نظر را import کرده و سپس یک فانکشن به عنوان دریافت کننده سیگنال که آن را مدیریت میکند نوشته و کارهایی که میخواهید با اینجام یک سیگنال انجام شود را درون آن فانکشن پیاده میکنیم و بعد از نوشتن Reciver خود باید سیگنال خود را به اپ معرفی کنیم که در ادامه خواهید دید حال قبل از شروع نوشتن اولین فانکشن برای سیگنال خود خوب است با سیگنال های Bulit-in در جنگو(Django) آشنا شویم
انواع سیگنال ها در جنگو(Django):
پیشنهاد میشود در هنگام مطالعه این بخش وارد بخش سیگنال ها در وبسایت رسمی جنگو شوید:سیگنال ها در جنگو
در این بخش به بررسی چند سیگنال پرکاربرد میپردازیم و نحوه ی کار کردن با آن ها در Django خواهیم دید در ابتدا به مدل پروژه دقت کنید
مدلی که ما ایجاد کرده ایم یک slugField دارد که میخواهیم پس از سیو کردن هر مقاله اگر مقدار اسلاگ خالی باشد خودمان به طور اتومات آن را تولید کرده و سیو کنیم برای این کار باید از سیگنال post_save از سیگنال های مدل استفاده کنیم که در ابتدا به بررسی این سیگنال و اطلاعاتی که برای Reciver ما ارسال میکند میپردازیم و سپس به مدیریت آن میپردازیم
سیگنال post_save: این سیگنال زمانی ارسال میشود که متد ()save برای یک آبجکت فراخوانی شود و این سیگنال وقتی که یک آبجکت سیو شود ارسال میشود
آرگومان هایی که همراه این سیگنال ارسال میشود:
خب بعد از آشنا شدن با اطلاعت یا همان آرگومان هایی که این سیگنال به فانکشن ما ارسال میکند نوبت به نوشتن Reciver برای دریافت این سیگنال میباشد در ابتدا درون اپ خود یک فایل با نام signals.py ایجاد کنید و مطابق تصویر زیر کد ها را درون آن قرار دهید
توضیحات فایل signals.py:
همانطور که گفتیم ما باید سیگنال ها را از طریق Reciver دریافت کنیم و تابع ای برای مدیریت هنگام به وجود آمدن این سیگنال بسازیم ما یک تابع برای ایجاد کردن اسلاگ به طور اتومات برای مقالات خود ایجاد کردیم و در آرگومان های ورودی آن آرگومان هایی که سیگنال post_save برای ما ارسال میکند را دریافت و در صورت نیاز از آن ها استفاده کنیم توجه کنید که حتما kwargs** را نیز قرار دهید زیرا اگر وجود نداشته باشد به ارور برمیخورید خب در بدنه این تابع چک میکنیم که آیا instance که همان نمونه از یک مقاله است اسلاگ دارد یا خیر اگر نداشت با استفاده از تابع slugify در جنگو که برای تبدیل کردن متون انگلیسی به متن قابل قبول برای اسلاگ است یک اسلاگ با استفاده از title آن مقاله ایجاد میکنیم و سپس مقاله مورد نظر را save میکنیم بعد از نوشتن تابع reciver نیاز است تا از دکوریتور reciver در جنگو استفاده کنیم که این امکان را به تابع ما میدهد که یک سیگنال را دریافت و بتواند آن را مدیریت و کنترل کند و به عنوان آرگومان های ورودی برای reciver ارسال کننده سیگنال که در اینجا مدل Article میباشد و همچنین سیگنال مورد نظر را به ان پاس میدهیم که سیگنال ما سیگنال post_save از سری سیگنال های دیتابیس است که زمانی که یک مقاله ایجاد یا آپدیت میشود یا بهتر است بگوییم متد save در یک مقاله فراخوانی میشود این سیگنال از طرف مدل مورد نظر ارسال میشود پس از انجام این مراحل نیاز است تابع reciver خود را در فایل apps.py اپ خود ریجستر کنیم که تابع ما اجرا شود در غیر این صورت reciver ما کار نخواهد کرد در کلاس Config اپ خود در قسمت تابع ready خود فایل signals.py خود را ایمپورت میکنیم
مقاله پیشنهادی:آموزش اسلاگ فارسی در جنگو
سیگنال user_logged_in: این سیگنال یکی از سیگنال های اپ auth میباشد که در هنگامی که یک کاربر در وبسایت شما با موفقیت لاگین میکند از طرف مدل User موجود در اپ auth ارسال میشود
آرگومان های سیگنال user_logged_in:
کار کردن با سیگنال user_logged_in:
مانند سیگنال قبل نیاز است در ابتدا سیگنال مورد نظر را از مسیر django.contrib.auth.signals ایمپورت کنیم و تابع مورد نظر خود را ایجاد و کارهایی که بعد از لاگین یک کاربر در وبسایت میخواهیم انجام شود را بنویسم که ما در اینجا میخواهیم بعد از لاگین هر کاربر یک پیغام در کنسول print شود
و مانند بخش قبلی با استفاده از دکوریتور reciver سیگنال مورد نظر و مدل خودمان را به آن متصل میکنیم و از آنجایی که فایل signals.py را در بخش تنظیمات اپ خود قرار داده ایم سیگنال ما کار میکند و دیگر نیازی به ایمپورت مجدد نیست چون هر بار تمام محتویات این فایل ایمپورت میشود و اگر الان یک کاربر در وبسایت شما لاگین کند با پیغام hi در کنسول مواجه میشوید و شما میتوانید کارهای مورد نیاز برای لاگین کاربر را با توجه به پروژه و ایده خود پیاده کنید برای مثال میتوانید یک پیامک به شماره تلفن کاربر یا حتی یک ایمیل در صورت نیاز برای آن ارسال کنید
نتیجه گیری:
سیگنال ها یکی از موارد پرکاربرد در جنگو میباشد و شما میتوانید با استفاده از سیگنال ها در جنگو کارهای متنوع تری انجام دهید پیشنهاد میشود حتما به داکیومنتی که در ابتدای مقاله قرار داده بودیم وارد شده و همچنین خودتان هم یک بار این سیگنال ها را بخوانید و در پروژه های خود استفاده کنید و از همه مهم تر سیگنال های اپ auth هم سیگنال های کاربردی اند که به صفحه ی آن ها هم سر بزنید امیدواریم این مقاله از سان لرن برای شما عزیزان مفید واقع شده باشد
برای درح نظر ابتدا وارد شوید !
نظرات