سیستم احراز‌ هویت کاربران در جنگو

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

مدیریت کاربران حتی در یک سطح عادی – فراموشی رمز عبور، فراموشی نام کاربری، بروزرسانی اطلاعات کاربری و…- نیز دشوار است، حال نوشتن چنین سیستمی از ابتدا می‌تواند واقعا دردسرساز و سخت باشد.

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

درست مانند تمام گزینه‌های دیگری که جنگو به ما می‌دهد، این پیاده‌سازی از سیستم احراز هویت و… نیز توسعه پذیر همراه با قابلیت شخصی‌سازی بالاست.

بررسی کلی

سیستم احراز هویت جنگو هم موضوع احراز هویت و هم موضوع اعتبارسنجی را بررسی می‌کند. اگر به صورت کوتاه بگوییم، احراز هویت سیستمی است که بودن یا نبودن یک کاربر را از نظر وجود در سیستم تایید می‌کند و اعتبارسنجی سطح دسترسی کاربر را بررسی می‌نماید. در این مطلب احراز هویت به هر دو حالت اطلاق می‌شود.

سیستم احراز هویت به صورت کلی شامل موارد زیر است:

  • کاربران
  • دسترسی‌ها: از طریق باینری (True/False) مدیریت می‌شود.
  • گروه‌ها: راهی بسیار مناسب برای دادن دسترسی به حجمی بالا از کاربران.
  • سیستم هشینگ پسورد
  • فرم‌هایی برای مدیریت اعتبارسنجی و احرازهویت کاربران
  • ابزارهای View در مدل MVT برای مدیریت ورود کاربران
  • سیستم قابل توسعه در بک‌-اند

در نسخه‌های ابتدای جنگو قابلیت‌های امنیتی زیادی برای سیستم احرازهویت وجود نداشت، حال اما در نسخه ۲ این موارد تا حدی حل شده اما هنوز برخی از آن‌ها به صورت پیشفرض می‌توانند مشکل آفرین باشند. اما به لطف داشتن جامعه توسعه کاربری بسیار بزرگ جنگو، ابزارهای بسیار زیادی وجود دارد که این مسئله را به خوبی حل می‌کند. برای مثال Oauth که پروتکلی امنیتی برای احراز هویت است از طریق ابزارهای مخصوص جنگو می‌تواند پیاده‌سازی شود.

استفاده از سیستم احراز هویت جنگو

User Objects

در هسته سیستم احرازهویت جنگو User Objects وجود دارد. شما از طریق این شئ می‌توانید محدودیت‌های مختلفی را در پروژه‌تان اعمال کنید. ثبت کاربران، ملحق کردن آن‌ها به نوشته‌ای خاص و… نیز به صورت کامل از طرف این شئ مدیریت می‌شود. اما با وجود آنکه گروه‌های کاری مختلفی وجود دارد، در خصوصیات پایه‌ای آن‌ها تفاوتی نیست. برای مثال ما کاربرانی مانند superuser و staff  را داریم که عملا به صورت پایه‌ای برابر هستند. اما محدود کردن دسترسی از طریق یک سری باینری فلگ انجام می‌پذیرد که در این ارتباط صحبت کردیم.

به صورت کلی هر کاربری که در User Objects تعریف می‌شود دارای خصوصیات زیر است:

  • username
  • password
  • email
  • first_name
  • last_name

ایجاد یک Superuser

ایجاد superuser در جنگو با استفاده از دستور createsuperuser انجام می‌شود:

البته اطلاعات اضافی مورد نیاز برای ورود بعد از وارد کردن دستور بالا به صورت prompt از شما پرسیده می‌شود.

ایجاد کاربر جدید

راحت‌ترین و کم خطاترین راهکار برای اضافه کردن کاربر جدید به وبسایت استفاده کردن از ادمین جنگو است. جنگو همچنین Viewها و Formهایی را ایجاد کرده که به سادگی شما را قادر می‌سازند تا قابلیت‌هایی مانند ورود، فراموشی رمز عبور، ثبت‌نام کاربران و… را در اپلیکیشن‌تان پیاده‌سازی می‌کنید.

در این قسمت برای ایجاد کاربری جدید قصد داریم از Shell مربوط به جنگو استفاده کنیم. در این محیط ما قابلیت استفاده از دستورات پایتون را داریم، از این رو به سادگی می‌توانیم با مدل شئ‌گرای ORM جنگو نیز کار بکنیم:

حال همانطور که می‌توانید مشاهد بکنید، ما کاربری جدید با نام کاربری john، ایمیل lennon@thebeatles.com و رمز عبور johnpassword ایجاد کرده‌ایم. حال اگر بخواهیم ویژگی‌های دیگر آن را تغییر دهیم می‌توانیم به سادگی از حالت زیر استفاده نماییم:

برای تغییر دادن رمز عبور کاربران ما دو راهکار بسیار ساده را داریم که می‌شود از آن‌ها استفاده کرد. یکی از طریق فایل manage.py و دیگری از طریق Shell.

۱- با وارد کردن دستور python manage.py changepassword username می‌توانیم رمز عبور کاربر username را به سادگی تغییر دهیم.

۲- برای استفاده کردن از Shell برای تغییر پسورد، شما ابتدا باید کاربر مورد نظرتان را با متد get دریافت کنید:

بعد از آن می‌توانید با استفاده از متد set_password() پسورد جدیدی را برای کاربر تعیین نمایید:

اگر در بخش middleware در قسمت settings جنگو SessionAuthenticationMiddleware را فعال کرده باشید، این تغییر پسورد به صورت یک لاگ ظاهر می‌شود.

مجوز‌ها و اعتبار سنجی

در پنل ادمین جنگو، ما قابلیت ایجاد مجوزهای دسترسی برای کاربران را داریم. هر کدام از این مجوزها نیز نامی دارند که می‌شود تنها با assign کردن آن‌ها به یک کاربر و یا یک گروه کاربری آن‌ها را محدود کرد. سه مورد موجود از این مجوزها را می‌توان در زیر مشاهده کرد:

  • استفاده کردن از view «add» برای افزودن از طریق فرم‌های موجود تنها برای کاربرانی مقدور است که مجوز add را دارند.
  • استفاده کردن از view «change» برای تغییر از طریق فرم‌ها تنها برای کاربرانی مقدور است که مجوز change را دارند.
  • استفاده کردن از view «delete» برای تغییر از طریق فرم‌ها تنها برای کاربرانی مقدور است که مجوز delete را دارند.

شما جدای از پنل جنگو، می‌توانید این مجوزها را از طریق متدهای زیر نیز به User Object اعمال کنید:

has_add_permission()

has_change_permission()

has_delete_permission()

مجوزهای پیشفرض

در قسمت تنظیمات پروژه برای لیست INSTALLED_APPS می‌توانید django.contrib.auth را مشاهده کنید. این اپلیکیشن به صورت پیشفرض در تمام پروژه‌های جنگو وجود دارد. شما هر بار که عملیات migrate را روی مدل‌های دیتابیس خود اعمال کنید، این اپلیکیشن مجوز‌های پیشفرض add،  changeو delete را برای تمام مدل‌ها ایجاد می‌کند.

گروه‌ها

مدل‌ django.contrib.auth.models.Group یک راه منطقی و بسیار ساده برای دسته‌بندی کردن کاربران و قرار دادن آن‌ها در دسته‌بندی مشخصی است. شما می‌توانید از این طریق مجوز‌های کاربری را به صورت گروهی اعمال نمایید. شما می‌توانید یک کاربر را در هر چند گروه که بخواهید قرار دهید. مجوزهای دسترسی در این حالت override شده و چند مجوز به یک کاربر در این شرایط اعمال می‌شود.

ایجاد مجوز به صورت دستی

در حالیکه می‌شود از طریق class Meta در مدل‌های ساخته شده، مجوزهای دسترسی را به صورت دستی ایجاد کنید، اما یک روش مستقیم برای اینکار استفاده از خط فرمان است. برای مثال توسط بکنید که ما می‌خواهیم یک دسترسی can_publish را برای مدل BookReview در مدل books ایجاد کنیم. برای اینکار به صورت زیر عمل می‌کنیم:

بعد از آن می‌شود از طریق خاصیت user_permissions مجوز مربوطه را به یک گروه و یا یک کاربر اعمال کرد.

بررسی وجود یک مجوز

اگر بخواهید به صورت سریع بعد از ارائه یک مجوز و یا ایجاد یک کاربر مجوزهای موجود برای آن کاربر را بررسی کنید، یکی از راحت‌ترین راه‌حل‌ها برای انجام چنین کاری استفاده کردن از رویکرد زیر است:

در پایان

من (ارسطو عباسی) در این مطلب سعی کردم تا شما را با سیستم احراز هویت و اعتبار سنجی در جنگو آشنا کنم. این مطلب از کتاب Build your first website with Django 2.1 نوشته Nigel George گرفته شده است.

منبع

ویدیو: دوره سریع آموزشی گیت و گیت‌‌هاب

خیلی وقت‌ها یک مشکلی که بوجود میاد اینه که ما یه کاری رو می‌خوایم انجام بدیم و وقتی برای یادگیری‌ش مراجعه می‌کنیم همه دوره‌ها و کتاب‌ها و مقالات و… خیلی عمیق در حال آموزشش هستند. مثلا من به عنوان یه توسعه دهنده بک-اند فعلا لزومی نمی‌بینم که برای پروژه آلفا خودم بوت‌استرپ رو مثلا خیلی عمیق یاد بگیرم. کل هدفم اینه که بتونم در حدی اون رو یاد بگیرم که یه پروژه‌ای راه بندازم و بتونم کارهام رو نشون بدم. 

چنین سناریویی رو هم برای این دوره تصور کردم. افرادی هستند که شاید نخواند واقعا خیلی عمیق از سیستم کنترل نسخه گیت سر در بیارن و صرفا می‌خوان یه پروژه ساده رو باهاش کنترل بکنند و در نهایت اون رو بزارند روی مخزن گیت‌هابشون. بعضی‌ها هم یه نقطه شروعی می‌خوان که سریع به یه جایی برسونتشون و برای اینکار هم چنین سناریویی می‌تونه کاربردی باشه. 

در هر حال من یه دوره آموزشی یک ساعته رو به صورت رایگان روی وبسایت فرانش آپلود کردم و هدفم هم دقیقا سناریوهایی بود که در بالا گفتم.

برای مشاهده دوره آموزشی می‌تونید وارد لینک زیر بشید و قبلش هم ویدیوی معرفی رو نگاه بکنید. 

آموزش سریع گیت و گیت‌هاب

ویدیو معرفی

آموزش سریع و ساده گیت – نکات پیشرفته‌

در آخرین قسمت از سری آموزش‌های سریع و ساده گیت قصد دارم که چند تا ویژگی و نکته پیشرفته‌تر برای مدیریت مخازن گیت رو با همدیگه مرور کنیم و روی مخزنی که تا اینجای کار مدیریت کردیم، اعمال بکنیم. خب با بررسی تفاوت‌ بین دو کامیت کارمون رو شروع می‌کنیم.

۱- بررسی تفاوت‌های بین دو کامیت

هر کامیتی که شما توی مخزن‌تون می‌کنید یه آی‌دی منحصر به فرد داره که به ما قابلیت دسترسی رو میده. اگه می‌خواید لیست تموم کامیت‌هایی که تا به حال کردید رو ببینید کافیه دستور git log رو وارد بکنید.

همونطور که می‌بینید هر کدوم از آي‌دی ها خیلی طولانی‌اند ولی خب برای دسترسی پیدا کردن بهشون معمولا چند تا از کاراکترهای اولش رو وارد بکنید کافیه.

برای هر لیست از کامیت‌ها می‌تونید اطلاعاتی مثل آی‌دی کامیت، نام کسی که کامیت کرده، تاریخ کامیت و پیغام کامیت رو مشاهده بکنید.

حالا برای اینکه جزئیات کاملتری از هر کامیت رو ببینیم کافیه از دستور git show همراه با آی‌دی کامیت مورد نظر استفاده بکنید:

خروجی:

یه دستور کاربردی دیگه هم که می‌تونیم ازش استفاده بکنیم دستور diff هستش که میاد تغییرات و تفاوت‌های بین دو کامیت رو بررسی می‌کنه. برای اینکار کافیه آی‌دی دو کامیت رو داشته باشیم:

شاید خروجی دستور براتون پیچیده باشه، بجای اون می‌تونید از ابزاری مثال git difftool استفاده بکنید.

۲- بازگشت به نسخه قبلی

خب یکی از هدف‌هایی که ما از استفاده گیت داریم اینه که به ما کنترل خوبی رو روی مدیریت نسخه‌های مختلف یه پروژه بده. خب برای اینکار ما از دستور git checkout استفاده می‌کنیم. قبلا از این دستور برای کنترل برنچ‌ها هم استفاده کردیم.

حالا تصور کنید که من می‌خوام فایل index.html رو به اولین کامیتی برگردونم که کردم. یعنی همون کامیت inital … برای اینکار کافیه آی‌دی کامیت و آدرس index.html رو داشته باشم:

حالا اگه محتویات index.html رو بررسی کنیم می‌بینیم که خالیه یا همون چیزی داخلش قرار داره که توی کامیت اول نوشتیم.

حالا موضوع مهم اینه که اگه من git log رو وارد کنم هنوز هم با کامیت‌های جدیدتر برخورد می‌کنم و می‌تونم به اونا برگردم. گیت فوق العاده‌س 🙂

۳. تغییر در یک کامیت

اگه توی آخرین کامیتی که کردید یه اشتباهی توی نوشتن پیامش کرده باشید چیکار می‌کنید؟ خب شاید بگید برمی‌گردم عقب یه کامیت جدید میزنم و… . خب این کار منطقی نیست. برای یه تغییر سریع روی کامیت ما دستور git commit –amend رو در اختیار داریم که به ما اجازه می‌ده تا پیغام آخرین کامیت رو اصلاح کنیم.

اما اگه مشکل کمی پیچیده‌تر باشه و بخوایم به یه کامیت منحصر به فرد دسترسی داشته باشیم چی؟

خب برای اینکار کافیه دستور revert رو همراه با آی‌دی کامیت وارد کنیم:

HEAD به آخرین کامیتی که شده اشاره می‌کنه.

۴. حل کردن Merge conflicts

تصور کنید که یک برنچ جدید ایجاد کردید و فایل قرار گرفته در برنچ قبلی رو در این برنچ تغییر دادید. حالا به برنچ master برمی‌گردید و عملیات مرج رو انجام می‌دید. اما با یه مشکل بر خورد می‌کنید:

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

حالا برای حل این مشکل می‌تونید به صورت دستی وارد عمل بشید. چطوری؟ خب فایل index.html رو باز کنید: می‌بینید که کلی تغییرات توش اعمال شده:

در واقع گفته که شما در آخرین کامیت که HEAD آدرسشه نوشتید: Hello World اما در برنچ جدید که اسمش New هستش نوشتید Hello Again … من کدومشون رو نگه داری کنم؟

اینجاست که نیازه به صورت دستی وارد کار بشید و کدهای مربوط به برنچی که می‌خواید رو بزارید و مورد دیگر رو حذف کنید. در آخر هم git add index.html و git commit.

۵- .gitignore

بعضی وقت‌ها در یک پروژه قصد این رو ندارید که بعضی از فایل ها و دایرکتوری‌ها رو کامیت بکنید و یا اونا رو به استیج ببرید. خب شاید بگید که توی git add اسمی ازش نیاریم ولی خب ما وقتی پروژه بزرگی داشته باشیم بیشتر وقتا از git add -A استفاده می‌کنیم. اما اگه بخوایم همین دستور هم یه سری فایل ها رو شامل نشه از یه فایلی به اسم .gitignore استفاده می‌کنیم.

کافیه که یه فایل با نام .gitigonre درست کنید و تموم مواردی که نمی‌خواید گیت اونا رو استیج بکنه درش قرار بدید. مثلا:

در این حالت فایل‌هایی با پسوند .log، تمام محتویات دایرکتوری‌های build, node_modules,.idea و فایل my_notes.txt در مخزن گیت شما قرار نمی‌گیرند.

در پایان

این بود از سه قسمت ساده و کاربردی از آموزش گیت و گیت‌هاب. امیدوارم کاربردی بوده باشه. البته بگم که این آموزش‌ها رو به عنوان یه Crash Course در نظر بگیرید اما برای پیشرفت کردن در این موضوع می‌تونید از لینک‌های زیر استفاده بکنید.

منبع این مجموعه مطالب: وبسایت https://tutorialzine.com

آموزش سریع و ساده گیت – برنچ‌ها

در قسمت قبلی با نکات پایه‌ای گیت همراهتون بودم. حالا می‌خوام توی این مطلب یه ذره مطالب پیشرفته‌تر و مهمتری رو به شما بگم. توی این قسمت از برنچ‌ها صحبت می‌کنیم.

۱- برنچ‌ – شاخه

در حالت عادی وقتی روی یه پروژه در گیت کار می‌کنیم، این پروژه در یک مسیر خطی توسعه داده میشه. شما یه سری ویژگی رو اضافه می‌کنید، کامیت می‌کنید و… . این روال به صورت کلی در یک خط اتفاق می‌افته. حالا تصور کنید که ما یه تیم برنامه‌نویسی داریم و می‌خوایم روی قسمت‌های مختلف یه پروژه کار بکنیم. مثلا تصور بکنید که ما یه وبسایت فروشگاهی داریم. این وبسایت از چند بخش تشکیل میشه. یه بخش فرانت-اند یه بخش بک-اند یه بخش بانک اطلاعاتی و… . حالا اگه توسعه دهندگان مختلفی بخوان همشون روی این پروژه کار بکنند درست نیست که در یک روال خطی قرار بگیرند. بجای اینکار میان یه شاخه یا یه انشعاب از پروژه اصلی میگیرند و اون رو توسعه میدن. مثلا برنامه نویس فرانت اند بخش فرانت اند رو به صورت جداگونه توسعه میده و در نهایت این بخش‌ها همشون برمی‌گردن سر همون پروژه اصلیه. تصویر زیر رو ببینید:

Branches

دلایل استفاده از برنچ:

  • با تغییر دادن پروژه‌ای که به صورت درست تا به حال کار کرده کدها خراب نمیشن.
  • بسیاری از ویژگی های مختلف بین آدم‌های مختلف می‌تونند با امنیت کامل ایجاد بشند.
  • یک توسعه دهنده بدون اینکه روی کد توسعه‌دهندگان دیگه تاثیر داشته باشه کدهای مربوط به خودش رو توسعه میده.
  • وقتی توی یه شرکت باشید و بخواید کاری رو دست سه چهار نفر بسپرید و بگید هر کی بهتر کارش رو انجام بده، روی پروژه اصلی اعمال میشه می‌تونیم از برنچ استفاده کنیم 🙂
  • یه چیز جالب راجع به برنچ‌ها اینه که اونا تاریخچه منحصر به فرد خودشون رو دارند.

۲- ایجاد یک برنچ جدید

به صورت پیشفرض گیت یه برنچ به اسم master برای ما ایجاد میکنه که پروژه اصلی ما روی اونه. برای اینکه یه برنچ جدید بسازید کافیه دستور زیر رو وارد کنید:

حالا من یه برنچ جدید با نام new_feature ساختم. با استفاده از دستور branch به صورت خالی، می‌تونید لیستی از برنچ‌های موجود رو ببینید:

اون علامت ستاره قبل از هر کدومش باشه به این معناست که ما روی اون کار می‌کنیم. حالا بزارید از روی برنچ master بریم روی برنچ جدیدی که ساختیم. برای اینکار دستور checkout رو وارد می‌کنیم:

حالا یه بار دیگه git branch رو وارد کنید که مطمئن بشید علامت ستاره روی گزینه new_feature قرار داره. 

اگه بود می‌تونیم فرایند توسعه رو ادامه بدیم. برای اینکه ببینیم دقیقا چه اتفاقاتی می افته، توی این برنچ جدید یه فایل می‌سازیم و اون رو کامیت می‌کنیم:

حالا جالبی قضیه می‌دونید کجاست؟ وقتی که برگردید سراغ برنچ master می بینید که فایل new_file.txt مخفی شده و نمی‌تونید ببینیدش. خب دلیل‌ش اینه که این فایل توی یه برنچ دیگه قرار داره نه برنچ مستر. 

۳. Merge کردن برنچ‌ها

خب حالا که من بخوام تمام برنچ‌های ساخته شده رو به برنچ اصلی یعنی برنچ master بیارم باید چیکار کنم؟ سوال خوبیه. تنها کافیه که فایل‌های مختلف برنچ‌های مختلف رو بریزید توی master برای اینکار از دستور merge استفاده می‌کنیم.

اولا که وارد برنچ مستر میشم:

بعد عملیات مرج کردن رو شروع می‌کنم:

git merge new_feature

خب حالا می‌تونید ببینید که فایل new_file.txt به برنچ مستر اضافه شد. حالا که کارمون با برنچ قبلی تموم شد می‌تونیم حذفش بکنیم.

 

توی مطلب بعدی سری گیت از چند موضوع پیشرفته‌تر از جمله merge conflict صحبت می‌کنم.

آموزش سریع و ساده گیت – مقدمات و کار با گیت‌هاب

مهم نیست که اسم گیت به گوشتون خورده باشه یا نه، مهم اینه که برای خفن شدن به گیت نیاز دارید. هدف‌مون از این مطلب چند قسمتی آموزش گیته. می‌خوام خیلی سریع و ساده به شما بگم که گیت چیه و چطوری ازش استفاده کنیم. همچنین آپلود یه پروژه روی گیت‌هاب رو داریم که خودش موضوع مهم دیگه‌ایه!

تعریف

گیت یه مجموعه دستور و امکاناته که روند تغییرات یک یا چند فایل رو مشاهده می‌کنه و به ما این قابلیت رو میده تا بتونیم نسخه‌های مختلفی از برنامه‌ای که توسعه می‌دیم رو مدیریت کنیم. اینجوری ما می‌تونیم بین نسخه‌های مختلف یه برنامه بگردیم و اونا رو restore بکنیم. این پروسه به صورت خیلی مقدماتی و پایه‌ای بهش میگن سیستم کنترل نسخه یا Version Control System. گیت رو خالق لینوکس، لینوس توروالدز نوشته 🙂

گیت یه برنامه‌س که می‌تونید اون رو دانلود کنید و روی محیط محلی خودتون ازش استفاده کنید. پس گیت یه سیستم متمرکز نیست، اینجوری نیست که همه چی رو یه سرور باشه و شما فایل‌هاتون رو به اون سرور بفرستید، نه گیت رو میشه در حالت محلی پیاده‌سازی کرد. 

هر پروژه‌‌ای که توی گیت قرار بگیره بهش میگن یه ریپازیتوری یا یه مخزن. مثلا اگه شما مشغول ساختن یه اپلیکیشن توی دایرکتوری app هستید، این دایرکتوری میشه اون مخزن شما. گیت این مخزن و تغییراتی که درش اتفاق می‌افته رو دنبال میکنه و همه اتفاقات اونجا رو پیگیری میکنه.

حالا این مخزن به صورت محلی روی کامپیوتر ما فقط وجود داره. اگه بخوایم به چند نفر دیگه بدیمش باید چیکار کنیم؟ خب اینم موضوع مهمیه. یه سری از پلتفرم‌هایی که گیت رو به صورت آنلاین ارائه میدن این امکان رو میدن تا بتونیم مخزن خودمون رو به اشتراک دیگران قرار بدیم. مثلا گیت‌هاب یکی از این سرویس‌هاست که توی همین مطلب بهتون یاد میدم چطوری این کار رو هم انجام بدید.

۱- نصب گیت

اولین کاری که باید بکنیم اینه که گیت رو روی کامپیوترمون نصب بکنیم:

  • اگه مثل من از اوبونتو استفاده می‌کنید که کافیه توی ترمینال بزنید sudo apt install git
  • اگه از مک او اس استفاده می‌کنید کافیه توی ترمینال بزنید brew install git
  • اگر هم توی ویندوز هستید که باید این برنامه‌ رو نصب بکنید.

نسخه‌های گرافیکی هم از گیت وجود داره که می‌تونید استفاده بکنید اما خب کار با محیط متنی خیلی لذت بخش تره.

۲- کانفیگ گیت

وقتی که اولین بار گیت رو نصب می‌کنید نیاز هستش که گیت رو براساس مشخصات خودتون کانفیگ بکنید. یعنی اینکه بگید کی هستید تا از این به بعد اتفاقاتی که می افته به اسم شما ذخیره بشه. برای اینکار دستورات زیر رو وارد کنید:

شما بجای Arastoo و hi@arastoo.net، از نام و ایمیل خودتون استفاده کنید. 

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

۳- ایجاد یک مخزن

همونطوری که قبلا اشاره کردم برای اینکه گیت بتونه اطلاعات مربوط به یه پروژه رو دنبال کنه از مفهوم مخزن استفاده میکنه. پس نیاز هست که یه مخزن درست کنیم. برای این کار ترمینال خودتون رو باز کنید و با دستور cd به دایرکتوری پروژه خودتون مراجعه بکنید. بعد از اون دستور زیر رو وارد کنید:

بعد از اینکار پیغامی شبیه به زیر براتون ظاهر میشه:

حالا اگه یه دستوری مثل ls -a رو وارد کنید می‌بینید که یه دایرکتوری مخفی به اسم .git وجود داره که گیت اون رو براتون ساخته. از این به بعد تمام اطلاعات مربوط به پروژه‌تون مثل کامیت‌ها و… توی این دایرکتوری نگه داری میشه. در مورد این قضیه هم صحبت می‌کنیم.

توی اون دایرکتوری یه فایل simple.txt درست کنید. 

۴- بررسی وضعیت گیت

گیت یه دستور git status داره که وضعیت گیت رو بررسی می‌کنه. مثلا میگه چه چیزهایی تغییر کردند، چه چیزهای جدیدی اضافه شده، آیا همه چیز بروزرسانی شده یا نه و چیزهایی از این دست. حالا بیایید یه بار این دستور رو وارد کنیم بببینم چی به ما برمی‌گردونه:

خروجی:

این خروجی داره به من میگه که روی برنچ مستر هستم (در موردش حرف میزنیم)

هنوز کامیتی ایجاد نشده (در مورد اینم حرف میزنیم)

مهم این خطه که نوشته untracked files: در واقع این خط داره میگه که یه سری فایل توی دایرکتوری test شما وجود داره که گیت دنبال‌شون نمیکنه، به تعبیری این فایل simple.txt جدیده و گیت هنوز نمیدونه که باهاش چیکار بکنه.

حالا سوالی که پیش میاد اینه که چطوری به گیت بگم که هواسش به این فایله باشه؟

۵- استیج کردن – به روی صحنه بردن

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

برای وارد کردن فایل simple.txt به این محیط کافیه دستور git add رو همراه با اسم فایل وارد کنید، مثل:

حالا فایل به مرحله استیج رفت. اگه چند تا فایل داشته باشید می‌تونید بجای وارد کردن اسم همشون دستور git add -A رو وارد کنید. به همین سادگی.

حالا یه بار دیگه دستور git status رو وارد کنید:

این بار بجای untracked files داره میگه که یه فایل جدید به اسم simple.txt داره ردگیری میشه و آماده‌س که کامیت‌ش بکنیم.

۶- کامیت کردن

مثال دوربین مداربسته رو به یاد بیارید. شما یه آدم رو توی اون چهار دیواری که گفتیم اسمش استیج هستش قرار میدید. حالا می‌گید که مثلا ساعت ۶ یه ویدیو کلی از تمام فعالیت‌هاش تا الان رو بفرست به یه جای امن. کامیت کردن یه پروژه هم تقریبا همین حالت رو داره. شما پروژه‌تون رو تا نیمه راه آوردید حالا می‌خواید تا اینجای کار یه نسخه امن و درست از اون رو داشته باشید تا اگه بعدا دچار مشکلی شدیم بتونیم برگردیم سراغ اون نسخه درست. 

برای کامیت کردن نیاز هست که یه فایل یا چندین فایل رو توی استیج قرار داده باشید. همونطور که می‌دونید ما یه فایل simple.txt رو توی قسمت استیج قرار دادیم بنابراین حالا می‌تونیم اون رو کامیت بکنید. برای اینکار دستور git commit رو به صورت زیر استفاده می‌کنیم:

آرگومان -m به این معناست که همراه با کامیت یه پیغام رو هم بزار که ببینم کامیت من راجع به چیه. مثلا توی کد بالا پیغام رو گذاشتم: کامیت اولیه یا Initial Commit.

۷. گیت‌هاب

همونطور که گفتم، گیت یه سرویس متمرکز نیستش. یعنی اینکه هر کسی میتونه یه گیت رو دانلود کنه و روی محیط لوکال خودش و یا سرورش پیاده‌سازی کنه. یه عیب اینکه شما به صورت لوکال از گیت استفاده کنید اینه که نمیتونید اون رو با بقیه به اشتراک بذارید. برای اینکه بتونید گیت رو با توسعه دهندگان دیگه‌ای به اشتراک بذارید خیلی ساده کافیه که از یه سیستم کنترل نسخه آنلاین مثل گیت‌هاب یا گیت‌لب و… استفاده کنید. ما برای اینکار به یه دسترسی ریموت یا از راه دور نیاز داریم. پس باید یه مخزنی روی گیت‌هاب داشته باشیم و مخزن خودمون رو در حالت لوکال روی اون مخزن قرار بدیم. 

۷-۱: ثبت نام و ساخت مخزن در گیت‌هاب

اولین کاری که باید بکنید اینه که توی گیت‌هاب ثبت نام بکنید و بعدش یه مخزن درست کنید. برای اینکار کافیه وارد این آدرس بشید و فیلدهای مربوط به مخزن رو پر کنید و در نهایت Create repository رو بزنید. بعد از اینکار وارد آدرس مخزن‌تون بشید. مثلا مخزن من توی این آدرس هستش.

۷-۲: ارتباط با گیت‌هاب

حالا نیازه که آدرس .git مخزن‌تون رو بردارید و توی ترمینال براساس کد زیر به مخزن متصل بشید: 

origin یک نام برای این ارتباط ریموت من با گیت هستش. می‌تونه هر چیز دیگه‌ای باشه اما اینو معمولا میزارند.

حالا که من یه ارتباط درست کردم و الان وقت این شده که گیت لوکال‌م رو بفرستم روی گیت‌هاب. برای اینکار از دستور push به صورت زیر استفاده می‌کنم.

گفتم که برنچ مستر رو به صورت لوکال بفرست روی ارتباط ریموتی که با نام origin ساختم. با اجرای این دستور از شما مشخصات احرازهویت گیت‌هاب رو میپرسه که باید اونا رو به درستی وارد کنید.

اگه با مشکلی برخوردید می‌تونید از آرگومان -f یعنی force برای push کردن استفاده کنید که به صورت زیر این کار انجام شدنیه:

۷-۳: کلون کردن پروژه

برای دریافت محتویات داخل یک ریپازیتوری توی گیت‌هاب کافیه از دستور clone استفاده کنید:

حالا اگه من توی این مخزن گیت یه بروزرسانی ایجاد کردم. مثلا یه فایل جدیدی رو اضافه کردم، دیگه نمی‌خواد از اول بیایید کل پروژه رو کلون بکنید. می‌تونید با استفاده از دستور pull فایل‌های جدید آپدیت شده رو بیارید تو مخزن محلی‌تون:

در مطلب بعدی از این سری دو قسمتی می‌خوام یه ذره راجع به نکات پیشرفته‌تر صحبت بکنم و چیزهای عجیب و غریب‌تری رو بگم 😅🤓😉

دانشگاه یا خودآموز ؟!

این ایده همیشه بوده که من به یه دانشگاه رفتنی نیاز دارم یا نه! خب فارغ از اینکه خیلی‌ها توی ایران مخصوصا به این خاطر میرن سراغ دانشگاه که والدین‌شون بهشون افتخار بکنند و بعضی وقتا از زیر کار در برند و… اما این بحث رو به صورت کلی‌تر و جهانی‌تری در نظر می‌گیرم. بحث من از دانشگاه، یه استانداره، منظورم از دانشگاه سراسری و آزاد و هاروارد نیست! یه تعریف کلی ازش رو در نظر می‌گیریم که شما می‌رید اونجا، یه سری درس هستش، یه سری استاد دارید که می‌رید سر کلاساشون، درس رو می‌خونید یه امتحانی میدید و همین! No More :))

مردی با یک کتاب و یک ایده!

حالا با این دید سوالی که پیش میاد اینه که واقعا نیاز دارم که به دانشگاه برم یا نه، خودم می‌تونم خیلی چیزهای بیشتر و بهتری از دانشگاه رو توی خلوت خودم یاد بگیرم. حالا که اینترنت هم هست این موضوع خیلی منطقی‌تره!

اولین فاکتوری که باید در نظر بگیریم اینه که رشته شما و یا اساسا اون فیلدی که می‌خواید توش کار بکنید شرایط خودآموزی رو داره یا نه؟ مثلا شما نمی‌تونید به یه دکتر مغز و اعصاب خودآموخته تبدیل بشید. مگه اینکه نابغه‌ای باشید که یه قانون جدید رو بنیادگذاری می‌کنه و … . مثلا اگه آلبرت آینشتاین باشید حتی اگه درس هم نخونده باشید ولی قانون نسبیت رو کشف کرده باشید، کیه که بگه نمی‌تونید توی دانشگاه درس بدید؟ ولی خب ما شرایط رو اینطوری در نظر می‌گیریم که شما می‌خواید یه جراح مغز و اعصاب بشید. برای اینکار اولا که شما ابزار لازم برای خودآموزی رو ممکنه در اختیار نداشته باشید. یه آزمایشگاه و دم و دستکی می‌خواد دیگه، از طرفی هم شما اگه بخواید علم‌تون رو در این زمینه ثابت کنید، راه‌حل‌های بسیار محدودی دارید. به همین خاطر هیچوقت یه بیمارستان نمیاد با شما قرارداد ببنده چون مدرکی ندارید و تجربه عملی هم یه خورده سخته! در نتیجه تنها راهکاری که دارید در شرایط معمول اینه که سراغ دانشگاه برید.

اما برنامه‌نویسی رو در نظر بگیرید. برنامه‌نویسی به یه کامپیوتر نیاز داره ولاغیر! شما توی دنیای مهندسی و برنامه‌نویسی کمتر براساس مدرک‌تون قضاوت میشید، مهمترین چیزی که از شما انتظار دارن توانایی در ایجاد و ساختنه. به همین خاطر برنامه‌نویسی جزو رشته‌هایی هستش که به خوبی با شرایط خودآموزی سازگاری داره و می‌تونه باهاش کنار بیاد.

فاکتور دومی که نیازه تا راجع بهش صحبت کنیم، نوع شخصیتی شماست. ببینید خیلی ساده بهتون بگم، خودآموزی معمولا محیطی خشک و متمایل به تنهایی داره، البته قرار نیست که حتما اینطوری باشه ولی دیفالت تقریبا اینطوریه ولی از طرفی دانشگاه محیطی پر از آدم‌های هم‌سن و تقریبا هم شکل شما توشه، به همین خاطر فارغ از محیط آموزشی شما یه سری بازی و شوخی و سرگرمی دارید که انجام بدید! پس شخصیت‌تون اگه با اینکه ساعت‌ها توی یه اتاق بشینید و روی یه چیزی به صورت جدی کار بکنید سازگاری داره، خودآموزی می‌تونه انتخاب مناسبی برای شما باشه. معمولا افرادی که با شرایط خودآموزی پیش میرند، خیلی جدی‌تر قضایا رو دنبال می‌کنند.

نیاز به مشاور فاکتور سومیه که می‌خوام راجع بهش صحبت کنم. شما توی دانشگاه علاوه بر اینکه دوست های مختلفی دارید، مربی و مدرس زیادی هم دارید که هر کدوم این‌ها می‌تونند به شما در انتخاب مسیر و راهنمایی کمک بکنند. اما در شرایط خودآموز تنها خودتون هستید که به خودتون منابع معرفی میکنه. البته از حق نگذریم، هیچکس به اندازه اینترنت نمی‌تونه به آدم‌ها کمک بکنه! پس چندان نیازی به کسی نداریم تا حدی. اما اساتید می‌تونن افراد بسیار خوبی برای انگیزه دادن به شما هم باشند، توی دنیای خودآموزی شما کسی رو ندارید که بهتون انگیزه بده، حداقل شما توی دانشگاه از یه چیزی به اسم نمره و اینجور چیزها می‌ترسید اما توی دنیای خودآموزی وقتی صبح بیدار می‌شید تنها کسی که از رخت‌خواب باید بیدارتون بکنه و صبحونه به حلق‌تون بریزه خودتونید ولاغیر :))

سازگاری با آزادی فردی فاکتور چهارم! دانشگاه آزادی زمانی شما رو تحت شعاع قرار میده. شما باید از ۸ صبح مثلا تا ۲ بعد از ظهر رو به دانشگاه تخصیص بدید. خب این موضوع ممکنه برای شما خوشایند نباشه. برای مثال من کسی هستم که بیشتر دوست دارم فرایند یادگیری‌م از ساعت ۰۰ بامداد تا ۶ صبح باشه و بعدش کلا بخوابم. برای من دانشگاه محیط مناسبی نخواهد بود چون آزادی عملی‌م رو می‌گیره، از طرفی خودآموزی به شما آزادی کامل رو میده. هر موقع دوست داشته باشید یاد می‌گیرید، تمرین می‌کنید و… .

اضافی ۱: یه حرفی هست که بیشتر وقتا می‌زنم: افرادی که از دانشگاه فارغ التحصیل میشند به کارمندان افرادی تبدیل میشند که یه زمانی به صورت خودآموز یه کاری رو یاد گرفتند و الان صاحب یه شرکتند. (البته این قضیه همیشه درست نیست ولی خب معمولا دانشگاه شما رو محدود و متکی پرورش میده، این در حالیه که اگه توی دنیای خودآموزی موفق بشید خیلی با اعتماد به نفس و مستقل بار می‌آید.)

اضافی ۲: یه اشکالی که من معمولا از دانشگاه‌ها(مخصوصا در کشورهای توسعه نیافته) می‌گیرم اینه که دانشگاه‌ها برای بعضی از رشته‌های پویا و در حال تغییر واقعا مکان مناسبی نیستند. بعضی از رشته‌ها مدام در حال تغییرند و این در حالیه که سرفصل‌های آموزشی هر چند سال یک بار تغییر می‌کنند. 

 

نویسنده: ارسطو عباسی

ویدیوکست شماره ۴: آموزش مقدمات پایتون 🐍 (۳) – توابع و ماژول‌ها

توی ویدیوکست شماره ۴ سری می‌زنیم به توابع و ماژول‌های دنیای پایتون و خیلی سریع در موردشون صحبت می‌کنیم. توی این ویدیو لیست مطالب زیر رو بررسی می‌کنیم:

  • آشنایی با مفهوم توابع
  • ورودی توابع
  • مفهوم return کردن
  • مفهوم ماژول‌ها
  • کار با سه نوع مختلف ماژول‌ها
  • پیاده‌سازی یک ماژول به صورت محلی
  • کار با ماژول‌ استاندارد random
مشاهده ویدیوکست 🎦

درک ساده دکوراتورها در پایتون

درک ساده دکوراتورها در پایتون

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

خب ایده اینه که بتونیم از طریق یک تابع، کارکرد یک تابع دیگه رو تغییر بدیم و یا بهتر بگیم که یه تابع رو گسترش بدیم. 

تصور کنید تابع ۱ رو دارید و تابع ۲ … حالا می‌خواید از طریق تابع ۱، کاری بکنید که تابع ۲ کارهای بیشتری رو انجام بده. 

بیایید یه مثال ساده رو در نظر بگیریم:

تصور کنید من یه تابع دارم به اسم style که هر متنی که واردش بشه رو به صورتی زیبا برمی‌گردونه!

تصور کنید یه تابع دیگه هم دارم که متن رو چاپ می‌کنه. حالا می‌خوام بجای اینکه پروسه چاپ متن ساده انجام بشه، از قدرت تابع style برای این کار استفاده بکنم. 

پس نیاز است که تابع style به عنوان ورودی یک تابع دیگر رو بگیره:

حالا تابع دوممون رو که فقط قراره یه متن ساده رو چاپ بکنه تعریف می‌کنیم:

حالا نیاز هست که تابع دوم رو به عنوان آرگومان برای تابع اولمون تعیین کنیم:

قضیه علامت @ چیه؟

این شد یه چیزی! پایتون یه میانبر ساده برامون ایجاد کرده که از طریق اون می‌تونیم بدون فراخوانی قسمت آخر، دکوراتور رو اعمال بکنیم. برای اینکار کافیه قبل از تعریف تابع دومی @ را همراه با نام تابع اولی بنویسید:

 

حالا یه مشکل پیش میاد. تابع اصلی که نوشتیم یا همون style یه بخش مهمی نداره! قسمت return … اینطوری یه تایپ ارور می‌گیریم چرا که تابع مقدار NoneType رو برمی‌گردونه! برای این کار می‌تونیم یه تابع دیگه داشته باشیم که اون تابع کارهای استایل دهی رو انجام می‌ده و در نهایت تابع style همون تابع رو برمی‌گردونه. برای این کار به تعریف تابع style برمی گردیم و مثل زیر ویرایشش می‌کنیم:

حالا کد رو اجرا کنید متوجه می‌شید که همه چیز بدون مشکل اجرا میشه!

برای مطالعه بیشتر همراه با مثال‌های دیگه می‌تونید این لینک رو بخونید.