سرفصلها
درس صفر (فصل 2): این فصل در یک نگاه
– در پایان این آموزش چه خواهیم داشت؟
– پیشنیاز این آموزش
– مخاطب این آموزش
– نگاهی به آنچه گفته شد
– منبع آموزش
درس هفدهم: ساخت مدل Image برای تصاویر کاربر
– ساخت اپ images و افزون به INSTALLED_APPS پروژه جنگو
– ساخت مدل Image در ماژول models.py اپ mages
– ایجاد ارتباط یک به چند در پایگاه داده بین تصاویر و کاربران
– ایجاد ارتباط چند به چند در پایگاه داده بین پسندها و کاربران
– مفهوم ارتباط ManyToMany و تابع ManyToManyField جنگو
– مفهوم related_name و مفهوم db_index در جنگو
– بازنویسی یا Override متد save از کلاس مدل
– ایجاد خودکار slug با متد slugify ماژول text در djnago
– مهاجرت پایگاه داده و بررسی جدول های ایجاد شده
درس هجدهم: ایجاد فرم اشتراک گذاری تصویر
– ایجاد فرم با ارث بردن از ModelForm
– آشنایی با اتریبیوت widgets در کلاس Meta
– آشنایی با ویژگی forms.HiddenInput
– ایجاد متد clean_url برای اعتبارسنجی مضاعف URL
– استخراج پسوند عکس با تجزیه استرینگ با rsplit پایتون
– تفاوت rsplit(“.”, 1) با rsplit(“.”) دو یا یک پارامتری
– متد save از کلاس ModelForm جنگو
– متد urlopen از request ماژول urllib پایتون
– ایجاد فایل در پایتون با ContentFile
– الگوی ذخیره موقت آبجکت با Commit=False
درس نوزدهم: ساخت ویو و تمپلت فرم بارگذاری تصویر
– گپ کوتاه پیرامون ماهیت آموزش پروژهمحور برای رفع خستگی
– ساخت ماژول urls.py اپ images
– نگاشت url فرم ساخت تصویر با متد path
– ساخت ویو با دکوریتور login_required
– پارامتر data در متدهای GET و POST فرم
– دریافت کاربر فرم از request ارسالی url
– نصب پکیج certifi برای دانلود عکس های https
– اجرا و آزمایش پروژه و افزودن تصاویر به پنل مدیر
درس بیستم: جی کوئری چیست؟
– رابطه html و css و javascript در طراحی صفحات وب
– مفهوم و کار jQuery چیست؟
– مثالی از کاربرد جی کوئری در کار با المان ها
– بررسی مستندات وب در مورد جی کوئری
– شروع کار با جی کوئری و اصول خودآموزی برای ادامه راه
درس بیست و یکم: بوکمارکلت چیست؟
– بوکمارکلت یا Bookmarklet چیست
– آشنایی با شبکه اجتماعی pinterest
– آشنایی با عملکرد بوکمارکلت یا اکستنشن پینترست
– لینک بوکمارکلت به یک url اینترنتی
– لینک بوکمارکلت به یک فایل جاوا اسکریپیت در تمپلت ها
– درک فرق بوکمارکلت و اکستنشن یا bookmarklet vs. extension
درس بیست و دوم: کدنویسی بوکمارکلت شبیه pinterest
– ایجاد تابع anonymous در جاوا اسکریپیت
– مفهوم متغیر و تابع on demand در جاوا اسکریپت
– استفاده از تابع createElement برای افزودن یک تگ
– مفهوم document و window در جاوا اسکریپت
– فراخوانی jQuery برای استفاده از متدها و سکتورهای آن
– مفهوم selector در جی کوئری و کاربرد آن
– افزودن css و html به ساختار DOM با استفاده از jQuery
– افزودن رویداد کلیک بسته شدن پنجره نمایش تصاویر
– افزودن حلقه انتخاب عکس ها در یک صفحه با متد each در جی کوئری
– افزودن تابع کلیک برای انتخاب عکس و انتقال آن به فرم شبکه اجتماعی
– اجرای پروژه و آزمایش بوکمارکلت
درس بیست و سوم: صفحه نمایش عکس
– مروری به آنچه تا اینجا انجام دادیم
– ایجاد تابع get_absolute_url در کلاس Image
– متد reverse برای ساخت پیوند یکتا در جنگو
– ایجاد path با دو پارامتر id و slug یک عکس
– ایجاد view برای نگاشت url به یک تمپلت
– یادآوری کار متد get_object_or_404 در جنگو
– ایجاد تمپلت detail.html برای نمایش جزئیات عکس
– کار بلاک with در جنگو با یک مثال دیگر
– نمایش تعداد پسند یا like یک عکس
– نمایش کاربرانی که یک عکس را پسند کردهاند
درس بیست و چهارم: نمایش بند انگشتی عکس
– تصویر بندانگشتی یا Thumbnail چیست؟
– چرا از تصویر بند انگشتی استفاده کنیم؟
– معرفی اپ easy-thumbnail در جنگو
– نصب و راه اندازی easy-thumbnail
– نمایش بند انگشتی عکس با تمپلت تگ thumbnail
– تنظیم اندازه کوچک کردن ، امکان برش و کیفیت تصویر بند انگشتی
– بررسی مستندات و امکانات دیگر easy-thumbnail
درس بیست و پنجم: AJAX چیست ؟
– ایجکس AJAX چیست ؟
– معنی Asynchronous JavaScript and XML
– مفهوم Asynchronous و تفاوت آن با Synchronous در برنامه نویسی
– مثال هایی از ایجکس در وب اپ ها
– تاریخچه AJAX از مایکروسافت تا گوگل
– تگ IFRAME در IE3
– بررسی یک نمونه کد ایجکسی
– آبجکت XMLHttpRequest چیست ؟
– بررسی شی XMLHttpRequest و متدهای آن
– متد send و open در ایجکس
– ویژگی های onreadystatechange و readystate و status
– مزایا و معایب AJAX و جمع بندی
درس بیست و ششم: پسندیدن like عکس – url و views
– توضیح الگوریتم پسندیدن به صورت کلی
– دکوریتور require_post از decorators.http جنگو
– کاربرد دکوریتور require_get و require_http_methods
– پیاده سازی منطق پسندیدن و نپسندیدن در ویو
– خطای 405 یا HttpResponseNotAllowed
– متدهای add و remove منیجر فیلدهای ManyToMany
– کلاس JsonResponse از http جنگو برای ارسال JSON
– فراخوانی جی کوئری در base.html
– کاربرد متد $(document).ready از جی کوئری
– مفهوم DOM یا Document Object Model
– ایجاد تمپلت تگ domready در callback متد ready
درس بیست و هفتم: حمله CSRF چیست ؟
– معنی CSRF چیست ؟
– تعریف CSRF یا Cross-site request forgery
– مثال هایی از حمله CSRF
– استفاده از منابع اصلی مانند ویکی پدیا و مقالههای مرجع
– روش های جلوگیری از CSRF
– مروری به مفهوم Session ID در قالب کوکی
– مروری به مفهوم Cookie . کوکی چیست و چه کاربردی دارد ؟
– انواع روش های Anti-CSRF Token
– روش الگوی توکن همگام یا Synchronizer Token Pattern
– روش الگوی تقدیم دوگانه کوکی یا Double-submit cookie Pattern
درس بیست و هشتم: امنیت جنگو در برابر CSRF
– روش های مقابله با CSRF در جنگو
– روش پیش فرض جنگو برای CSRF Token
– مدیریت CSRF در فرم ها و متد POST
– نحوه کار تمپلت تگ csrf_token
– روش مدیریت CSRF در درخواست AJAX
– مدیریت و کار با کوکی در جنگو
– متد set_cookie از آبجکت HttpResponse
– مدیریت و کار با سشن در جنگو
– محدودیت کار با کوکی از نظر امنیت و حجم داده
– ارتباط session_data و sesion_id
– منابع بیشتر برای حفظ امنیت جنگو
– خواندن کوکی مرورگر در جنگو با کتابخانه js-cookie
– تابع آزمایش متدهای safe در درخواست http
– تابع ajaxSetup در جی کوئری برای تنظیمات ایجکس
– تنظیم هدر ajax request با استفاده از jQuery
– تنظیم X-CSRFToken در ajax header
درس بیست و نهم: ارسال درخواست AJAX در جی کوئری
– یادآوری صفحه عکس ها
– استفاده از span برای اشاره عدد داخل متن دکمه
– تعریف تگ a به عنوان دکمه پسند
– کاربرد ویژگی data در تگ a
– تعریف داده های POST به صورت داده های تگ a
– پیاده سازی درخواست ایجکس
– مستندات کار با AJAX در Jquery
– متد Post جی کوئری
– دریافت تعداد و متن دکمه پسند
– به روزرسانی تعداد و متن like / unlike در جواب ایجکس
– اجرای پروژه و بررسی نتیجه
درس سیام: اعتبارسنجی AJAX با دکوریتور
– آشنایی با تابع is_ajax و پارامتر HTTP_X_REQUESTED_WITH
– پرتاب خطای HttpResponseBadRequest برای request نامعتبر
– تعریف پکیج common و کاربرد فایل __init__ در پایتون
– تعریف ماژول decorators برای دکوریتورهای عمومی جنگو
– مفهوم decorator و کاربرد دکوریتور در پایتون
– تعریف دکوریتور ajax_reuired و تابع wrap داخل آن
– تعریف دکوریتور با پارامترهای نامعین و امکان return
– پارامتر __doc__ و پارامتر __name__ تابع ها در پایتون
– آزمایش پروژه و ارزیابی نتیجه در ترمینال
درس سی و یکم: صفحه بندی عکسها با AJAX مانند اینستاگرام – بخش اول
– صفحه بندی اینستاگرام چطور کار میکند
– یادآوری معنی pagination یا صفحه بندی
– افزودن تعدادی عکس فرضی برای صفحه بندی
– نوشتن ویو در اپ عکس ها با login_required
– کلاس Paginator در جنگو
– معنی خطای EmptyPage در صفحه بندی
– معنی خطای PageNotAnInteger در صفحه بندی
– واکشی تصاویر و صفحه بندی هشت تایی
– پردازش خطاهای ممکن و انتقال فهرست عکس ها
– رندر کردن تمپلت در دو درخواست ایجکس و درخواست استاندارد
درس سی و دوم: صفحه بندی عکس با AJAX مانند اینستاگرام – بخش دوم
– افزودن گزینه آلبوم عکس ها به منو
– طراحی صفحه نمایش فهرست عکس ها
– کدنویسی جاوا اسکریپت و جی گوئری رویداد اسکرول صفحه
– آشنایی با رویداد scroll از window در جاوااسکریپت
– آشنایی با مفهوم scrollTop در جی کوئری
– فرق document و window در جاوااسکریپت
– استفاده از تابع get در جی کوئری برای درخواست ایجکس
– استفاده از تمپلت thumbnail برای نمایش بند انگشتی عکس ها
درس سی و سوم: جمع بندی فصل دوم
– مروری به آنچه در این فصل یاد گرفتیم
– آنچه در فصل آینده خواهیم گفت
– نکتهها و طوفان فکری پایانی
abbas –
سلام مجدد و ممنون از پاسخگوییتون. این کار رو انجام دادم و با پیغام زیر مواجه شدم. یه سرچ هم کردم اما چیزی دستگیرم نشد.
Loading failed for the with source “https://127.0.0.1:8000/static/js/bookmarklet.js?r=26631979718460764000”.
مصطفی آصفی –
سلام مجدد. ببینید این خطا داره می گه که شما تو مسیردهی فایل تو پروژه یک جایی دارید اشتباه می کنید. تنها توصیهای که میتونم بکنم اینه که مراحل رو مو به مو دقت کنید ببینید کجا یک اسلش اضافی یا یک کلمه اضافی یا کم زدید.
abbas –
سلام آقای آصفی و ممنون از آموزش های خوبتون. من در این پروژه برای اجرا بوکمارکلت به مشکل خوردم. از گیت هابتون سورس کد رو هم دانلود و اجرا کردم اما بوکمارکلت اجرا نمیشه. به نظر نمیتونه جی کوئری رو لود کنه. روی دو تا لپ تاپ و چند مرورگر مختلف هم تست کردم و نشد. ضمنا جاواسکریپت مرورگر هم فعاله. ممنون میشم راهنمایی کنید.
مصطفی آصفی –
سلام به شما. سلامت باشید. لطفا روی مرورگر خودتون راست کلیک کنید و گزینه inspect element رو انتخاب کنید. در پنجره باز شده وارد زبانه console بشید و خطایی که حین لود دریافت می کنید رو اینجا بگذارید که بتونیم هم فکری کنیم.
امین اجاقی (خریدار محصول) –
با سلام خدمت استاد بزرگ و دوست داشتنی مصطفی آصفی عزیز استاد گرامی یک مسئله که اکنون یافته ام این است که app thumbnail برای من صحیح کار نمی کند اگر می شود علت هایی که ممکن است کار نکند را بیان بدارید من نیز در حال جستجو می باشم با تشکر از محبت های شما استاد بزرگ و گرامی برکت خدا بر شما و خانواده محترمتان .
مصطفی آصفی –
سلام مجدد. احتمالا یه جای کار اشتباه می کنید. لطفا مراحل رو با دقت طی کنید و اگه به ایرادی برخوردید، به صورت دقیق نارسایی رو بفرمایید که هم فکری کنیم.
امین اجاقی (خریدار محصول) –
البته استاد اکنون چک کردم دیدم این هم در یک مورد از عکس های همرویش خطا می دهد و همه چی کامل و نیکو گشته با تشکر بسیار از محبت های بسیار نیکوی شما برکت خدا بر شما و خانواده محترمتان .
مصطفی آصفی –
سلام جناب اجاقی عزیز. من داشتم پیام های پایین رو تحلیل می کردم که دیدم خوشبختانه مشکل حل شده. ممنون که اطلاع دادین.
امین اجاقی (خریدار محصول) –
استاد عزیزم از فایل datail.html که خودتان ضمیمه کرده بودید استفاده کردم و درست شد ولی یک مسئله که هست در این مورد همین که بعضی از لینگ ها مثلا شاید دلیلش فارسی بودن است مانن عکس های همرویش با خطا می دهد . با تشکر از محبت های بسیار شما استاد عزیز برکت خدا بر شما و خانواده محترمتان .
امین اجاقی (خریدار محصول) –
https://files.fm/f/67z42b729 https://files.fm/f/qnp8ye9pd https://files.fm/f/dfwa9j6n3
امین اجاقی (خریدار محصول) –
با سلام و درود خدمت استاد بزرگ و دوست داشتنی مصطفی آصفی عزیز استاد این خطا را ببینید از زمان ایجاد get absolute url این خطا وارد شده است یک بار فکر کردم بخاطر متن های ایرانی نمی داند تیتر را با آن متود هایی که با slugify ایجاد کردیم تیتر را بخواند ولی پس کامل کردن درس دکمه ی لایک دوباره این خطا آمد زیرا در سایت yahoo ,کس ها را پست می کردم ولی پس تکمیل فرایند لایک دوباره همین خطا میدهد این در حالی است که تمام مسیر را مانند شما انجام داده ام . شما نیز چک کنید با تشکر از محبت های شما استاد عزیز برکت خدا بر شما و خانواده محترمتان .
امین اجاقی (خریدار محصول) –
سلام و درود بر استاد بزرگ و گرامی مصطفی آصفی عزیز و دوست داشتنی استاد عزیز در هیمن لحظه که این پیام را ارسال می کنم قسمت بوکمارکلت را به پایان رسانده و شاد از این که چنین استاد نیکویی دارم که اینچنین توضیحات را کامل ارائه می دهد و مباحث را اینچنین قابل فهم می نماید استاد مدت بسیاری در پی یاد گیری جاوا اسکریپت بودم. اکنون مبنای کار با جاوا اسکریپت را یاد گرفتم. به این صورت که جاوا اسکریپت بر روی صفحه ی مرورگر و اطلاعات مرتبط درونی آن عملیات را اجرا می نماید و ما می توانیم با استفاده از آیدی ها و تگ ها در جی کوئری موضوعات را فراخوانی نماییم و عملیات را بر روی آنها اجرا نماییم استاد عزیز شما در آسایش باشید که ما با یاری خدا آموزش های کامل شما را فرا می گیریم و کار شما بسیار نیکو می باشد برکت خدا بر شما و خانواده محترمتان .
مصطفی آصفی –
سلام جناب اجاقی عزیز. جای خوشحالی داره که آموزش رو قابل درک و مفید دیدید. انشالله که بتونه تو کارتون مفید باشه.
ضمنا خیلی ممنونم از این که برای ابراز محبت و لطفتون اینقدر وقت می گذارید. شرمنده می کنید.
امین اجاقی (خریدار محصول) –
با دورد و سلام فراوان بر استاد بزرگ و گرامی مصطفی آصفی عزیز و دوست داشتنی و سلام خدمت هم کلاسی عزیز mjavad.sabrjoo دوست عزیزم برنامه نویسی فرایندی است هوشمندانه که افرادی مانند ما که در این عرصه فعالیت می کنند باید افرادی فعال در امر جستجو باشند و اشتیاق بسیار برای آفرینش اثر های نیکو در برنامه نویسی داشته باشند و خویشتن را در ارتباط با هوش کامپیتر از لحاظ حسی به سوی احساس حسی منطقی یعنی محبت نیکوی خدا سوق دهند تا اندیشه ی ایشان به سوی نیکویی با نور خدا روشن گردد و فرایند عمکرد عملی جسمشان نسبت به هوششان در مسیری نیکو قرار گیرد و در این امر نیز شما می توانید با ارامش درونی و دیدی هوشمند به صورتی مشتاق خود آموزش ها را که دریافت می نمائید اقتدار خویش در انجام پروژه ها را به دست آورید و در تمام مسیر با جستجو در صبر(پیشوند نام خانوادگیتان) و آرامش مسائل برنامه نویسی را حل کنید و محصولاتی زیبا و نیکو بیآفرینید برکت خدا بر شما و خانواده محترمتان و آرزومندم تا خدا شما را از درون به این اشتیاق نیکو برای یافتن دانش سوق دهد تا خویشتن را یافته و با آگاهی از قدرت درونی خودتان مسیر زندگی را با اقتدار الهی طی کنید و موفقیت خویش را با جمع آدم ها که همه یک خانواده نزد خدای متعال می باشیم تقسیم کنید و از این شاد باشید.
استاد عزیز در مسیر پروژه به فصل دوم رسیدم و مراحل آپلود عکس را تا آخر درس 19 به پایان رساندم مسیر طی کرده ام و همه ی موارد خوب عمل می نماید ولی فایل عکس در ادمین سایت و پایگاه داده موجود نمی باشد البته همیشه من ابتدا که با مسئله ای روبرو می شوم سریعا نزد شما که استاد من می باشید می آیم و باز هم جستجو می کنم و بسیاری مواقع آن را یافت می کنم ولی ابتدا با شما موضوعات را در میان می گذارم تا راهکار های نیکوی شما همیشه در مسیر کارم باشد با تشکر از شما استاد بزرگ و دوست داشتنی برکت خدا بر شما و خانواده محترمتان .
mjavad.sabrjoo (خریدار محصول) –
ضمن عرض سلام و خسته نباشید
با تمام احترامی که برای شما و زحمات شا قائلم و آموزش های قبلی که دیدم رو عالی می دونستم اما
نحوه توضیحاتتون در این آموزش بشدت ضعیفه یه جاهایی احساس می کنم خودتونم متوجه توضیحاتتون نمی شدین و صرفا کپی پیست کردن کد و رو خوانی کد! امیدوارم برای دوره های بعدی قبل از توضیح خودتون روی کد مسلط بشید.
ممنونم از شما
مصطفی آصفی –
سلام و ممنون از شما که برای ارسال دیدگاهتون وقت گذاشتید.
ببینید روش آموزش بنده در این دوره برای کسانی که با جاوا اسکریپت آشنایی ندارند، شیرجه به جاوااسکریپت هست و نه آموزش عمیق اون.
بنده در این فصل بنا نداشتم که شما رو از پایه با جاوا اسکریپت آشنا کنم. اینجا فقط به اقتضای نیاز پروژه جنگوی خودمون فرانت اند رو کامل می کنیم.
البته هیچ خطی نیست که توضیح نداده باشم. اما طبیعتاً این دوره جای یک آموزش عمیق جاوا اسکریپت رو برای شما نمی گیره. اگه موقع شنیدن توضیحات اذیت شدید و حس می کنید باید برید و منابع دیگه ای رو برای درک بهتر فرانت انپ جستجو کنید پس دوره موفق بوده.
amir ayat (خریدار محصول) –
سلام و درود استاد عزیز ممنون از راهنمایی عالی شما، کاملا متوجه شدم من به اتریبیوت related_name دقت نکرده بودم. پیرو توضیحات شما راجبش سرچ کردم. مطابق گفته شما برای reverse relation استفاده میشه و اگه تعریف نشه به صورت دیفالت با _set توی جنگو تعیین شده. برای مثال توی این پروژه میشه request.user.image_set.count در مجموع یک دنیا سپاس از آموزش بینظیر و پشتیبانی خوبتون
مصطفی آصفی –
سلام به شما. ممنون از لطف شما و این که اطلاع دادید.
خیلی خوبه که رفتید و بیشتر هم یاد گرفتید و اینجا هم به بنده و دیگر دوستانتون ارائه کردید. ممنونم
amir ayat (خریدار محصول) –
سلام استاد وقت بخیر
قسمت 22 آموزش بخشی که مربوط به گزارش تعداد کل تصاویر کاربر توی دشبورد هست (total_images_created) چطور میشه فهمید که request.user دارای آبجکت images_created هست و سینتکس مربوط بهش این شکلی باید نوشته بشه؟ به طور کلی اتریبوت های request.user چی هستن و چطور باید بهشون رسید؟
مصطفی آصفی –
سلام وقت شما هم بخیر.
ببینید request.user رو وقتی میزنیم در واقع کاربری که درخواست url رو زده بیرون میکشیم.
ویژگی images_created از ارتباط بین مدل image و user به دست میاد. این مخصوص پروژه شماست و یه ویژگی همیشگی برای user در همه پروژه ها نیست. شما دو مدل رو به هم مرتبط کردین با کلید خارجی.
به مدل Image برید و related_name رو تو ارتباطش با user ببینید.
در واقع اونجا ما تعریف کردیم که هر عکس متعلق به یک کاربر هست و به جنگو گفتیم که اگه خواستیم از سمت کاربر بیایم و روی جدول image کوئری بزنیم و همه سطرهایی که به این کاربر متصل شدن رو پیدا کنیم (همه عکسهاش) در این صورت این ویژگی رو برای کاربر صدا میکنیم.
amir ayat (خریدار محصول) –
سلام استاد فصل سوم و آموزش سایت فروشگاهی چه زمانی در دسترس میشه؟
مصطفی آصفی –
سلام به شما. انشالله ظرف 7 تا 10 روز آینده اگه البته ضبط ها با وسواسی که من معمولا دارن به تکرارهای عجیب و غریب نرسن.
ابوالفضل حسن زاده (خریدار محصول) –
سلام استاد خسته نباشید.
استاد پیرامون جوابتون(جوابی که به دوستمون در کامنت پایین دادید) یه سوال دارم اینکه ادم تعصبی باشه رویه فریم روکی که داره باهاش کار میکنه ایراد داره مثلا من خودم اینجوریم از وردپرس و لاراول و asp.net اصلا خوشم نمیاد من یه رفیق داشتم اون Asp کار میکردو ویندوز ,من جنگو یادمیگرفتم رو لینوکس. یه روز نشستیم گفتیم اقا جنگو اینجوری خوبه asp اینجوری خوب نیست اون یه چیز دیگه میگفت خلاصه بحث مون بالاگرفت اخر گفتیم موسی به دین خود عیسی به دین خود. حالا نظر شما به عنوان فردی که دراین زمینه تخصص داره و دارای تجربه زیاد هستش ایا تعصب داشتن روی فریم ورک خواص اشتباه هست با نه؟
مصطفی آصفی –
سلام پسرم. شما هم خسته نباشی. واقعا تو زندگی نمیشه یه حکم قطعی داد. منم پایین نظر خودم رو به شما می گم ولی شاید همین نظر من هم درست نباشه.
یه بزرگی می گفت نشسته بودم و در باب حکمت و اخلاق بحث شدیدی با پدرم می کردم. اختلاف نظر داشتیم. هی پدرم می گفت که فلان طور نیست. من رگ گردنم بیرون می زد، فریاد می زدم که نه فلان طور هست و … .
برادرم من رو کشید کنار گفت پسر جان حکمت و اخلاق قراره به درد زندگی و تعامل ما با آدمها بخوره. اگه تو نفهمیدی که موقع بحث و تبادل نظر با پدرت احترامش رو نگه داری و مودبانه نظر مخالفت رو بگی، پس چیزی از اخلاق نفهمیدی.
حالا در مورد ابزارها هم همین طوره. جنگو و ASP و … قراره که کار رو راه بندازن. حالا برای این که برنامه نویس بتونه کارش رو راه بندازه با هر کدوم که به ساختار ذهنیش می خوره و خوشش میاد و کارش رو هم راه میندازه شروع می کنه به کار. این به این معنی نیست که اونی که ما انتخاب می کنیم حتما برای همه هم خوشاینده و حتما از انتخاب های دیگران هم بهتره.
همیشه یه پژوهشگر با ذهن باز باش. به خودت بگو خب من با جنگو ارتباط بهتری می گیرم اما این به این معنی نیست که انتخاب من لزوما از همه بهتره. همیشه دریچه قلبت رو برای شنیدن نظر دیگران باز نگهدار. شاید (شاید) یه روز یه نفر یه نظری داد، یه امکانی رو از فریمورکی گفت که تو توی اون لحظه دیدی آها، حالا دیگه ظاهرا باید برم سراغ ابزار دیگه چون فلان امکان رو برام مهیا می کنه.
ca company –
سلام چرا سایت همرویش رو با استفاده از جنگو و پایتون طراحی نکردید؟ چرا وردپرسیه ؟
مصطفی آصفی –
سلام به شما. سوال خوبی پرسیدین ممنون. در توسعه حرفه ای همیشه باید آسان ترین راه رو برای شروع پیدا کرد.
ما یک وبسایت فروشگاهی ساده می خواستیم که بعدها گسترش بدیم.
وقتی تصمیم به تولد هم رویش گرفتیم، یک وبسایت فروشگاهی ساده می خواستیم که بعدها گسترش بدیم.
از یک طرف در شرکت برنامه نویسی خودمون، توسعه دهنده وردپرس حرفه ای داشتیم و از طرف دیگه قالب های فروشگاهی آماده بسیاری در وردپرس هست که به کمک اون ها شما می تونی به سرعت یک وبسایت فروشگاهی رو آماده کنی. خب نیازی به اختراع چرخ از نو نیست.
اما یک زمان شما نیاز به یک شبکه اجتماعی داری، نیاز به یک وبسایت مثل دیوار داری، نیاز به یک فروشگاه خاص داری. این ها در وردپرس یا نمیشه یا اگر بشه خیلی دشواره و سفارشی سازی و توسعه های بعدی هم سخت میشه. در چنین مواردی بهتره که از پایه کدنویسی کنی و چه چیزی بهتر از پایتون که بعدها می تونه با کتابخانه های خوب خودش بعدها وبسایت رو به هوش مصنوعی و داده کاوی مجهز کنه.
پینوشت: البته وبسایت وردپرسی هم رویش در حال حاضر خودش دیگه صرفا یک قالب آماده نیست. به لطف زحمات عزیزان واحد توسعه، یک پلتفرم کاملا حرفه ای شده که جا داره ازشون تشکر کنم.
Matin –
ممنون که سورس پورژه رو در گیت هاب قرار دادید و ما میتونیم با خوندن اون یاد بگیریم .. واقعا تشکر میکنم
مصطفی آصفی –
سلام به شما. جای خوشحالی داره که باعث پیشرفت شما شده.
و ممنون از شما که برای ابراز محبت و انرژی مثبت خودتون وقت گذاشتید.
موفق باشید.
رضا (خریدار محصول) –
سلامی دوباره خدمت استاد عزیز و دیگر دوستان
در ادامه ی جست و جوها برای خلاصی از جاوا اسکریپ و دوستان همیشه در صحنه جاوا اسکریپ به فریموورک JustPy برخوردم.که شاید توضیح در موردش بد نباشه و البته اضافه کنم چون چند زبانی حداقل برای من باعث پایین اومدن productivity(بهره وری) میشه.
JustPy یک چارچوب وب پایتون جدید است که نیازی به برنامه نویسی فرانت ندارد و قرار است جایگزینی برای جاوا اسکریپت برای ایجاد وب سایت های تعاملی باشد. این پروژه هنوز در مراحل اولیه توسعه قرار دارد ، با این وجود مستندات و آموزشهای گسترده ای را ارائه می دهد و همراه با پشتیبانی از Matplotlib (متپلات (به انگلیسی: Matplotlib) یک کتابخانه برای رسم نمودار است که در در زبان برنامهنویسی پایتون مورد استفاده قرار میگیرد.) و موارد دیگر است.
JustPy یک فریموورک cop (کامپننت محور(https://b2n.ir/j24026)) و oop (شی گرا) هستش و تفاوتی بین برنامه نویسی فرانت و بک قائل نمیشه -یعنی قراره همه چیز رو برای ما ساده تر کنه و از پیچیدگی ها کم کنه برای همین تمام کد ها در قسمت بک نوشته خواهد شد.
برای اطلاعات بیشتر میتونید به لینک زیر مراجعه کنید:
https://justpy.io/#/tutorial/getting_started
و در ضمن باز هم یادآوری میکنم من صرفا جهت کنجکاوی خودم این جست و جوها رو انجام میدم تا اطلاعات بیشتری کسب کنم و نمیدونم چقدر این روش ها اجرایی هستن و از طرفی معتقد هستم یک روزی کار های این چنینی تخصصی تر انجام خواهد شد، مخصوصا در فضای به اصطلاح شتر-گاو-پلنگ توسعه ی وب.
و در پایان سوالی هم داشتم:
من خیلی علاقه دارم “آموزش برنامه نویسی Kivy – توسعه کراس پلتفرم با پایتون (بسته جامع )” تهیه کنم و تا اونجایی که میدونم فضا در کیوی(back&front) تمام پایتونی هستش اما مطمئن نیستم.برای همین تردید دارم.ممنون میشم بنده رو راهنمایی بفرمایید.
مصطفی آصفی –
سلام به شما و خیلی ممنونم که وقت گذاشتید و این توضیحات سودمند رو برای بنده و دوستان دیگه نوشتید.
بنده که خیلی از خوندن مطلب و نگاه شما استفاده کردم. شاید روزی برسه که اصلا بنشینیم جلوی سیستم و با صحبت کردن با کامپیوتر سایتی رو طراحی کنیم.
در مورد کیوی دقت کنید که میشه تو همون اسکریپت پایتونی چیدمان ویجت ها رو نوشت؛ اما چون مطابق اصل تفکیک دغدغهها (Separation of Concerns) بهتره که فرانت اند و بک اند جدا باشن، توسعه دهندههای کیوی اومدن یک زبانی رو درست کردن شبیه css با فایل های با پسوند KV. که فرانت اند رو اونجا طراحی می کنیم. در اسکریپت پایتون که حکم بک اند رو داره اجزای فرانت اند رو صدا می زنیم.
چون فعلا کیوی استودیو برای طراحی فرانت اندهای KV هم آماده نشده، طراحی عملا با کدنویسی در این فایلها انجام میشه که کند هست. برای شما که روی این مطلب حساس هستید، شاید بهتر باشه از PyQt استفاده کنید. در پای کیوتی برای طراحی رابط میشه از استودیوی QT Designer استفاده کرد. البته در پای کیوتی خروجی گیری اندروید و آی او اس یکم مشکل داره و هنوز خوب جا نیفتاده.
رضا (خریدار محصول) –
سلام و خسته نباشید خدمت آقای آصفی
امیدوارم حالتون خوب باشه
فصل دو رو تهیه کردم و الان قسمت 22 هستم جدای از کیفیت خوب آموزش به نظرم خیلی خوب میشد که هرچه بیشتر تمرکزمون روی بک اند باشه و واقعا برای من خوش آیند نبودش که وقتم رو روی فرانت بگذارم و حتی بخوام به جاوا اسکریپت فکر کنم پس:
پیش خودم فکر کردم ای کاش اگه در برخی از جاها مجبور هستیم کمی هم فرانت کار کنیم چرا به زبان پایتون نباشه.
جدای از اینکه شاید ابزاری باشه که ما به زبان پایتون کد بزنیم و اون ابزار کدمون رو تبدیل به جاوا اسکریپ کنه، شاید چیزی باشه که به ما کمک کنه توی این زمینه
.پس تصمیم گرفتم کمی در موردش سرچ کنم و به نتایج جالب و مفیدی رسیدم.لینکش رو میذارم برای دوستان که اگر علاقه داشتن یک نگاهی بندازن.
https://anvil.works/blog/reasons-python-front-end-web-development
لینک ویدیوی راهنما
https://www.youtube.com/watch?v=6hHQKUeTL1U
البته نمیدونم تا چه میزان میتونه نیاز ما رو برآورده بکنه برای همین مطرح کردم تا نظرتون رو بدونم.
مصطفی آصفی –
سلام. شما هم خسته نباشید. من اول در مورد علت وجود مباحث جاوا اسکریپت در این بسته بگم و بعد به پیشنهاد خوب شما بپردازیم.
علت این که تو این آموزش ما به سراغ جاوا اسکریپت رفتیم اینه که اصولا شما به عنوان توسعه دهنده وب بایستی html/css/js رو بشناسید (حتی اگر در آینده نخواهید حرفه ای استفاده کنید و فرانت اند کار بشید و یا برید سراغ فریمورک های دیگه ای مثل فلاتر (+) یا همین آنویل که مثال زدید و ظاهرا مبتنی بر جاوا اسکریپت نیستن (هر چند در نهایت کدشون باید به جاوا اسکریپت تبدیل بشه چون مرورگر فقط اون رو میشناسه).
از طرفی شما وقتی با جنگو کار می کنید دو حالت داره:
1- با جنگوی سنتی کار می کنید، مثل همین پروژه که در این صورت تمپلت ها مستقیما حاوی کدهای html/css/js هستن.
2- با Django REST (+) کار می کنید که در این صورت API تولید میکنید. API تولیدی باید در یک کتابخونه فرانت اند تفسیر بشه که در یک وبسایت یا یک وب اپ نمایش داده بشه. اگه با html/css/js آشنا باشید می تونید از ری اکت و ری اکت نیتیو استفاده کنید که خروجی رو در وبسایت و اپ های اندروید و iOS داشته باشید.
اما در مورد ANVIL باید بگم فکر خوبی کردید و همین که فکرتون رو پرواز میدید برای پیدا کردن راهکارهای تازه خیلی خوبه.
من راستش Anvil رو پیش از این دیده بودم ولی فرصت نکردم که به خوبی بررسیش کنم.
چیزی که من متوجه شدم، متن باز نبود و ظاهرا برای توسعه با مقیاس دلخواه مستلزم پرداخت هزینه (+) بود. البته برای توسعه فردی و برای شروع الگوی استفاده رایگان هم داره.
فریمورک ANVIL ایده جذابی داره و حتی تشویقتون می کنم که بیشتر در موردش تحقیق کنید و به آموزش آنویل هم بپردازید. دست کم بر اساس خودآموزهای اون می تونید یک پروژه کوچیک بالا بیارید و طعم اون رو بچشید. شاید به کلی برای شرایط شما مناسب باشه و بتونید کارهای خوبی با اون بکنید.
تجربه های بعدیتون رو هم حتما اینجا بگذارید.
موفق باشید
محمد متین محمدی –
👌👌💥💥