مدت :

۵ ساعت و ۳۰ دقیقه

قیمت : ۱۴۴,۰۰۰ تومان
LinkedIn
Twitter
Facebook
Telegram

درباره مدرس 

اطلاعات دوره

توضیحات

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

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

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

 

این آموزش در یک نگاه

این آموزش پروژه محور جنگو 3 با معرفی Auth App در جنگو آغاز می‌شود. با استفاده از این اپلیکیشن می‌توان اعتبارسنجی کاربران، مدیریت نشست ها، مدیریت سطح دسترسی و گروه‌های کاربری را پیاده‌سازی کرد.

در آغاز با هم یک فرم ورود کاربر را از صفر طراحی می‌کنیم. سپس همین فرم را با Authentication App بازطراحی می‌کنیم. خواهیم دید که چقدر کار را راحت می‌کند.

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

نحوه تغییر گذرواژه را طراحی خواهیم کرد. همچنین این که چطور کاربران بتوانند گذرواژه فراموش شده را Reset کنند. یک ایمیل با یک توکن دریافت و گذرواژه تازه ایجاد کنند.

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

برای پیاده سازی سیستم اعتبارسنجی در جنگو نیاز به HTTPS داریم. با مفهوم HTTPS و مفهوم گواهینامه SSL/TLS آشنا خواهیم شد. همچنین پیاده سازی https در جنگو در حالت دیباگ را با هم یاد می‌گیرم.

 

آموزه‌های اصلی
  • آموزش ثبت نام با گوگل در جنگو
  • کار با اپ auth در جنگو
  • پیاده سازی https در جنگو
  • بازیابی گذرواژه کاربر در جنگو
  • آپلود عکس در جنگو
  • کار با فرم در جنگو

 

این آموزش بی‌نظیر است زیرا
  • در این آموزش جنگو 3 ، مبنای کار است.
  • مدیریت کاربران برای هر سایتی نیاز است.
  • مسیر طراحی یک شبکه اجتماعی را آغاز می‌کنید.
  • تمام کدها را با مفهوم کامل می‌آموزید.
  • مفهوم بک اند اعتیارسنجی کاربران را خواهید آموخت.

 

پیشنیاز

آموزش پروژه محور جنگو __ ساخت وبلاگ حرفه ای

آموزش مقدماتی برنامه نویسی وب با جنگو

 

کلیدواژگان

آموزش جنگو 3 – آموزش پروژه محور جنگو 3 – ساخت شبکه اجتماعی با جنگو – سایت شبیه اینستاگرام با جنگو – سایت شبیه pinterest با جنگو – اعتبارسنجی با شبکه های اجتماعی در جنگو – سیستم ثبت نام با گوگل در جنگو – سیستم ثبت نام با فیسبوک در جنگو – ورود با ایمیل در جنگو – آپلود عکس در جنگو – https در جنگو

سرفصل‌ها

سرفصل‌ها

درس صفر: معرفی دوره
– پیشنیاز این آموزش
– ویژگی های این آموزش
– نگاهی به دوره و محتوای آن
– مسیر پس از این آموزش

درس یکم: ساخت و اجرای پروژه
– بررسی پایتون و توضیح در مورد نسخه‌‌ها
– معرفی IDE مورد استفاده
– ایجاد پروژه و محیط مجازی venv
– ایجاد پروژه جنگو 3
– ایجاد اپ در جنگو با دستور startapp
– مهاجرت دیتابیس با migrate
– اجرای پروژه روی لوکال با دستور runserver

درس دوم: ایجاد صفحه ورود
– آشنایی با Django Authentication Framework
– آشنایی با اپ auth از contrib جنگو و کار آن
– مفهوم Middleware چیست؟
– مفهوم User Authentication
– مفهوم Session چیست؟
– فرآیند ایجاد Session ID و ارسال به Cookie
– مفهوم Permission چیست؟
– مفهوم User Groups چیست؟
– ایجاد فرم لاگین یا LoginForm با ارث‌بری از کلاس Form جنگو
– کار PasswordInput در فرم جنگو و رندر آن به type=password در html
– ایجاد تابع view برای پردازش فرم و دریافت اطلاعات کاربر
– کار تابع authenticate و کار تابع login از اپ auth جنگو
– استفاده از کلاس HttpResponse در جنگو
– نگاشت url با تابع path و include
– ایجاد یک کاربر آزمایشی به وسیله پنل مدیریت
– ایجاد کاربر مدیر با دستور manage;py createsuperuser
– بررسی صحت عملکرد صفحه login

درس سوم: آشنایی با Viewهای آماده اپ Auth
– آشنایی با نقش View های آماده در سیستم authentication جنگو
– مروری بر View های آماده ماژول views از اپ auth
– کار LoginView و LogoutView
– کار PasswordChangeView و PasswordChangeDoneView
– کار PasswordResetView و PasswordResetConfirmView
– نگاهی به صفحه مستندات جنگو برای اپ auth

درس چهارم: ساخت صفحه ورود و خروج با View های آماده اپ Auth
– رفع خطای unresolved reference django در pycharm
– فراخوانی ماژول views اپ auth و استفاده از LoginView و LogoutView
– شخصی سازی ویوهای اپ auth و جایگزینی تمپلت ها
– آشنایی با AuthenticationForm در LoginView و ویژگی‌های آن
– مفهوم پارامتر next در جنگو و LOGIN_REDIRECT_URL
– تنظیم LOGIN_URL و LOGOUT_URL در تنظیمات پروژه
– استفاده از دکوریتور login_required از decorators در اپ auth
– ریدایرکت کاربر از صفحه لاگین پس از ورود موفق
– اصلاح تمپلت base.html برای نمایش منوها بر اساس selection

درس پنجم: ساخت فرم تغییر گذرواژه کاربر
– نگاشت url مربوط به PasswordChangeView در اپ account و متد path
– نگاشت url صفحه redirect کاربر بعد از تغییر پسورد در جنگو
– شخصی سازی تمپلت صفحه های تغییر پسورد و اجرا و تست پروژه

درس ششم: صفحه بازنشانی گذرواژه کاربر
– مفهوم بازنشانی یا بازیابی گذرواژه reset password
– افزودن url های لازم و view های لازم از اپ auth
– افزودن فایل‌های html اختصاصی به پروژه جنگو
– افزودن گزینه فراموشی رمز عبور به فرم لاگین
– تنظیم EMAIL_BACKEND برای ارسال ایمیل لوکال
– اجرای پروژه و تشریح گام به گام فرآیند ارسال توکن و بازیابی گذواژه
– جایگزینی django.contrib.auth.urls با متد include به جای path موردی
– نکته و تمرین برای تبدیل از فراگیر جنگو به برنامه نویس جنگو

درس هفتم: ساخت فرم ثبت نام کاربر
– ایجاد کلاس RegisterForm از نوع ModelForm
– بررسی کلاس User اپ Auth و استفاده به عنوان مدل فرم
– تنظیم کلاس متا Meta برای فرم به منظور تخصیص مدل و فیلدها
– مفهوم ویژگی model و fields در ModelForm ماژول forms
– تعریف فیلد اختصاصی در مدل فرم برای گذرواژه و تایید آن
– مفهوم تابع clean و clean_field در جنگو
– استفاده از ValidationError در هنگام خطا در اعتبارسنجی مدل
– تعریف view و url و template برای صفحه ثبت نام
– افزودن گزینه ثبت نام یا register به صفحه ورود
– اجرای پروژه و مرور فرآیند و تمرین

درس هشتم: ساخت پروفایل اختصاصی کاربر
– بسط مدل User از اپ auth
– آشنایی با ماژول settings از django.conf
– کار و مفهوم ویژگی AUTH_USER_MODEL در تنظیمات پروژه
– آشنایی با ارتباط OneToOneField در دیتابیس
– آشنایی با فیلدهای DateField و ImageField در Django
– کار پارامتر upload_to در کار با فایل و تصویر در جنگو
– تعریف مسیر ذخیره فایل در جنگو
– مفهوم MEDIA_ROOT و MEDIA_URL در Django
– رفع مشکل نمایش URL عکس با تنظیم static در حالت DEBUG
– استفاده از کلاس ModelAdmin برای ثبت نام کاربر در پنل مدیریت
– ساخت دستورات مهاجرت دیتابیس با makemigrations
– ایجاد جدول پروفایل ها در دیتابیس با migrate و بررسی نتیجه

درس نهم: صفحه ویرایش پروفایل کاربر
– تعریف صورت موضوع
– ایجاد فرم های ویرایش اطلاعات کاربر
– ویرایش تابع ایجاد کاربر برای ایجاد پروفایل همزمان
– کار با تابع create از objects برای ایجاد رکورد یا سطر در دیتابیس
– آشنایی با پارامترهای سازنده constructor کلاس ModelForm
– مفهوم پارامتر instance و data و files
– رندر همزمان دو فرم در html
– مفهوم اتریبیوت enctype در html
– معنی multipart/form-data در فرم و متد post
– اجرای پروژه و ساخت کاربر فرضی
– تست فرم ویرایش پروفایل
– بارگذاری عکس در جنگو

درس دهم: کار با Message Framework
– مفهوم one-time notification message یا Flash message
– معرفی فریمورک نمایش پیام در جنگو
– کار MessageMiddleware
– مفهوم تابع context_processors در جنگو
– افزودن پیام به فرم ویرایش پروفایل با تابع messages_add
– تفاوت تابع messages_add و success یا error مستقیم
– سطح پیام DEBUG و SUCCESS و ERROR و WARNING و INFO
– استفاده از فریمورک messages در Class-based View
– روش های ذخیره سازی پیام SessionStorage و CookieStorage
– مفهوم ذخیره کوکی به روش FallbackStorage و متغیر MESSAGE_STORAGE

درس یازدهم: امکان ورود کاربر با ایمیل
– توضیح در مورد این که چطور آموزش ببینیم که خسته نشویم!
– مفهوم AUTHENTICATION_BACKENDS در Django
– شرح فرآیند authenticate از روی سورس جنگو
– ایجاد یک Backend اختصاصی برای اعتبارسنجی از روی ایمیل
– کلاس ModelBackend و متدهای آن
– تنظیم AUTHENTICATION_BACKENDS در settings پروژه
– اجرا و آزمایش پروژه

درس دوازدهم: اعتبارسنجی کاربران از روی حساب آن‌ها در شبکه‌های اجتماعی
– آشنایی با اپلیکیشن Python Social App
– نصب social-auth-app در پروژه جنگو
– تنظیمات اپ social_django و مهاجرت دیتابیس
– تنظیم نام mysite.com برای لوکال هاست در ویندوز
– اجرا و آزمایش پروژه روی hostname جدید لوکال هاست

درس سیزدهم: ایجاد اتصال HTTPS در جنگو — روی localhost و حالت Development
– آشنایی با RunServerPlus و نصب آن
– نصب Werzeug برای افزودن لایه دیباگ در اجرای runserver_plus
– نصب pyOpenSSL به منظور ایجاد SSL/TLS در اتصال امن
– راه اندازی پروژه با دستور python manage.py runserve_plus
– غیرفعال کردن اخطای unsafe مرورگر و نمایش سایت با اتصال https

درس چهاردهم: پروتکل HTTPS چیست؟ گواهی SSL چیست؟
– تعریف HTTPS مخفف Hyper Text Transfer Protocol Secure
– چرا باید از https استفاده کنیم؟
– معنی Encryption چیست ؟
– تاریخچه رمزگذاری – رمز سزار – رمز جفرسون – ماشین انیگما
– داده های دربند یا Data at rest
– داده های در جریان یا Data in transit
– رمز گذاری Transport layer encryption یا Transport layer Security
– فرق SSL و TLS و تاریخچه توسعه آن‌ها
– رمزگذاری متقارن یا Symmetric encryption چیست ؟
– رمزگذاری نامتقارن یا Asymmetric encryption چیست ؟
– تفاوت Public Key و Private Key در https چیست ؟
– مردی در میان Man-in-the-middle یا ماشینی در میان Machine-in-the-middle
– گواهینامه SSL/TLS چیست ؟ SSL یا TSL ؟
– انواع گواهینامه SSL تک دامنه و چند دامنه
– فرآیند دست تکان دادن سرور-کلاینت یا Server-Client Handshake در https
– نقش الگوریتم RSA در رمزگذاری SSL و پروتکل HTTPS
– کتابخانه OpenSSL چیست و PyOpenSSL چیست ؟
– شرح عملکرد runserver_plus در ایجاد اتصال https در جنگو

درس پانزدهم: ثبت نام و ورود کابران با اکانت گوگل
– شرح کلی فرآیند اعتبارسنجی با OAuth
– معرفی مستندات گوگل برای پیاده سازی OAuth 2.0
– بررسی اپ Python Social Auth برای ورود با گوگل و …
– تنظیم social_core.backends.google.GoogleOAuth2 در پروژه
– ثبت نام در Google Developers Console و ایجاد پروژه
– ایجاد Credentials و تنظیم Oath Consent Screen
– فعال سازی Google plus در بخش Library
– تنظیم SOCIAL_AUTH_GOOGLE_OAUTH2_KEY برای کلید API
– تنظیم SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET بر اساس Google API
– ایجاد دکمه لاگین و لینک به API اعتبارسنجی گوگل
– تنظیم Authorized Domain و Redirect URL برای بازگشت کاربر از اعتبارسنجی
– آزمایش برنامه و ثبت نام کاربر بر اساس شناسه جیمل در جنگو
– طرح مراحل ثبت نام و ورود کاربر با اکانت فیسبوک
– تمرین برای ورود کاربر با اکانت توییتر

درس شانزدهم: جمع‌بندی و نگاهی به آینده
– نگاهی به آنچه در این فصل آموختیم
– نگاهی به آنچه در فصل بعد می‌آموزیم

نظرات (57)

57 دیدگاه برای آموزش پروژه محور جنگو ــ ساخت شبکه اجتماعی (۱- ثبت نام)

  1. ابوذر رحمانی (خریدار محصول)

    سلام جناب آصفی
    وقتتون بخیر
    من همه مراحل برای اجرای پروژه در قالب ssl رو پیش رفتم
    پروژه هم به درستی اجرا میشه ولی توی مرورگر باز نمیشه
    دلیلش هم اون پیغام رایج safty نیست که بخوام بصورت unsafty وارد بشم
    کلا انگار آدرس رو نمیتونه پیدا کنه
    بدون ssl راحت باز میشه
    ولی وقتی با دستور
    python manage.py runserver_plus –cert-file cert.crt
    پروژه رو میارم بالا اصلا آدرس رو پیدا نمیکنه
    ضمنا عرض کنم خدمتون که دارم از جنگوی 4.0.3 و جنگواکستنشن 3.1.5 و pyOpenSSL 22.0.0 استفاده میکنم
    تو ورژن های جدید نیاز به کار خاصی نیست؟
    مثل تغییر تنظیمات فایروال و …
    ممنون میشم برای رفع مشکل راهنمایی بفرمایید

    • مصطفی آصفی

      سلام به شما آقای رحمانی. من البته با جنگوی ۴ امتحان نکردم اما اگه مشکلی باشه باید خطایی دریافت کنید. خطایی ندارید؟ اگه خطایی ندارید و کدها رو مطمئن هستید درست زدین، می تونید یه پروژه جنگوی ساده با نسخه ۳ (و حتی پایتون قدیمی تر مثلا ۳.۷) بالا بیارید بعد جنگوی «ساده» با نسخه ۴ بالا بیارید. اگه هر دوی این ها کار کنن ینی مشکل نسخه نیست و احتمالا یه جایی پروژه ایراد داره. لطفا نتیجه رو اینجا اعلام کنید.

  2. امین اجاقی (خریدار محصول)

    با سلام خدمت استاد عزیز و دوست داشتنی مصطفی آصفی عزیز و دوست داشتنی استاد عزیز با یک شگفتی که روبرو شدیم این است که آن مسئله گوگل کاملا پس از با کردن صفحه فیسبوک حل می شود یعنی دیگر نیاز به وی پی ان نیز ندارد و کاملا صحیح کار می نماید اکنون یک پروژه کاملا صحیح در دست داریم که یک شبکه اجتماعی در سطح جهانی ساخته ایم و همینطور نیز در حال رشد دادن آن می باشیم با تشکر از محبت های شما استاد بزرگ و دوست داشتنی جانمان بسیار شاد و شیرین گشته است برکت خدا بر شما استاد بزرگ و دوست داشتنی و خانواده محترمتان.

    • مصطفی آصفی

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

  3. امین اجاقی (خریدار محصول)

    با سلام و درود خدمت استاد بزرگ و گرامی مصطفی آصفی عزیز و دوست داشتنی استاد عزیز این موارد همه با vpn صحیح کار میکنند یعنی هم google هم facebook با vpn صحیح کار می کنند .

  4. امین اجاقی (خریدار محصول)

    با سلام دورد خدمت استاد بزرگ و مهربان مصطفی آصفی دوست داشتنی استاد عزیز یک خبر خوش من چون برای گوگل با مسئله روبرو شدم برای facebook را چک نکرده بودن آن بسیار عالی کار می نماید . با تشکر از محبت های شما استاد عزیز برکت خدا بر شما و خانواده محترمتان .

    • مصطفی آصفی

      سلام به شما و آفرین که فیس بوک رو کامل طی کردین. خدا قوت

  5. امین اجاقی (خریدار محصول)

    با سلام و درود خدمت استاد عزیز و گرامی مصطفی آصفی عزیز و دوست داشتنی استاد در مورد social auth روشی که در نظر مناسب می آید این است که ابتدا بتوانیم کاربرانی که در پایگاه داده قرار می گیرند با ثبت نام social auth را بازیابی کنیم و متود ورود را برایشان دوباره بنویسیم زیرا اکنون با username و password هایی که از طریق social auth در پروژه ثبت شده اند نمی توان وارد صفحه شد و این خودش یک مورد خطاست با متودی که برای social auth نوشته اند ورود انجام می شود ولی بعد با متود auth خودمان نمی توانیم با این یوزرها و پسوردها وارد شویم پس بازیابی این یوزر ها و پسوردهای این کاربران و نوشتن متودی برای ورود و همچنین متودی در تمپلت برای اینکه ثبت نام را یک بار انجام دهد و در صورت وجود این آیدی که خود مسئله ایست زیرا درخواست باید ارسال شده و در بازگشت مورد بررسی قرار گیرد که این موضوع آن موضوع تمپلت را نقض می کند پس شاید باید به پنل کاربری بازگردیم و آنجا چک کنیم که آیا موردی برای کاربران ثبت شده وجود دارد یا خیر و جستجوی بیشتر خدمتتون آورم یافته ها را با تشکر از محبت های شما استاد بزرگ و دوست داشتنی برکت خدا بر شما و خانواده محترمتان .

    • مصطفی آصفی

      سلام جناب اجاقی عزیز. ببینید شما می تونید سورس کد اپ auth خارجی رو به نفع خودتون دستکاری کنید.
      ولی توصیه نمی کنم. چه ایرادی داره؟ کاربری که با شبکه اجتماعی ثبت نام کرده بعد از اون هم فقط با شبکه اجتماعی وارد بشه. حالا کاری که برای امنیت و احیانا بازیابی حساب میشه انجام داده اینه که شما تو profile بعدها بیاید یک فیلد شماره تلفن اضافه کنید. و مثلا امکان تایید شماره تلفن هم بگذارید (با استفاده از سرویس های پیام کوتاه). که بعد از اون کاربر بتونه با شماره تلفن خودش هم وارد بشه.

  6. امین اجاقی (خریدار محصول)

    try:
    user_id = Profile.objects.get(user_id=request.user)
    if request.user.id == user_id:
    pass
    except:
    Profile.objects.create(user=request.user)
    با سلام و درود فراوان خدمت استاد بزرگم مصطفی آصفی عزیز و دوست داشتنی استاد عزیز با گذاشتن این تکه کد در ابتدای متود edit در view های app پروژه یعنی account این مسئله در مورد کاربرانی که با مدل دیگر اکانت ایجاد می کنند در مورد ورود به صفحه ی profil edit حل می شود پس از این به سراغ موضوع social auth می خواهم بروم زیرا در آنجا نیز فقط ثبت نام ابتدایی کامل انجام می شود و وارد می شویم ولی پس از آن راه ورود از این دو طریق بسته می شود دوباره که بر روی ورود با گوگل میزنیم می گوید که اکانت شما قبلا ثبت شده و فقط مراحل ورود را طی نمی کند که باید تحیح نماییم این نیز الگوریتمی برایش در نظر دارم از طریق تمپلت تصحی کنیم که اگر پس از کلیک بر روی دکمه اگر از پایگاه داده کاربری یافت شد فقط وارد شویم و اگر یافت نشد به سراغ app پروژه social auth برویم . با تشکر از محبت های بیکران شما برکت خدا بر شما و خانواده محترمتان .

    • مصطفی آصفی

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

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

  7. امین اجاقی (خریدار محصول)

    زیرا پس از اولین بار که این آیدی را می سازد دوباره خطا می دهد که این وجود دارد و نمی تواند دوباره ساخته شود .

    • مصطفی آصفی

      سلام به شما. آفرین که تلاش می کنین. اگه درست متوجه شده باشم شما فقط دارید کوئری رو اشتباه می زنید. به جای کوئری سرچ دارید کوئری ایجاد رو استفاده می کنید.
      لطفا این نشانی رو برای متد واکشی آبجکت ها ببینید.

  8. امین اجاقی (خریدار محصول)

    استاد من یک نمونه تست کردم به این صورت این دستور را در متود edit در views.py قرار دادم درتور مقابل را در ابتدای خط تابع edit قرار دادم Profile.objects.create(user=request.user و با یکی از user هایی که از طریق دیگر رجیستر کرده ایم مانند سوپر یوزر یک بار بر روی ادیت پروفایل زدم و دقیق کار می کند و برای کاربر user_id را در جدول پروفایل ایجاد می نماید فقط مسئله اکنون یک شرط است که چگونه سوال کنم اگر کاربر این user_id را در جدول پایگاه داده Profile ندارد برایش این را بساز . با تشکر از شما استاد نیکو و دوست داشتنی .

  9. امین اجاقی (خریدار محصول)

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

  10. امین اجاقی (خریدار محصول)

    با سلام خدمت استاد بزرگ و دوست داشتنی مصطفی آصفی عزیز استاد حتما این مسئله را جستجو می کنم و طریقه ای برای این ارتباط یافت می کنم با دانشی که تا کنون در این باره یافتم می توانیم query از طریق view مورد نظر در مورد پروفایل به طریقی ایجاد کنیم که کاربر authenticate شده در صفحه را با آن query شناسایی کند و فرم ادیت پروفایل را برای این افراد که اینگونه با شبکه اجتماعی ورود می کنند شخصی سازی کند حتما در آینده اطالاعات را خدمت شما اعلام خواهم کرد .
    با تشکر از محبت ها بسیار نیکوی شما خدا قوت و برکت پروردگار بر شما و خانواده محترمتان .

    • مصطفی آصفی

      بسیار عالی. روی شخصی سازی تابع ذخیره کاربر هم (به صورت حین اجرا) می تونید کار کنید.
      روش شخصی سازی اپ auth رو تو فصل های بعدی در دوره می بینید.

  11. امین اجاقی (خریدار محصول)

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

    • مصطفی آصفی

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

  12. ابوالفضل حسن زاده (خریدار محصول)

    سلام استاد خسته نباشید. ساله نو شما , تمامی اساتید در این مجموعه و تمامی هنرجویان تبریک عرض میکنم. انشاالله که امسال همه در هر زمینه ای که دارند کار میکنند پیشرفت چشم گیری کنند. استاد من طبق گفته ی شما یه سری screen shot از صفحات گرفتم و در repository همسفر-تمپلت قرار دادم در پوشه preview اگر میشه یه نگاه بندازید بسیار متشکرم.

    • مصطفی آصفی

      سلام به شما. سال نوی بنده از وجود شما فراگیر پرتلاش مبارک بود، مبارک تر شد. دیدم مخزنتون رو. خیلی خوبه. دو توصیه دارم در مورد UX :
      1- به هارمونی فونت ها دقت کنید. یه مقدار فونت ها بعضی جاها خیلی درشت تو چشم میزنن. به نظرم می تونید با تقلید از نسبت فونت های وبسایت اسنپ شروع کنید. بعد خودتون بهتر و بهتر کنید.
      2- عکس هایی که استفاده می کنید سعی کنید مربوط به خود تاکسی سرویس یا دست کم ایرانی باشن که مخاطب خیلی حس نزدیکی بیشتری داشته باشه.

  13. امین اجاقی (خریدار محصول)

    با سلام و درود خدمت استاد بزرگ و گرامی مصطفی آصفی عزیز و دوست داشتنی استاد عزیز در مسیر همین پروژه در زمان ایجاد profile form در بخش کد نویسی صفحه html یعنی فایل dashboard.html در قسمت تغییر گذرواژه از url با نام change_password استفاده کردیم در صورتی که فایل صفحه تغییر گذرواژه با نام change_password_form ذخیره گشته است و اگر در این صفحه نام اصلی این فایل قرار گیرد نیز خطا می دهد علت این امر چیست با تشکر از محبت های بسیار ارزشمند شما استاد بزرگ و گرامی برکت خدا بر زندگی شما و خانواده محترمتان .

    • مصطفی آصفی

      سلام جناب اجاقی عزیز. ببینید ما در تمپلت ها در جنگو می تونیم یک url رو با نامش (ویژگی name) صدا کنیم.
      حالا change_password در واقع نامی هست که توسعه دهنده های جنگو به url تغییر گذرواژه دادن (برید به venv خودتون و بعد از پوشه ها به مسیر django بعد contrib بعد auth برید و فایل urls رو باز کنید.
      ما هم در ویوهامون از اون نگاشت url استفاده کردیم.

      هر وقت این url با این نام اختصاری رو صدا می کنیم جنگو می ره توی اپ auth و نگاشت این url رو پیدا می کنه و بنابراین می ره توی ویوی مربوطه و دستورات رو اجرا می کنه. فقط ما در اون درس گفتیم که به جای تمپلت نهایی بیاد تمپلت خود ما رو اجرا کنه.

  14. ابوالفضل حسن زاده (خریدار محصول)

    سلام استاد بسیار متشکرم از سرعت پاسخ شما. منظورتون رو متوجه شدم من داخل سیستم یه پوشه دارم توش repository هایی که ساختم رو پوشه رو دارم که اگر لازم شد تغییراتی رو بدم بعد push کنم و از این جور داستانها خلاصه از کمک های شما بسیار سپاس گذارم.من یه پوشه به اسم preview ایجاد میکنم و توی اون عکس ها رو قرار میدم. git learning by Jadi این اموزش رایگان از جادی در سایت فرادرس هستش که بعد از اموزش ورود سریع به گیت استاد این اموزش خیلی به درد میخوره.

  15. ابوالفضل حسن زاده (خریدار محصول)

    سلام استاد ببخشید منظورتون این هستش که از تمپلت عکس بگیرم بگذارم توی یه پوشه بعد پوشه رو پوش کنم رو پروژه ؟
    ببخشید شرمنده من زیاد با ابزار های موجود در پنل مدیریت اشنایی ندارم. شما اموزشی سراغ ندارید که دانش ما رو در این زمینه بیشتر کنه ؟
    البته استاد تو بخش تنظیمات هر repository یه جا هست که عکس اپلود میکنی ولی متوجه نشدم که اون عکس کاربردش کجاس.

    • مصطفی آصفی

      سلام به شما. ساده ترین کار اینه که شما مخزن رو در اصل تو کامپیوتر خودتون بسازید و به گیت هاب پوش کنید.
      اگه قبلا این آموزش گیت رو دیدین و با مفاهیم گیت آشنا هستین توصیه می کنم این آموزش How to push code to Github رو ببینید.
      با روشی که اینجا گفته شده شما هر پوشه یا عکسی خواستین می تونین تو سیستم بسازید و بعد به گیت هاب پوش کنید. ساخت فایل و پوشه تو سیستم خیلی راحت تره.

  16. ابوالفضل حسن زاده

    سلام استاد ببخشید خواستم یاداوری کنم که اگه میشه این template رو که روی گیت قراردادم رو مشاهده کنید. باتشکر

    • مصطفی آصفی

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

  17. ابوالفضل حسن زاده

    اها یادم رفت استاد این رو من طراحی کردم.

  18. ابوالفضل حسن زاده

    سلام استاد خسته نباشید. استاد این ادرس repository سایت اقای اجاقی هستش اگر میشه یه نگاه بکنید اگر مشکلی داشت بگید چون نظرات شما خیلی برای من مهم هستش. hamsafar_template

    • مصطفی آصفی

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

  19. امین اجاقی (خریدار محصول)

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

  20. امین اجاقی (خریدار محصول)

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

    با سلام و درود خدمت دوست عزیز و مهربانم ابوالفضل عزیز دوست خوبم من با شماره ای که در اختیار بنده گذاشتید تماس حاصل کردم ولی خاموش بود و در واتساپ نیز پروفایل کاربری از این شماره موجود نیست آیا شماره صحیح می باشد ؟ با تشکر از مهربانی و محبت شما دوست مهربان .

  21. ابوالفضل حسن زاده (خریدار محصول)

    سلام به دوست عزیزم اقای امین اجاقی خیلی مخلصیم. اقا امین بی زحمت به این شماره در واتساپ پیام بدید چون یه سری مطالب هستش که ما باید در همون لحظه با هم دیگه در ارتباط باشیم. 09191931548 منتظرم.

  22. امین اجاقی (خریدار محصول)

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

  23. امین اجاقی (خریدار محصول)

    با تشکر از مهربانی بسیار شما ، ابوالفضل عزیز و دوست داشتنی .

  24. ابوالفضل حسن زاده (خریدار محصول)

    سلام به دوست عزیزم اقای امین اجاقی خیلی مخلصیم. بسیار عالی پس من یه template برای شما میزنم با سلیقه خودم میزارم رو گیت.

  25. امین اجاقی (خریدار محصول)

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

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

  26. ابوالفضل حسن زاده (خریدار محصول)

    سلام به دوست عزیزم اقای امین اجاقی خیلی مخلصیم. اولا که تبریک میگم سایت شما توی دسکتاپ خیلی خوب هستش. اما این کد های css که شما گفتید تمامی این ها به صورت کلاس های اماده در بوت استرپ هستش. فقط کافیه شما این کلاس رو ها رو به این صورت مثلا class=’container-fluid’ اضافه کنید.

    از نظر امنیتی فقط افراد خاص که شما اجازه دادید باید به پنل جنگو دسترسی داشته باشید و الی هکر ها اولین کاری که میکنند همین کلمه admin/ رو در اضافه ادرس ریشه سایت میزنند بعضی از developer ها حواسشان نیست که اسم این نگاشت رو عوض کنند نفوذگران به صفحه دسترسی پیدا میکنند. حالا فقط باید یک دیکشنری اتک بزنند تا username , password رو پیدا کنند. پس امنیت صفحه ادمین خیلی مهم هستش. پس موقعی که این کامنت رو دید هرچه سریع تر نسبت به تعویض این اسم اقدام بفرمایید. مثلا از admin/ به taxadmini/ حالا این به عنوان مثال بود.

    اگر که خواستید من براتون یه template کاملا responsive بزنم بزارم رو گیت شما دانلود کن از اون استفاده کن بعد ها که در front-end قوی شدید و دانشتون زیاد شد خودتون یه template بسازید. البته اگر خواستید.

  27. امین اجاقی (خریدار محصول)

    مورد دیگر اینکه ایتدا نام کالاس را بنویسیم و سپس کد css یعنی همانطور که کد های css را در کلاس ها طراحی می کنیم همان طور درون این شرط قرار دهیم .

    • مصطفی آصفی

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

      پی نوشت:‌ ممنونم که تجربه خودتون رو به اشتراک گذاشتید.

  28. امین اجاقی (خریدار محصول)

    } ( media only screen and (min-width: 1000px @
    ;… : font-size
    {
    شرط به این صورت می باشد ولی فاصله ندارد.

  29. امین اجاقی (خریدار محصول)

    سلام و درود بر استاد بزرگ و مهربانم مصطفی آصفی عزیز و دوست عزیز و یار مهربانم ابوالفضل حسن زاده عزیز مرا ببخشید پس اتمام سایت و دپلوی بر روی سرور و یک عنوان جدید به نام responsive کردن سایت روبرو شدم زیرا ابتدا در اندیشه ام بود که تنها با تگ متا که برای ابزار های دیگر و نحوه نمایش است بر روی گوشی موبایل نیز سایت را در صحت نمایش می دهد که پس از دپلوی پروژه دیدم که بر رو پوشی های موبایل به هم ریختگی وجود دارد و رفتم و reponsive سازی را از youtube یاد گرفتم و اکنون در حال اتمام پروژه هم به صورت دسکتاپ و هم برای ابزارهای دیگر مانند گوشی می باشم .
    بروی چشمانم ممنون از محبت شما که به کار بنده علاقه نشان می دهید.
    آدرس سایت ابلته اکنون فقط نسخه دسکتاپ می باشد : http://www.hamsafar-taxi.ir
    و اینکه اگر شماه نیز مانند من می خواهید سفارشی ساختن صفحات سایتتان را خودتان با html و css یاد بگیری زیرا ابزارهای دیگر که این عناوین را آماده دارند مانند بوت استرپ و w3school که متود های آماده دارد می توانید از این آدرس که یکی از برادران انگلیسی زبانمان در این دنیا می باشد که بسیار نیکو این آموزش را در youtube قرار داده است یاد بگیرید . https://www.youtube.com/watch?v=ZYV6dYtz4HA
    و تنها نکنه آن استفاده از شرط صفحه نمایش می باشد
    } ( @media only screen and (min-width: 1000px
    {
    درون براکت دستورات را بر اساس آن صفحه ای که می خواهید css آن را طراحی کنید بنویسید این سایز برای دسکتاپ می باشد
    و شر می گوید صفحات تا مینیمم 1000 پیکسل یعنی 1000 به بالا را پشتیبانی می کند و اول از طریق inspect حالت نمایش صفحه را روی موبایل قرار دهید و طراحی کنید بدون شرط سپس برای صفحات مثلا تبلت و دسکتاپ شرط را بگذارید و آن چیزهایی که در css باید طغییر کند را فقط تغییر دهید و صفحات خویش را responsive کنید .

  30. ابوالفضل حسن زاده (خریدار محصول)

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

  31. امین اجاقی (خریدار محصول)

    سلام و درود خدمت استاد بزرگ و گرامی مصطفی آصفی عزیز و دوست داشتنی و دوست عزیز و مهربانم ابوالفضل حسن زاده و بقیه دوستان در این گروه آموزشی نیکو و پر ثمر استاد عزیز پس از رفع تمامی خطا ها و نوشتن کل کد های css اولین پروژه وبسایت خودمان را به پایان رساندم و تکمیل کردم .
    با تشکر از محبت و مهربانی شما استاد بزرگوار و دوستان خوبم در گروه . X>

    • مصطفی آصفی

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

  32. مهدی

    سلام آقای آصفی
    جاوااسکریپت قبلاً فقط برای فرانت اند استفاده میشد اما بعدها فریمورک nodejs رو براش درست کردن که بک اند هم انجام میده
    آیا برنامه نویسها امروز نمیتونن برعکس اینکارو بکنن مثلا یک فریمورک برای پایتون یا php یا جنگو بسازن که بشه با این زبانهای برنامه نویسی بجای جاوااسکریپت با پایتون یا پی اچ پی قسمت فرانت اند سایت رو طراحی کنن

    • مصطفی آصفی

      سلام به شما.
      در مورد پایتون هم قدم هایی در این زمینه برداشته شده. ما در فصل دوم این آموزش به ترکیب جی کوئری و ایجکس با جنگو پرداختیم و اتفاقا یکی از دوستانتون با شناسه «رضا» اونجا اومدن و در بخش نظرات دو کتابخونه برای طراحی کامل وب با پایتون رو معرفی کردن.
      نام های ANVIL و JustPy رو با زدن کلیدهای ctrl و f در بخش نظرات ساخت شبکه اجتماعی با جنگو – فصل دوم (+) جستجو کنید.

      پی‌نوشت: البته جاوا اسکریپت و کتابخونه های اون مثل جی کوئری و ریکت هنوز استاندارد کار مرورگرها هستند و بنده معتقدم یک توسعه دهنده وب همچنان باید html/css/js رو اگرچه مقدماتی هم که شده، بلد باشه. حداقل بتونه با فرانت اندکارها ارتباط بگیره و بفهمه که چه نیازی دارن و یا اگه روی پروژه کوچیکی کار می کنه خودش بتونه یک فرانت اند مناسب رو بزنه تا زمانی که پروژه بزرگ بشه و فرانت اندکار استخدام بشه. اما شاید روزی ویجت های پایتونی یا PhP هم به استانداردی در مرورگرها تبدیل شدن.

  33. ابوالفضل حسن زاده (خریدار محصول)

    اقای امین اجاقی از این لینک شما میتونید کد رو هم از git hub ببنید. git hub link

  34. ابوالفضل حسن زاده (خریدار محصول)

    ای وای سیستم تگ های html رو پاک اقای اجاقی من واقعا شرمندم که نتونستم خوب کمکتون کنم ولی به link هایی که گذاشتم فکر کنم بتونید خودتون انجام بدید.

  35. ابوالفضل حسن زاده (خریدار محصول)

    سلام به دوست عزیزم اقای امین اجاقی خیلی مخلصیم. خواهش میکنم در واقع هدف اینکه با هم رشد کنیم و اطلاعات , تجربه ها و دانسته هامون رو باهم به اشتراک بگذاریم.
    خب درباره جابه جایی فیلد های یک فرم با crispy_forms

    {% extends ‘base.html’ %}

    {% load crispy_forms_tags %}

    {% block content %}

    {{ form.name | as_crispy_field }}

    {{ form.email | as_crispy_field }}

    {{ form.body | as_crispy_field }}

    Submit

    {% endblock %}

    ببنید اول شما یک container ایجاد میکنید. توش فرم رو درست میکنید بعد بهش کلاس form-group میدید (البته تو این لینک یه جور دیگه استفاده کرده ولی اینجا اینجوری بهتر جواب میده ). حالا توش یه row ایجاد میکیند بعد ستون بندی میکیند. میگید یه div دارم تو صفحه بزرگ 3 قسمت از 12 قسمت رو میگیره در غیر این صورت کل 12 قسمت رو بگیره (یعنی تو هر سطر یه فیلد قرار بگیره) الان توکد بالا فیلد name و email در کنار یکدیگر قرار میگیرد و فیلد body پایین قشنگ همه 12 قسمت رو میگره ولی موقعی که بیاد تو گوشی فیلد ها همشون زیر هم قرار میگیرن. به اون صورت هم میشه از crispy_form برای جابه جایی فیلد ها استفاده کرد. یاعلی .

    سلام استاد خواهش میکنم به خدا من کاری نمیکنم چیزی که بلدم چرا به بقیه نگم بگذارم تو مغزم بمونه واس چی.
    به هر حال ما چیز یادمیگیریم که یه روزی ازش استفاده کنیم. این روزه ها همون روز هاست. حالا یه ضرب المثلی هست که میگه دیگران کاشتند ما خوردیم حالا ما بکاریم دیگران. حالا من یه خورده دستکاریش کنم. دیگران یادگرفتند به ما یاد دادند , حالا ما یاد گرفتیم به دیگران یاد دهیم. 🙂

  36. امین اجاقی (خریدار محصول)

    سلام و درود بر ابوالفضل حسن زاده عزیز و دوست داشتنی دوست خوب و مهربانم با تشکر از راهنمایی شما در رابطه با {{ form | crispy }} که بسیار کاربردی بود و برچسب های نام فیلد ها را بسیار زیبا و جالب سفارسی می کند و من در حال استفاده از این روش نیکو می باشم دوست من آیا درباره تغییر مکان و پوزیشن فیلد ها هم تجربه ای دارید که من را با آن راهنمایی نمائید بسیار ممنون می شود با تشکر فراوان ار مهربانی و محبت شما دوست عزیز برکت خدا بر شما و خانواده محترمتان .

  37. علی حبیب زاده (خریدار محصول)

    سلام و خسته نباشید 🙂
    اومدم یک خط کد اشتباه از فصل اول و مبحث login رو تشریح کنم ..
    شما داخل view مربوط به login کدی به این شکل دارید:
    if user.is_active
    باید بگم که وقتی تیک active یک کاربر False می شود ، وقتی از authenticate استفاده می کنیم ، None بر می گرداند و فرقی با کاربری که تا به حال وجود نداشته است ندارد .. پس ما هیچوقت ارور:
    “Disabled account”
    را نمی بینیم 🙂 ممنون از دوره خوب با توضیح کامل و خوب تر استاد آصفی ..
    و اینکه کم کم داریم به سمت “جنگو پیشرفته” می ریم و نباید روی مباحثی که خیلی کار شده دوباره توضیح مفصل داده بشه ، بعضی وقتا واقعا خسته کننده میشه ولی همچنان روی مباحث جدید همین روال “تشریح کامل و مفصل” رو پیش بگیرید.
    خسته نباشید 🙂

    • مصطفی آصفی

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

      در مورد پیشنهادهای خوبتون ممنونم و البته باید بگم: بله خود من هم راحت ترم که کم تر تکرار کنم ولی خب ممکنه دوستانی باشن که دیرتر مطالب براشون جا میفته و بایستی اون دوستان رو در نظر بگیرم.
      یه روش خوب اینه که موقع پخش فیلم هر جا دیدین دارین خسته میشین دور پخش فیلم رو تند کنید. در VLC Player با زدن کلید + روی صفحه کلید سرعت بالا می‌ره.

  38. امین اجاقی (خریدار محصول)

    با سلام و درود فراوان خدمت دوست و همکار عزیزم ابوالفضل حسن زاده بسیار قدر دان شما و محبت بی کرانتان می باشم خدا برکت فراوان به شما خانواده مهربان پرورتان دهد در مورد موضوع اول این موضوع که در این پروژه من یک فرم نظردهی ایجاد کرده بودم که ارتباطی با پست نداشت ولی توضیحات بسیار کاملتون باعث رشد دانشم شد و در مورد آن نکته بسیار عالی در نظر زیرا هنوز انجام ندادم مطلب کریسپی فرم اکنون می خواهم یک نمونه امتحان کنم بعد به شما اطلاع می دهد با تشکر از همکاری زیبای شما دوست عزیز فراوانی نعمت برای شما و خانواده مهربانتان از خدا می خواهم .

  39. امین اجاقی (خریدار محصول)

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

    • مصطفی آصفی

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

  40. امین اجاقی (خریدار محصول)

    سلام درود بر استاد بزرگ و مهربان مصطفی آصفی عزیز و دوست داشتنی استاد عزیز در نوشتن یک بروژه هستم و در آن یک app کاربری به نام users ایجاد کرده ام و یک فرم login درست کرده ام که کاملا ضحیح عمل می کند اکنون می خواهم ارتباط این صفحه ورود را با یک صفحه دیگر ایجاد کنم که در آن صفحه نیز فرم وجود دارد و من model این فرم را ایجاد کرده ام و همینطور form آن را و در admin نیز قرار داده ام تمام این امور را در app کاربری یعنی users انجام داده ام و سبس در urls و viwes نیز دستورات را کامل نوشته ام و فایل html آن را نیز کامل کرده ولی زمانی که می خواهم از فرم وارد آن صفحه شوم با خطایی روبرو می شود که در مورد آن موضوع اسن که ما اطلاعات app کاربر یعنی users را از خود جنگو فراخوانی می کنیم و این اطلاعات در آنجا نیست .
    ممنون می شود در این مورد توضیحی بدهید که در چنین موردی چگونه باید عمل کنم زمانی که بعد از فرم login صفحه دارم که می خواهم بعد از این فرم بیاید.

  41. ابوالفضل حسن زاده (خریدار محصول)

    سلام به دوست عزیزم اقای امین اجاقی خیلی مخلصیم. خب خدا رو شکر که مشکل order_by حل شد.
    و اما مشکل شما query زدن به دیتابیس کامنت ها و واکشی کامنت ها یک پست خاصی هستش درسته ؟!
    ببنید شما مدل کامنت رو احتمالا اینجوری نوشتید.

    class Comment(models.Model):
    post = models.ForeignKey(Post, on_delete=models.CASCADE, related_name=’comments’)
    full_name = models.CharField(max_length=50)
    email = models.EmailField()
    body = models.TextField()
    active = models.BooleanField(default=True)
    date_added = models.DateTimeField(auto_now_add=True)

    اون ویژگی post که اول نوشته شده درواقع رابط این جدول با جدول پست هاست درسته.
    خب وقتی که یه نمونه از این کلاس ساخته بشه متغیر post دارای یه سری ویژگی از پست مربوطه میشه از مهمترین ویژگی هاش میشه به id اشاره کرد که به این صورت اون رو میتونیم بگیریم post__id. میگیم پست دو تا underline میزنیم بعد اسم ویژگی مورد نظر که ما اینجا id مد نظر مون هست.
    حالا یه نمونه ببینیم.( فرض بر اینه که شما از نگاشت مطلق برای نمایش مطالب هر پست استفاده میکنید همون get_absolute_url)

    def post_detail(request, year, month, day, slug):
    post = get_object_or_404(Post, slug=slug, publish__year=year, publish__month=month, publish__day=day)

    # Post’s Comments
    post_id = post.id
    comments = Comment.objects.filter(post__id=post.id)

    # Handle Comment Form
    if request.method != ‘POST’:
    form = CommentForm()
    else:
    form = CommentForm(data=request.POST)
    if form.is_valid():
    nc = form.save(commit=False) #get the new comment but dont commit it to db we need to filling the post_field
    nc.post = post
    nc.save()
    return redirect(post.get_absolute_url())

    context = {
    ‘post’: post,
    ‘comments’: comments,
    ‘form’: form,
    }
    template_name = ‘detail.html’
    return render(request, template_name, context)

    کد رو شما باهاش اشنا هستید پس نیازی به توضیح نیست. فقط میمونه جایی که فرم valid هستش و میخواد redirect بشه شما مگه نگاشت مطلق رو با get_absolute_url ایجاد نمیکنی پس url مطلق پست رو این تابع برمیگردونه فقط کافیه طبق کد بالا عمل کنید. حالا داخل تمپلت form action=”” method=”” تگ فرم این ویژگی هارو داره .ویژگی action به این صورت action=”{{ post.get_absolute_url }}” ویژگی method به این صورت method=”post”

    برای استایل دادن به form ها در جنگو من خودم از crispy_form استفاده میکنم. استفاده ازش هم خیلی راحته پیشنهاد میکنم این لینک رو ببنید.
    crispy_forms django

    کار خاصی قرار نیست انجام بدید فقط app جانبی رو نصب میکنی معرفی میکنی یه تنظیم کوچولو داره که خودش نوشته بعد تو تمپلت فرم ها اون رو load میکنید به این صورت {% load crispy_forms_tags %} بعد این جوری ازش استفاده میکنید{{ form | crispy }}و تمام فرم شما به شکلی بسیار زیبا و کاربر پسند render میشه. یا علی.

    • مصطفی آصفی

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

  42. امین اجاقی (خریدار محصول)

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

  43. امین اجاقی (خریدار محصول)

    با درود و سلام خدمت استاد بزرگ و گرامی مصطفی آصفی عزیز و مهربان استاد عزیز یک سوال که برایم مطرح شده این است که ما چون فرم ها را در جنگو تعریف می کنیم و بصورت تهیه شده در html فرا خوانی می کنیم چگونه می توانیم با css روی این فرم ها یعنی مکان فیلد ها و یا برچسب های نام آنها طراحی انجام دهیم یا مثلا رنگ پشت زمینه یکی از فیلد ها را تغییر دهیم یا غیره… ؟ با تشکر از مهر محبت فراوان شما استاد گرامی برکت خدا بر شما و خانواده محترم و گرامیتان .

    سلام و درود , و تشکر فراوان از دوست عزیزم ابوالفضل حسن زاده بزرگوار و دوست داشتنی برادر عزیزم آن مسئله را قبلا با روش orderd_by حل کرده بودم زیرا این فرم یک فرم نظر دهی به سایت می باشد مانند همین فرم که اینجا نظرات را می گذاریم به همین دلیل با روش های قبلی عملی نمی شد ولی باز هم در این مورد که به پست اطلاق شود یا همین کامنت ها که از پایگاه داده فرا می خوانیم به روش فراخوانی با آی دی رو اگر کامل توضیح بدید ممنون می شوم یعنی چگونه مطالب را با آی دی آنها از پایگاه داده در فایل views.py فراخوانی کنیم ؟ با تشکر از شما دوست و براردر عزیز و مهربان برکت خدا بر خودتان و خانواده ی محترمتان .

  44. ابوالفضل حسن زاده (خریدار محصول)

    حالا اون یه جور یه واکشی اطلاعات از دیتابیس بود Comment.objects.filter(post__id=post.id) شما از اون related_name هم میتونی اینجوری تو فایل views.py استفاده کنی comments = post.comments.all()

    • مصطفی آصفی

      سلام جناب حسن زاده عزیز. ممنون از بلندنظری شما و این که سعی می کنید مشکل دوستانتون رو هم حل کنید.
      خدا قوت

  45. ابوالفضل حسن زاده (خریدار محصول)

    سلام به دوست عزیزم اقای امین اجاقی خیلی مخلصیم.
    خب ببینید هر پست چند تا کامنت داره هر کامنت مربوط به یک پست هستش پس ما یک ارتباط one to many داریم شما مدل کامنت ها رو که ساختی توش یه فیلد بزار پست. مقدار دهی کن با این models.ForeignKey(Post, on_delete=models.CASCADE, related_name=’comments’) خب تا این جا ما تو فایل models.py بودیم حالا میریم تو فایل views.py تو این فایل احتمالا باید یه تابع به اسم post_detail داشته باشی تو این تابع اون پست مورد نظرت رو که گرفتی حالا این جوری مینویسی comments = Comment.objects.filter(post_id=post.id) بعد این ‘comments’:comments, رو به اون دیکشنری اضافه میکنید.
    حالا تو تمپلت دقیقا مثل پست ها

    {% for comment in comments %}
    {{ comment.name }}
    {{ comment.body }}
    {{ comment.created_at }}
    {% endfor %}
    تو مدل کامنت ها این کلاس رو بنویسید که دیگه نیازی به order_by(‘-created_at’) نباشه اون خودش جدیدترین کامنت رو میاره بالا
    class Meta:
    ordering = [‘-created_at’]

    امیدوارم که مشکل تون حل بشه.

  46. امین اجاقی (خریدار محصول)

    سلام درود بر استاد بزرگ و گرامی مصطفی عاصفی عزیز و دوست داشتنی استاد عزیز من دوباره آموزش ها را دیدم در قسمت آموزش topic دیدم که بوسیله order_by میتوانم این کار را انجام دهم و موضوع برایم حل شد با تشکر از مهربانی های شما استاد مهریبان . برکت خدا بر شما و خانواده محترمتان .

    • مصطفی آصفی

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

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

  47. امین اجاقی (خریدار محصول)

    با سلام و درود فراوان به استاد بزرگ و دوست داشتنی مصطفی عاصفی عزیز استاد روزهای شادی را برایتان آرزومندم چندین زمان است که در حال یاد گیری html و css بودم بخاطر پروژه آژانس دائیم که خدارو شکر به پایان رسید و من اکنون در حال نوشتن وبسایت این پروژه هستم استاد در طول آموزش ها از ابتدا تا به حال برای دریافت آبجکتها از پایگاه داده که در فایل views.py این کار را انجام میدادیم تا متغیری داشته باشیم که در فایل html آن را در یک حلقه قرار دهیم تا در صفحه سایت در مرورگر نمایش دهیم من در این پروژه یک فرم ساخته ام و در صفحه قرار دادم که زمانی که اطلاعاتی در آن ثبت می کنم در پایگاه داده نیز موجود است فقط نمی توانم query از آن در فایل views.py در متغیری ایجاد کنم تا آن را به وسیله حلقه در صفحه قرار دهم از تمام روش های قبلی که شما داده اید استفاده کرده ام ولی چون این یک فرم نظر می باشد و اطلاق به پستی نمی شود نمی توانم ارتباط را خودم پیدا کنم مثلا با روش زیر امتحان می کنم ولی در صفحه ی مرورگر خطا می دهد.
    comments = Comment.objects.get(C
    درون پرانتز نمی دانم چگونه باید کامنت ها را از پایگاه داده فرا بخوانم شما در آموزش ها از id استفاده می کردید من در نمی یابم که در این روش ها منظور فراخوانی id چیست زیرا یکی را بعنوان comment_id در متغیر های ورودی تابع قرار می دهیم و سپس درون پرانتز بالا آن را قرار می دهیم ولی این یک ورودی تابع است که من در نمیابم چگونه id را از درون پایگاه داده فرا می خواند متشکر می شود اگر این موضوع را برایم شرح دهید با تشکر فراوان از مهربانی های شما استاد بزرگ .

  48. ابوالفضل حسن زاده (خریدار محصول)

    سلام استاد خسته نباشید.
    استاد فکرکنم متوجه شدم مشکل از کجاست من تو تمرین ها میخواستم خیلی دیگه تمیز تمرین کنم یه فضای نام هم داده بودم app_name=”account” بعد تو url سراسری هم namespace=”account” که مثلا اینجوری استفاده کنم account:dashboard اما نمیدونم چه مشکلی داشت با این فضای نام بدون این درست بود اما با این اون خطا رو میداد بعد قبل از تست کردن این محیط مجازی رو پاک کردم و پایتون 3.9.1 رو نصب کردم (تا قبل این پایتون 3.8.1 بود) با این نسخه جدید محیط مجازی رو ایجاد و کتابخانه ها رو بر اساس اخرین نسخه پایدار نصب کردم درست شد. خب دوستان خلاصه اگر به یه همچین مشکلی خوردید اول پایتون 3.9.x رو نصب کنید تو تنظیمات سیستم این نسخه رو در اولویت بگذارید بعد محیط مجازی پاک و دوباره با این نسخه ایجاد کنید بعد موقع تمرین هم فضای نامی ندید تا انشالله به این مشکل برنخورید. یا علی.

    • مصطفی آصفی

      سلام و ممنون از شما برای انتقال تجربه. راستش گمان نمی کنم مشکلتون از نسخه پایتون بوده باشه.
      خطایی که بار قبل گزارش کردید به نگاشت url در جنگو ربط داشت و نگاشت url به نسخه پایتون نباید ارتباطی داشته باشه. شایدم من خوب متوجه توضیحتون نشدم.
      در هر صورت خوشحالم که با تلاش مشکلتون رو حل کردید و ممنون که تجربتون رو منتقل کردید.

  49. ابوالفضل حسن زاده

    سلام استاد خسته نباشید. استاد من با یه خطایی درگیرم که هرچی سرچ میکنم فیلم رو بالا پایین میکنم source code رو بررسی میکنم اصلا دلیل وجود این خطا رو نمیدونم. لطفا کمک کنید.

    متن خطا رو بگم.
    Reverse for ‘password_reset_done’ not found. ‘password_reset_done’ is not a valid view function or pattern name

    این برای password_change هم میده.

    • مصطفی آصفی

      سلام به شما. سلامت باشید انشالله.
      ببینید خطای Reverse به معنی پیدا نکردن یک نگاشت url هست. مطمئن بشید که این نگاشت رو در جای درست خودش تعریف کردید:
      path(”, include(‘django.contrib.auth.urls’))

  50. گوشکی (خریدار محصول)

    سلام استاد عزیز خسته نباشید من دوره rest frame work رو دیدم کاشکی میشد این اموزش رو در قالب rest framework اموزش میدادین یا یه توضیح تکمیلی بدید که کمکی کنه ما خودمون در اون قالب پیاده سازیش کنیم

    • مصطفی آصفی

      سلام به شما. بله پیشنهاد خیلی خوبیه. خود بنده هم دوست داشتم که چنین کنم.

      مشکل اینجاست که در این صورت باید برای فرانت اند از فلاتر، ری اکت یا … استفاده می کردیم که مستلزم شناخت قبلی فراگیر هست.
      برای این پروژه البته شما که آموزش Django Rest رو دیدید می تونید با تبدیل مدل ها به سریالایزر خروجی جیسون بسازید. نکته هایی در این تبدیل هست که طبیعتا در بخش نظرات نمیگنجه ولی برای شما که تا این مرحله با جنگو پیش اومدید شدنیه.

      پی‌نوشت: امیدوارم بتونم راهی به لحاظ طراحی سرفصل پیدا کنم که برای پروژه فروشگاهی از API استفاده کنیم.

  51. رضا (خریدار محصول)

    درود بر شما
    این آموزشی رو تهیه کردم و الان قسمت چهارم هستم.مثل همیشه عالی و استاندارد.

    نکته ای رو خواستم در مورد پایچارمتون بگم و اونم این هستش که از اونجایی که جنگو توسط نسخه ی معمولی پایچارم به خوبی ساپورت نمیشه میتونید از نسخه ی pro استفاده کنید و هر زمان که 30 روز رو به اتمام بود از از تریال ریست استفاده کنید.

    راستی این رو هم اضافه کنم برای برخی از دوستان -من از آخرین نسخه ی پایچارم(2020.3.3) و جنگو(3.1.5) و پایتون(3.9.1) برای این پروژه استفاده میکنم و خوشبختانه تا به اینجا مشکلی نبوده و البته در قسمت های قبلی آموزشی هم این اختلاف ورژن برای بنده مشکلی رو ایجاد نکرده.

    • مصطفی آصفی

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

      ضمنا جای خوشحالیه که آموزش براتون مفید بوده. موفق باشید

  52. رضا (خریدار محصول)

    سلام وقت بخیر
    من این دوره رو تهیه کردم
    ای کاش توی قسمت ورود
    فیلد اول میشد هم نام کاربری / هم ایمیل / شماره موبایل رو وارد کنه
    فیلد پاینی هم پسود
    توی پنل ادمین ساخت دسته بندی های بی نهایت رو هم آموزش بدید
    و کار با autocomplte کردن فیلد ها توی پنل ادمین
    طریقه گزارش گیری هم بگید
    این موارد رو توی آموزش های قبلی نگفتید امیدوارم توی این دوره بگید
    تشکر

    • مصطفی آصفی

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

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

  53. محمدجواد

    بسیار عالیه
    لطفا لاگین با موبایل رو هم اضافه کنید
    اگر اتصال api به ippanel رو استفاده کنید تقریبا ۷۰ درصد شرکت های پنل پیامک رو پوشش میده . چون همشون ippanel هستن ففط اسامی سایت هاشون فرق داره
    با تشکر

    • مصطفی آصفی

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

  54. مونا اصغری

    سلام من هم با درخواست دوستمون در مورد ثبت نام از طریق موبایل موافقم ، اگر دوره اش رو بگذارید خیلی برامون مفید خواهد بود
    لطفا یه دوره یا تک جلسه درمورد تفاوت viewset, Modelviewset, Genericviewset و کاربردهای هر کدوم هم مد نظر قرار بدید ممنونم

    • مصطفی آصفی

      سلام به شما و ممنون از پیشنهاتون. با ارجاع به توضیحی که برای دوستمون دادم، پیشنهادهای شما رو یادداشت کردم. انشالله فرصتی دست بده این موارد رو هم اضافه می کنیم.

  55. Faxmodem

    یکی از کمبودها به نظر من ثبت نام از طریق موبایل هستش که ای کاش اینم اعمال کنید داخل پروژه چون الان هر پروژه ای کارفرما ها نیاز دارن یکیش ثبت نام از طریق موبایل هستش …. اینم بگنجونید لطفاً

    • مصطفی آصفی

      سلام به شما. پیشنهاد به جایی دارید اما موضوعی که هست ثبت نام با شماره همراه معمولا در هر سرویس دهنده داخلی یا خارجی API خودش رو داره که در بخش مستندات توسعه دهندگان قرار میدن. ما در این آموزش Django REST (+) در مورد ارتباط گیری با Web API صحبت کردیم و حتی تولید اون با جنگو رو گفتیم.
      سیستم های ثبت نام موبایلی (ارائه کننده خدمات پیامکی) معمولا Web API ارائه می کنن. مراحل کار معمولا به این صورته که شما در اون سرویس دهنده ثبت نام می کنید. بعد در بخش توسعه دهندگانشون توضیح میدن که چطور باید از API استفاده کنید. شما باید کد صدا کردن اون API رو پشت دکمه ثبت نام د رجنگو قرار بدید. باقی مراحل کار به تناسب پارامترهایی که اون سرویس در نظر می گیره کمی متفاوته ولی معمولا روند کلی اینه:
      1- صدا کردن API ثبت نام اون سرویس دهنده با پاس دادن شماره همراه کاربر که خودش وارد و فرم رو سابمیت می کنه
      2- هدایت کاربر (redirect) به صفحه جدیدی که در اون منتظر وارد کردن کد دریافتی کاربر هستیم که اون سرویس دهنده تولید و براش ارسال می کنه و یک نمونه هم به سرور ما برمی گردونه
      3- دریافت جواب اون سرویس دهنده که حاوی کد فعال سازی ارسالی به شماره کاربر هست و مقابسه با اونچه که کاربر وارد کرده
      4- ثبت نام شماره همراه و باقی مشخصات کاربر در فیلدهای USER در صورتی که کد رو درست وارد کرده باشه.

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

  56. محمدمتین محمدی

    فقط این آیا توی این پروژه از rest api استفاده میکنید؟

    • مصطفی آصفی

      خیر تو این پروژه به rest api نمی پردازیم. لطفا سرفصل ها رو با دقت بخونید.
      انشالله در مورد Web API و کاربرد اون در جنگو به ویژه در اتصال به کتابخونه های فرانت اند مثل فلاتر و ریکت حتما یه دوره خواهیم داشت.

  57. محمدمتین محمدی

    سلام خیلی ممنون که بالاخره این پروژه رو انجام میدید ممنونیم
    حتما هم توی این ویدیو خیلی چیز های جدید یاد میگیریم
    تشکر

    • مصطفی آصفی

      سلام سلامت باشید. انشالله که مفید باشه.

دیدگاه خود را بنویسید

نظرات کاربران در خصوص دوره 

57 دیدگاه برای آموزش پروژه محور جنگو ــ ساخت شبکه اجتماعی (۱- ثبت نام)

  1. ابوذر رحمانی (خریدار محصول)

    سلام جناب آصفی
    وقتتون بخیر
    من همه مراحل برای اجرای پروژه در قالب ssl رو پیش رفتم
    پروژه هم به درستی اجرا میشه ولی توی مرورگر باز نمیشه
    دلیلش هم اون پیغام رایج safty نیست که بخوام بصورت unsafty وارد بشم
    کلا انگار آدرس رو نمیتونه پیدا کنه
    بدون ssl راحت باز میشه
    ولی وقتی با دستور
    python manage.py runserver_plus –cert-file cert.crt
    پروژه رو میارم بالا اصلا آدرس رو پیدا نمیکنه
    ضمنا عرض کنم خدمتون که دارم از جنگوی 4.0.3 و جنگواکستنشن 3.1.5 و pyOpenSSL 22.0.0 استفاده میکنم
    تو ورژن های جدید نیاز به کار خاصی نیست؟
    مثل تغییر تنظیمات فایروال و …
    ممنون میشم برای رفع مشکل راهنمایی بفرمایید

    • مصطفی آصفی

      سلام به شما آقای رحمانی. من البته با جنگوی ۴ امتحان نکردم اما اگه مشکلی باشه باید خطایی دریافت کنید. خطایی ندارید؟ اگه خطایی ندارید و کدها رو مطمئن هستید درست زدین، می تونید یه پروژه جنگوی ساده با نسخه ۳ (و حتی پایتون قدیمی تر مثلا ۳.۷) بالا بیارید بعد جنگوی «ساده» با نسخه ۴ بالا بیارید. اگه هر دوی این ها کار کنن ینی مشکل نسخه نیست و احتمالا یه جایی پروژه ایراد داره. لطفا نتیجه رو اینجا اعلام کنید.

  2. امین اجاقی (خریدار محصول)

    با سلام خدمت استاد عزیز و دوست داشتنی مصطفی آصفی عزیز و دوست داشتنی استاد عزیز با یک شگفتی که روبرو شدیم این است که آن مسئله گوگل کاملا پس از با کردن صفحه فیسبوک حل می شود یعنی دیگر نیاز به وی پی ان نیز ندارد و کاملا صحیح کار می نماید اکنون یک پروژه کاملا صحیح در دست داریم که یک شبکه اجتماعی در سطح جهانی ساخته ایم و همینطور نیز در حال رشد دادن آن می باشیم با تشکر از محبت های شما استاد بزرگ و دوست داشتنی جانمان بسیار شاد و شیرین گشته است برکت خدا بر شما استاد بزرگ و دوست داشتنی و خانواده محترمتان.

    • مصطفی آصفی

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

  3. امین اجاقی (خریدار محصول)

    با سلام و درود خدمت استاد بزرگ و گرامی مصطفی آصفی عزیز و دوست داشتنی استاد عزیز این موارد همه با vpn صحیح کار میکنند یعنی هم google هم facebook با vpn صحیح کار می کنند .

  4. امین اجاقی (خریدار محصول)

    با سلام دورد خدمت استاد بزرگ و مهربان مصطفی آصفی دوست داشتنی استاد عزیز یک خبر خوش من چون برای گوگل با مسئله روبرو شدم برای facebook را چک نکرده بودن آن بسیار عالی کار می نماید . با تشکر از محبت های شما استاد عزیز برکت خدا بر شما و خانواده محترمتان .

    • مصطفی آصفی

      سلام به شما و آفرین که فیس بوک رو کامل طی کردین. خدا قوت

  5. امین اجاقی (خریدار محصول)

    با سلام و درود خدمت استاد عزیز و گرامی مصطفی آصفی عزیز و دوست داشتنی استاد در مورد social auth روشی که در نظر مناسب می آید این است که ابتدا بتوانیم کاربرانی که در پایگاه داده قرار می گیرند با ثبت نام social auth را بازیابی کنیم و متود ورود را برایشان دوباره بنویسیم زیرا اکنون با username و password هایی که از طریق social auth در پروژه ثبت شده اند نمی توان وارد صفحه شد و این خودش یک مورد خطاست با متودی که برای social auth نوشته اند ورود انجام می شود ولی بعد با متود auth خودمان نمی توانیم با این یوزرها و پسوردها وارد شویم پس بازیابی این یوزر ها و پسوردهای این کاربران و نوشتن متودی برای ورود و همچنین متودی در تمپلت برای اینکه ثبت نام را یک بار انجام دهد و در صورت وجود این آیدی که خود مسئله ایست زیرا درخواست باید ارسال شده و در بازگشت مورد بررسی قرار گیرد که این موضوع آن موضوع تمپلت را نقض می کند پس شاید باید به پنل کاربری بازگردیم و آنجا چک کنیم که آیا موردی برای کاربران ثبت شده وجود دارد یا خیر و جستجوی بیشتر خدمتتون آورم یافته ها را با تشکر از محبت های شما استاد بزرگ و دوست داشتنی برکت خدا بر شما و خانواده محترمتان .

    • مصطفی آصفی

      سلام جناب اجاقی عزیز. ببینید شما می تونید سورس کد اپ auth خارجی رو به نفع خودتون دستکاری کنید.
      ولی توصیه نمی کنم. چه ایرادی داره؟ کاربری که با شبکه اجتماعی ثبت نام کرده بعد از اون هم فقط با شبکه اجتماعی وارد بشه. حالا کاری که برای امنیت و احیانا بازیابی حساب میشه انجام داده اینه که شما تو profile بعدها بیاید یک فیلد شماره تلفن اضافه کنید. و مثلا امکان تایید شماره تلفن هم بگذارید (با استفاده از سرویس های پیام کوتاه). که بعد از اون کاربر بتونه با شماره تلفن خودش هم وارد بشه.

  6. امین اجاقی (خریدار محصول)

    try:
    user_id = Profile.objects.get(user_id=request.user)
    if request.user.id == user_id:
    pass
    except:
    Profile.objects.create(user=request.user)
    با سلام و درود فراوان خدمت استاد بزرگم مصطفی آصفی عزیز و دوست داشتنی استاد عزیز با گذاشتن این تکه کد در ابتدای متود edit در view های app پروژه یعنی account این مسئله در مورد کاربرانی که با مدل دیگر اکانت ایجاد می کنند در مورد ورود به صفحه ی profil edit حل می شود پس از این به سراغ موضوع social auth می خواهم بروم زیرا در آنجا نیز فقط ثبت نام ابتدایی کامل انجام می شود و وارد می شویم ولی پس از آن راه ورود از این دو طریق بسته می شود دوباره که بر روی ورود با گوگل میزنیم می گوید که اکانت شما قبلا ثبت شده و فقط مراحل ورود را طی نمی کند که باید تحیح نماییم این نیز الگوریتمی برایش در نظر دارم از طریق تمپلت تصحی کنیم که اگر پس از کلیک بر روی دکمه اگر از پایگاه داده کاربری یافت شد فقط وارد شویم و اگر یافت نشد به سراغ app پروژه social auth برویم . با تشکر از محبت های بیکران شما برکت خدا بر شما و خانواده محترمتان .

    • مصطفی آصفی

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

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

  7. امین اجاقی (خریدار محصول)

    زیرا پس از اولین بار که این آیدی را می سازد دوباره خطا می دهد که این وجود دارد و نمی تواند دوباره ساخته شود .

    • مصطفی آصفی

      سلام به شما. آفرین که تلاش می کنین. اگه درست متوجه شده باشم شما فقط دارید کوئری رو اشتباه می زنید. به جای کوئری سرچ دارید کوئری ایجاد رو استفاده می کنید.
      لطفا این نشانی رو برای متد واکشی آبجکت ها ببینید.

  8. امین اجاقی (خریدار محصول)

    استاد من یک نمونه تست کردم به این صورت این دستور را در متود edit در views.py قرار دادم درتور مقابل را در ابتدای خط تابع edit قرار دادم Profile.objects.create(user=request.user و با یکی از user هایی که از طریق دیگر رجیستر کرده ایم مانند سوپر یوزر یک بار بر روی ادیت پروفایل زدم و دقیق کار می کند و برای کاربر user_id را در جدول پروفایل ایجاد می نماید فقط مسئله اکنون یک شرط است که چگونه سوال کنم اگر کاربر این user_id را در جدول پایگاه داده Profile ندارد برایش این را بساز . با تشکر از شما استاد نیکو و دوست داشتنی .

  9. امین اجاقی (خریدار محصول)

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

  10. امین اجاقی (خریدار محصول)

    با سلام خدمت استاد بزرگ و دوست داشتنی مصطفی آصفی عزیز استاد حتما این مسئله را جستجو می کنم و طریقه ای برای این ارتباط یافت می کنم با دانشی که تا کنون در این باره یافتم می توانیم query از طریق view مورد نظر در مورد پروفایل به طریقی ایجاد کنیم که کاربر authenticate شده در صفحه را با آن query شناسایی کند و فرم ادیت پروفایل را برای این افراد که اینگونه با شبکه اجتماعی ورود می کنند شخصی سازی کند حتما در آینده اطالاعات را خدمت شما اعلام خواهم کرد .
    با تشکر از محبت ها بسیار نیکوی شما خدا قوت و برکت پروردگار بر شما و خانواده محترمتان .

    • مصطفی آصفی

      بسیار عالی. روی شخصی سازی تابع ذخیره کاربر هم (به صورت حین اجرا) می تونید کار کنید.
      روش شخصی سازی اپ auth رو تو فصل های بعدی در دوره می بینید.

  11. امین اجاقی (خریدار محصول)

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

    • مصطفی آصفی

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

  12. ابوالفضل حسن زاده (خریدار محصول)

    سلام استاد خسته نباشید. ساله نو شما , تمامی اساتید در این مجموعه و تمامی هنرجویان تبریک عرض میکنم. انشاالله که امسال همه در هر زمینه ای که دارند کار میکنند پیشرفت چشم گیری کنند. استاد من طبق گفته ی شما یه سری screen shot از صفحات گرفتم و در repository همسفر-تمپلت قرار دادم در پوشه preview اگر میشه یه نگاه بندازید بسیار متشکرم.

    • مصطفی آصفی

      سلام به شما. سال نوی بنده از وجود شما فراگیر پرتلاش مبارک بود، مبارک تر شد. دیدم مخزنتون رو. خیلی خوبه. دو توصیه دارم در مورد UX :
      1- به هارمونی فونت ها دقت کنید. یه مقدار فونت ها بعضی جاها خیلی درشت تو چشم میزنن. به نظرم می تونید با تقلید از نسبت فونت های وبسایت اسنپ شروع کنید. بعد خودتون بهتر و بهتر کنید.
      2- عکس هایی که استفاده می کنید سعی کنید مربوط به خود تاکسی سرویس یا دست کم ایرانی باشن که مخاطب خیلی حس نزدیکی بیشتری داشته باشه.

  13. امین اجاقی (خریدار محصول)

    با سلام و درود خدمت استاد بزرگ و گرامی مصطفی آصفی عزیز و دوست داشتنی استاد عزیز در مسیر همین پروژه در زمان ایجاد profile form در بخش کد نویسی صفحه html یعنی فایل dashboard.html در قسمت تغییر گذرواژه از url با نام change_password استفاده کردیم در صورتی که فایل صفحه تغییر گذرواژه با نام change_password_form ذخیره گشته است و اگر در این صفحه نام اصلی این فایل قرار گیرد نیز خطا می دهد علت این امر چیست با تشکر از محبت های بسیار ارزشمند شما استاد بزرگ و گرامی برکت خدا بر زندگی شما و خانواده محترمتان .

    • مصطفی آصفی

      سلام جناب اجاقی عزیز. ببینید ما در تمپلت ها در جنگو می تونیم یک url رو با نامش (ویژگی name) صدا کنیم.
      حالا change_password در واقع نامی هست که توسعه دهنده های جنگو به url تغییر گذرواژه دادن (برید به venv خودتون و بعد از پوشه ها به مسیر django بعد contrib بعد auth برید و فایل urls رو باز کنید.
      ما هم در ویوهامون از اون نگاشت url استفاده کردیم.

      هر وقت این url با این نام اختصاری رو صدا می کنیم جنگو می ره توی اپ auth و نگاشت این url رو پیدا می کنه و بنابراین می ره توی ویوی مربوطه و دستورات رو اجرا می کنه. فقط ما در اون درس گفتیم که به جای تمپلت نهایی بیاد تمپلت خود ما رو اجرا کنه.

  14. ابوالفضل حسن زاده (خریدار محصول)

    سلام استاد بسیار متشکرم از سرعت پاسخ شما. منظورتون رو متوجه شدم من داخل سیستم یه پوشه دارم توش repository هایی که ساختم رو پوشه رو دارم که اگر لازم شد تغییراتی رو بدم بعد push کنم و از این جور داستانها خلاصه از کمک های شما بسیار سپاس گذارم.من یه پوشه به اسم preview ایجاد میکنم و توی اون عکس ها رو قرار میدم. git learning by Jadi این اموزش رایگان از جادی در سایت فرادرس هستش که بعد از اموزش ورود سریع به گیت استاد این اموزش خیلی به درد میخوره.

  15. ابوالفضل حسن زاده (خریدار محصول)

    سلام استاد ببخشید منظورتون این هستش که از تمپلت عکس بگیرم بگذارم توی یه پوشه بعد پوشه رو پوش کنم رو پروژه ؟
    ببخشید شرمنده من زیاد با ابزار های موجود در پنل مدیریت اشنایی ندارم. شما اموزشی سراغ ندارید که دانش ما رو در این زمینه بیشتر کنه ؟
    البته استاد تو بخش تنظیمات هر repository یه جا هست که عکس اپلود میکنی ولی متوجه نشدم که اون عکس کاربردش کجاس.

    • مصطفی آصفی

      سلام به شما. ساده ترین کار اینه که شما مخزن رو در اصل تو کامپیوتر خودتون بسازید و به گیت هاب پوش کنید.
      اگه قبلا این آموزش گیت رو دیدین و با مفاهیم گیت آشنا هستین توصیه می کنم این آموزش How to push code to Github رو ببینید.
      با روشی که اینجا گفته شده شما هر پوشه یا عکسی خواستین می تونین تو سیستم بسازید و بعد به گیت هاب پوش کنید. ساخت فایل و پوشه تو سیستم خیلی راحت تره.

  16. ابوالفضل حسن زاده

    سلام استاد ببخشید خواستم یاداوری کنم که اگه میشه این template رو که روی گیت قراردادم رو مشاهده کنید. باتشکر

    • مصطفی آصفی

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

  17. ابوالفضل حسن زاده

    اها یادم رفت استاد این رو من طراحی کردم.

  18. ابوالفضل حسن زاده

    سلام استاد خسته نباشید. استاد این ادرس repository سایت اقای اجاقی هستش اگر میشه یه نگاه بکنید اگر مشکلی داشت بگید چون نظرات شما خیلی برای من مهم هستش. hamsafar_template

    • مصطفی آصفی

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

  19. امین اجاقی (خریدار محصول)

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

  20. امین اجاقی (خریدار محصول)

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

    با سلام و درود خدمت دوست عزیز و مهربانم ابوالفضل عزیز دوست خوبم من با شماره ای که در اختیار بنده گذاشتید تماس حاصل کردم ولی خاموش بود و در واتساپ نیز پروفایل کاربری از این شماره موجود نیست آیا شماره صحیح می باشد ؟ با تشکر از مهربانی و محبت شما دوست مهربان .

  21. ابوالفضل حسن زاده (خریدار محصول)

    سلام به دوست عزیزم اقای امین اجاقی خیلی مخلصیم. اقا امین بی زحمت به این شماره در واتساپ پیام بدید چون یه سری مطالب هستش که ما باید در همون لحظه با هم دیگه در ارتباط باشیم. 09191931548 منتظرم.

  22. امین اجاقی (خریدار محصول)

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

  23. امین اجاقی (خریدار محصول)

    با تشکر از مهربانی بسیار شما ، ابوالفضل عزیز و دوست داشتنی .

  24. ابوالفضل حسن زاده (خریدار محصول)

    سلام به دوست عزیزم اقای امین اجاقی خیلی مخلصیم. بسیار عالی پس من یه template برای شما میزنم با سلیقه خودم میزارم رو گیت.

  25. امین اجاقی (خریدار محصول)

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

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

  26. ابوالفضل حسن زاده (خریدار محصول)

    سلام به دوست عزیزم اقای امین اجاقی خیلی مخلصیم. اولا که تبریک میگم سایت شما توی دسکتاپ خیلی خوب هستش. اما این کد های css که شما گفتید تمامی این ها به صورت کلاس های اماده در بوت استرپ هستش. فقط کافیه شما این کلاس رو ها رو به این صورت مثلا class=’container-fluid’ اضافه کنید.

    از نظر امنیتی فقط افراد خاص که شما اجازه دادید باید به پنل جنگو دسترسی داشته باشید و الی هکر ها اولین کاری که میکنند همین کلمه admin/ رو در اضافه ادرس ریشه سایت میزنند بعضی از developer ها حواسشان نیست که اسم این نگاشت رو عوض کنند نفوذگران به صفحه دسترسی پیدا میکنند. حالا فقط باید یک دیکشنری اتک بزنند تا username , password رو پیدا کنند. پس امنیت صفحه ادمین خیلی مهم هستش. پس موقعی که این کامنت رو دید هرچه سریع تر نسبت به تعویض این اسم اقدام بفرمایید. مثلا از admin/ به taxadmini/ حالا این به عنوان مثال بود.

    اگر که خواستید من براتون یه template کاملا responsive بزنم بزارم رو گیت شما دانلود کن از اون استفاده کن بعد ها که در front-end قوی شدید و دانشتون زیاد شد خودتون یه template بسازید. البته اگر خواستید.

  27. امین اجاقی (خریدار محصول)

    مورد دیگر اینکه ایتدا نام کالاس را بنویسیم و سپس کد css یعنی همانطور که کد های css را در کلاس ها طراحی می کنیم همان طور درون این شرط قرار دهیم .

    • مصطفی آصفی

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

      پی نوشت:‌ ممنونم که تجربه خودتون رو به اشتراک گذاشتید.

  28. امین اجاقی (خریدار محصول)

    } ( media only screen and (min-width: 1000px @
    ;… : font-size
    {
    شرط به این صورت می باشد ولی فاصله ندارد.

  29. امین اجاقی (خریدار محصول)

    سلام و درود بر استاد بزرگ و مهربانم مصطفی آصفی عزیز و دوست عزیز و یار مهربانم ابوالفضل حسن زاده عزیز مرا ببخشید پس اتمام سایت و دپلوی بر روی سرور و یک عنوان جدید به نام responsive کردن سایت روبرو شدم زیرا ابتدا در اندیشه ام بود که تنها با تگ متا که برای ابزار های دیگر و نحوه نمایش است بر روی گوشی موبایل نیز سایت را در صحت نمایش می دهد که پس از دپلوی پروژه دیدم که بر رو پوشی های موبایل به هم ریختگی وجود دارد و رفتم و reponsive سازی را از youtube یاد گرفتم و اکنون در حال اتمام پروژه هم به صورت دسکتاپ و هم برای ابزارهای دیگر مانند گوشی می باشم .
    بروی چشمانم ممنون از محبت شما که به کار بنده علاقه نشان می دهید.
    آدرس سایت ابلته اکنون فقط نسخه دسکتاپ می باشد : http://www.hamsafar-taxi.ir
    و اینکه اگر شماه نیز مانند من می خواهید سفارشی ساختن صفحات سایتتان را خودتان با html و css یاد بگیری زیرا ابزارهای دیگر که این عناوین را آماده دارند مانند بوت استرپ و w3school که متود های آماده دارد می توانید از این آدرس که یکی از برادران انگلیسی زبانمان در این دنیا می باشد که بسیار نیکو این آموزش را در youtube قرار داده است یاد بگیرید . https://www.youtube.com/watch?v=ZYV6dYtz4HA
    و تنها نکنه آن استفاده از شرط صفحه نمایش می باشد
    } ( @media only screen and (min-width: 1000px
    {
    درون براکت دستورات را بر اساس آن صفحه ای که می خواهید css آن را طراحی کنید بنویسید این سایز برای دسکتاپ می باشد
    و شر می گوید صفحات تا مینیمم 1000 پیکسل یعنی 1000 به بالا را پشتیبانی می کند و اول از طریق inspect حالت نمایش صفحه را روی موبایل قرار دهید و طراحی کنید بدون شرط سپس برای صفحات مثلا تبلت و دسکتاپ شرط را بگذارید و آن چیزهایی که در css باید طغییر کند را فقط تغییر دهید و صفحات خویش را responsive کنید .

  30. ابوالفضل حسن زاده (خریدار محصول)

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

  31. امین اجاقی (خریدار محصول)

    سلام و درود خدمت استاد بزرگ و گرامی مصطفی آصفی عزیز و دوست داشتنی و دوست عزیز و مهربانم ابوالفضل حسن زاده و بقیه دوستان در این گروه آموزشی نیکو و پر ثمر استاد عزیز پس از رفع تمامی خطا ها و نوشتن کل کد های css اولین پروژه وبسایت خودمان را به پایان رساندم و تکمیل کردم .
    با تشکر از محبت و مهربانی شما استاد بزرگوار و دوستان خوبم در گروه . X>

    • مصطفی آصفی

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

  32. مهدی

    سلام آقای آصفی
    جاوااسکریپت قبلاً فقط برای فرانت اند استفاده میشد اما بعدها فریمورک nodejs رو براش درست کردن که بک اند هم انجام میده
    آیا برنامه نویسها امروز نمیتونن برعکس اینکارو بکنن مثلا یک فریمورک برای پایتون یا php یا جنگو بسازن که بشه با این زبانهای برنامه نویسی بجای جاوااسکریپت با پایتون یا پی اچ پی قسمت فرانت اند سایت رو طراحی کنن

    • مصطفی آصفی

      سلام به شما.
      در مورد پایتون هم قدم هایی در این زمینه برداشته شده. ما در فصل دوم این آموزش به ترکیب جی کوئری و ایجکس با جنگو پرداختیم و اتفاقا یکی از دوستانتون با شناسه «رضا» اونجا اومدن و در بخش نظرات دو کتابخونه برای طراحی کامل وب با پایتون رو معرفی کردن.
      نام های ANVIL و JustPy رو با زدن کلیدهای ctrl و f در بخش نظرات ساخت شبکه اجتماعی با جنگو – فصل دوم (+) جستجو کنید.

      پی‌نوشت: البته جاوا اسکریپت و کتابخونه های اون مثل جی کوئری و ریکت هنوز استاندارد کار مرورگرها هستند و بنده معتقدم یک توسعه دهنده وب همچنان باید html/css/js رو اگرچه مقدماتی هم که شده، بلد باشه. حداقل بتونه با فرانت اندکارها ارتباط بگیره و بفهمه که چه نیازی دارن و یا اگه روی پروژه کوچیکی کار می کنه خودش بتونه یک فرانت اند مناسب رو بزنه تا زمانی که پروژه بزرگ بشه و فرانت اندکار استخدام بشه. اما شاید روزی ویجت های پایتونی یا PhP هم به استانداردی در مرورگرها تبدیل شدن.

  33. ابوالفضل حسن زاده (خریدار محصول)

    اقای امین اجاقی از این لینک شما میتونید کد رو هم از git hub ببنید. git hub link

  34. ابوالفضل حسن زاده (خریدار محصول)

    ای وای سیستم تگ های html رو پاک اقای اجاقی من واقعا شرمندم که نتونستم خوب کمکتون کنم ولی به link هایی که گذاشتم فکر کنم بتونید خودتون انجام بدید.

  35. ابوالفضل حسن زاده (خریدار محصول)

    سلام به دوست عزیزم اقای امین اجاقی خیلی مخلصیم. خواهش میکنم در واقع هدف اینکه با هم رشد کنیم و اطلاعات , تجربه ها و دانسته هامون رو باهم به اشتراک بگذاریم.
    خب درباره جابه جایی فیلد های یک فرم با crispy_forms

    {% extends ‘base.html’ %}

    {% load crispy_forms_tags %}

    {% block content %}

    {{ form.name | as_crispy_field }}

    {{ form.email | as_crispy_field }}

    {{ form.body | as_crispy_field }}

    Submit

    {% endblock %}

    ببنید اول شما یک container ایجاد میکنید. توش فرم رو درست میکنید بعد بهش کلاس form-group میدید (البته تو این لینک یه جور دیگه استفاده کرده ولی اینجا اینجوری بهتر جواب میده ). حالا توش یه row ایجاد میکیند بعد ستون بندی میکیند. میگید یه div دارم تو صفحه بزرگ 3 قسمت از 12 قسمت رو میگیره در غیر این صورت کل 12 قسمت رو بگیره (یعنی تو هر سطر یه فیلد قرار بگیره) الان توکد بالا فیلد name و email در کنار یکدیگر قرار میگیرد و فیلد body پایین قشنگ همه 12 قسمت رو میگره ولی موقعی که بیاد تو گوشی فیلد ها همشون زیر هم قرار میگیرن. به اون صورت هم میشه از crispy_form برای جابه جایی فیلد ها استفاده کرد. یاعلی .

    سلام استاد خواهش میکنم به خدا من کاری نمیکنم چیزی که بلدم چرا به بقیه نگم بگذارم تو مغزم بمونه واس چی.
    به هر حال ما چیز یادمیگیریم که یه روزی ازش استفاده کنیم. این روزه ها همون روز هاست. حالا یه ضرب المثلی هست که میگه دیگران کاشتند ما خوردیم حالا ما بکاریم دیگران. حالا من یه خورده دستکاریش کنم. دیگران یادگرفتند به ما یاد دادند , حالا ما یاد گرفتیم به دیگران یاد دهیم. 🙂

  36. امین اجاقی (خریدار محصول)

    سلام و درود بر ابوالفضل حسن زاده عزیز و دوست داشتنی دوست خوب و مهربانم با تشکر از راهنمایی شما در رابطه با {{ form | crispy }} که بسیار کاربردی بود و برچسب های نام فیلد ها را بسیار زیبا و جالب سفارسی می کند و من در حال استفاده از این روش نیکو می باشم دوست من آیا درباره تغییر مکان و پوزیشن فیلد ها هم تجربه ای دارید که من را با آن راهنمایی نمائید بسیار ممنون می شود با تشکر فراوان ار مهربانی و محبت شما دوست عزیز برکت خدا بر شما و خانواده محترمتان .

  37. علی حبیب زاده (خریدار محصول)

    سلام و خسته نباشید 🙂
    اومدم یک خط کد اشتباه از فصل اول و مبحث login رو تشریح کنم ..
    شما داخل view مربوط به login کدی به این شکل دارید:
    if user.is_active
    باید بگم که وقتی تیک active یک کاربر False می شود ، وقتی از authenticate استفاده می کنیم ، None بر می گرداند و فرقی با کاربری که تا به حال وجود نداشته است ندارد .. پس ما هیچوقت ارور:
    “Disabled account”
    را نمی بینیم 🙂 ممنون از دوره خوب با توضیح کامل و خوب تر استاد آصفی ..
    و اینکه کم کم داریم به سمت “جنگو پیشرفته” می ریم و نباید روی مباحثی که خیلی کار شده دوباره توضیح مفصل داده بشه ، بعضی وقتا واقعا خسته کننده میشه ولی همچنان روی مباحث جدید همین روال “تشریح کامل و مفصل” رو پیش بگیرید.
    خسته نباشید 🙂

    • مصطفی آصفی

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

      در مورد پیشنهادهای خوبتون ممنونم و البته باید بگم: بله خود من هم راحت ترم که کم تر تکرار کنم ولی خب ممکنه دوستانی باشن که دیرتر مطالب براشون جا میفته و بایستی اون دوستان رو در نظر بگیرم.
      یه روش خوب اینه که موقع پخش فیلم هر جا دیدین دارین خسته میشین دور پخش فیلم رو تند کنید. در VLC Player با زدن کلید + روی صفحه کلید سرعت بالا می‌ره.

  38. امین اجاقی (خریدار محصول)

    با سلام و درود فراوان خدمت دوست و همکار عزیزم ابوالفضل حسن زاده بسیار قدر دان شما و محبت بی کرانتان می باشم خدا برکت فراوان به شما خانواده مهربان پرورتان دهد در مورد موضوع اول این موضوع که در این پروژه من یک فرم نظردهی ایجاد کرده بودم که ارتباطی با پست نداشت ولی توضیحات بسیار کاملتون باعث رشد دانشم شد و در مورد آن نکته بسیار عالی در نظر زیرا هنوز انجام ندادم مطلب کریسپی فرم اکنون می خواهم یک نمونه امتحان کنم بعد به شما اطلاع می دهد با تشکر از همکاری زیبای شما دوست عزیز فراوانی نعمت برای شما و خانواده مهربانتان از خدا می خواهم .

  39. امین اجاقی (خریدار محصول)

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

    • مصطفی آصفی

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

  40. امین اجاقی (خریدار محصول)

    سلام درود بر استاد بزرگ و مهربان مصطفی آصفی عزیز و دوست داشتنی استاد عزیز در نوشتن یک بروژه هستم و در آن یک app کاربری به نام users ایجاد کرده ام و یک فرم login درست کرده ام که کاملا ضحیح عمل می کند اکنون می خواهم ارتباط این صفحه ورود را با یک صفحه دیگر ایجاد کنم که در آن صفحه نیز فرم وجود دارد و من model این فرم را ایجاد کرده ام و همینطور form آن را و در admin نیز قرار داده ام تمام این امور را در app کاربری یعنی users انجام داده ام و سبس در urls و viwes نیز دستورات را کامل نوشته ام و فایل html آن را نیز کامل کرده ولی زمانی که می خواهم از فرم وارد آن صفحه شوم با خطایی روبرو می شود که در مورد آن موضوع اسن که ما اطلاعات app کاربر یعنی users را از خود جنگو فراخوانی می کنیم و این اطلاعات در آنجا نیست .
    ممنون می شود در این مورد توضیحی بدهید که در چنین موردی چگونه باید عمل کنم زمانی که بعد از فرم login صفحه دارم که می خواهم بعد از این فرم بیاید.

  41. ابوالفضل حسن زاده (خریدار محصول)

    سلام به دوست عزیزم اقای امین اجاقی خیلی مخلصیم. خب خدا رو شکر که مشکل order_by حل شد.
    و اما مشکل شما query زدن به دیتابیس کامنت ها و واکشی کامنت ها یک پست خاصی هستش درسته ؟!
    ببنید شما مدل کامنت رو احتمالا اینجوری نوشتید.

    class Comment(models.Model):
    post = models.ForeignKey(Post, on_delete=models.CASCADE, related_name=’comments’)
    full_name = models.CharField(max_length=50)
    email = models.EmailField()
    body = models.TextField()
    active = models.BooleanField(default=True)
    date_added = models.DateTimeField(auto_now_add=True)

    اون ویژگی post که اول نوشته شده درواقع رابط این جدول با جدول پست هاست درسته.
    خب وقتی که یه نمونه از این کلاس ساخته بشه متغیر post دارای یه سری ویژگی از پست مربوطه میشه از مهمترین ویژگی هاش میشه به id اشاره کرد که به این صورت اون رو میتونیم بگیریم post__id. میگیم پست دو تا underline میزنیم بعد اسم ویژگی مورد نظر که ما اینجا id مد نظر مون هست.
    حالا یه نمونه ببینیم.( فرض بر اینه که شما از نگاشت مطلق برای نمایش مطالب هر پست استفاده میکنید همون get_absolute_url)

    def post_detail(request, year, month, day, slug):
    post = get_object_or_404(Post, slug=slug, publish__year=year, publish__month=month, publish__day=day)

    # Post’s Comments
    post_id = post.id
    comments = Comment.objects.filter(post__id=post.id)

    # Handle Comment Form
    if request.method != ‘POST’:
    form = CommentForm()
    else:
    form = CommentForm(data=request.POST)
    if form.is_valid():
    nc = form.save(commit=False) #get the new comment but dont commit it to db we need to filling the post_field
    nc.post = post
    nc.save()
    return redirect(post.get_absolute_url())

    context = {
    ‘post’: post,
    ‘comments’: comments,
    ‘form’: form,
    }
    template_name = ‘detail.html’
    return render(request, template_name, context)

    کد رو شما باهاش اشنا هستید پس نیازی به توضیح نیست. فقط میمونه جایی که فرم valid هستش و میخواد redirect بشه شما مگه نگاشت مطلق رو با get_absolute_url ایجاد نمیکنی پس url مطلق پست رو این تابع برمیگردونه فقط کافیه طبق کد بالا عمل کنید. حالا داخل تمپلت form action=”” method=”” تگ فرم این ویژگی هارو داره .ویژگی action به این صورت action=”{{ post.get_absolute_url }}” ویژگی method به این صورت method=”post”

    برای استایل دادن به form ها در جنگو من خودم از crispy_form استفاده میکنم. استفاده ازش هم خیلی راحته پیشنهاد میکنم این لینک رو ببنید.
    crispy_forms django

    کار خاصی قرار نیست انجام بدید فقط app جانبی رو نصب میکنی معرفی میکنی یه تنظیم کوچولو داره که خودش نوشته بعد تو تمپلت فرم ها اون رو load میکنید به این صورت {% load crispy_forms_tags %} بعد این جوری ازش استفاده میکنید{{ form | crispy }}و تمام فرم شما به شکلی بسیار زیبا و کاربر پسند render میشه. یا علی.

    • مصطفی آصفی

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

  42. امین اجاقی (خریدار محصول)

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

  43. امین اجاقی (خریدار محصول)

    با درود و سلام خدمت استاد بزرگ و گرامی مصطفی آصفی عزیز و مهربان استاد عزیز یک سوال که برایم مطرح شده این است که ما چون فرم ها را در جنگو تعریف می کنیم و بصورت تهیه شده در html فرا خوانی می کنیم چگونه می توانیم با css روی این فرم ها یعنی مکان فیلد ها و یا برچسب های نام آنها طراحی انجام دهیم یا مثلا رنگ پشت زمینه یکی از فیلد ها را تغییر دهیم یا غیره… ؟ با تشکر از مهر محبت فراوان شما استاد گرامی برکت خدا بر شما و خانواده محترم و گرامیتان .

    سلام و درود , و تشکر فراوان از دوست عزیزم ابوالفضل حسن زاده بزرگوار و دوست داشتنی برادر عزیزم آن مسئله را قبلا با روش orderd_by حل کرده بودم زیرا این فرم یک فرم نظر دهی به سایت می باشد مانند همین فرم که اینجا نظرات را می گذاریم به همین دلیل با روش های قبلی عملی نمی شد ولی باز هم در این مورد که به پست اطلاق شود یا همین کامنت ها که از پایگاه داده فرا می خوانیم به روش فراخوانی با آی دی رو اگر کامل توضیح بدید ممنون می شوم یعنی چگونه مطالب را با آی دی آنها از پایگاه داده در فایل views.py فراخوانی کنیم ؟ با تشکر از شما دوست و براردر عزیز و مهربان برکت خدا بر خودتان و خانواده ی محترمتان .

  44. ابوالفضل حسن زاده (خریدار محصول)

    حالا اون یه جور یه واکشی اطلاعات از دیتابیس بود Comment.objects.filter(post__id=post.id) شما از اون related_name هم میتونی اینجوری تو فایل views.py استفاده کنی comments = post.comments.all()

    • مصطفی آصفی

      سلام جناب حسن زاده عزیز. ممنون از بلندنظری شما و این که سعی می کنید مشکل دوستانتون رو هم حل کنید.
      خدا قوت

  45. ابوالفضل حسن زاده (خریدار محصول)

    سلام به دوست عزیزم اقای امین اجاقی خیلی مخلصیم.
    خب ببینید هر پست چند تا کامنت داره هر کامنت مربوط به یک پست هستش پس ما یک ارتباط one to many داریم شما مدل کامنت ها رو که ساختی توش یه فیلد بزار پست. مقدار دهی کن با این models.ForeignKey(Post, on_delete=models.CASCADE, related_name=’comments’) خب تا این جا ما تو فایل models.py بودیم حالا میریم تو فایل views.py تو این فایل احتمالا باید یه تابع به اسم post_detail داشته باشی تو این تابع اون پست مورد نظرت رو که گرفتی حالا این جوری مینویسی comments = Comment.objects.filter(post_id=post.id) بعد این ‘comments’:comments, رو به اون دیکشنری اضافه میکنید.
    حالا تو تمپلت دقیقا مثل پست ها

    {% for comment in comments %}
    {{ comment.name }}
    {{ comment.body }}
    {{ comment.created_at }}
    {% endfor %}
    تو مدل کامنت ها این کلاس رو بنویسید که دیگه نیازی به order_by(‘-created_at’) نباشه اون خودش جدیدترین کامنت رو میاره بالا
    class Meta:
    ordering = [‘-created_at’]

    امیدوارم که مشکل تون حل بشه.

  46. امین اجاقی (خریدار محصول)

    سلام درود بر استاد بزرگ و گرامی مصطفی عاصفی عزیز و دوست داشتنی استاد عزیز من دوباره آموزش ها را دیدم در قسمت آموزش topic دیدم که بوسیله order_by میتوانم این کار را انجام دهم و موضوع برایم حل شد با تشکر از مهربانی های شما استاد مهریبان . برکت خدا بر شما و خانواده محترمتان .

    • مصطفی آصفی

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

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

  47. امین اجاقی (خریدار محصول)

    با سلام و درود فراوان به استاد بزرگ و دوست داشتنی مصطفی عاصفی عزیز استاد روزهای شادی را برایتان آرزومندم چندین زمان است که در حال یاد گیری html و css بودم بخاطر پروژه آژانس دائیم که خدارو شکر به پایان رسید و من اکنون در حال نوشتن وبسایت این پروژه هستم استاد در طول آموزش ها از ابتدا تا به حال برای دریافت آبجکتها از پایگاه داده که در فایل views.py این کار را انجام میدادیم تا متغیری داشته باشیم که در فایل html آن را در یک حلقه قرار دهیم تا در صفحه سایت در مرورگر نمایش دهیم من در این پروژه یک فرم ساخته ام و در صفحه قرار دادم که زمانی که اطلاعاتی در آن ثبت می کنم در پایگاه داده نیز موجود است فقط نمی توانم query از آن در فایل views.py در متغیری ایجاد کنم تا آن را به وسیله حلقه در صفحه قرار دهم از تمام روش های قبلی که شما داده اید استفاده کرده ام ولی چون این یک فرم نظر می باشد و اطلاق به پستی نمی شود نمی توانم ارتباط را خودم پیدا کنم مثلا با روش زیر امتحان می کنم ولی در صفحه ی مرورگر خطا می دهد.
    comments = Comment.objects.get(C
    درون پرانتز نمی دانم چگونه باید کامنت ها را از پایگاه داده فرا بخوانم شما در آموزش ها از id استفاده می کردید من در نمی یابم که در این روش ها منظور فراخوانی id چیست زیرا یکی را بعنوان comment_id در متغیر های ورودی تابع قرار می دهیم و سپس درون پرانتز بالا آن را قرار می دهیم ولی این یک ورودی تابع است که من در نمیابم چگونه id را از درون پایگاه داده فرا می خواند متشکر می شود اگر این موضوع را برایم شرح دهید با تشکر فراوان از مهربانی های شما استاد بزرگ .

  48. ابوالفضل حسن زاده (خریدار محصول)

    سلام استاد خسته نباشید.
    استاد فکرکنم متوجه شدم مشکل از کجاست من تو تمرین ها میخواستم خیلی دیگه تمیز تمرین کنم یه فضای نام هم داده بودم app_name=”account” بعد تو url سراسری هم namespace=”account” که مثلا اینجوری استفاده کنم account:dashboard اما نمیدونم چه مشکلی داشت با این فضای نام بدون این درست بود اما با این اون خطا رو میداد بعد قبل از تست کردن این محیط مجازی رو پاک کردم و پایتون 3.9.1 رو نصب کردم (تا قبل این پایتون 3.8.1 بود) با این نسخه جدید محیط مجازی رو ایجاد و کتابخانه ها رو بر اساس اخرین نسخه پایدار نصب کردم درست شد. خب دوستان خلاصه اگر به یه همچین مشکلی خوردید اول پایتون 3.9.x رو نصب کنید تو تنظیمات سیستم این نسخه رو در اولویت بگذارید بعد محیط مجازی پاک و دوباره با این نسخه ایجاد کنید بعد موقع تمرین هم فضای نامی ندید تا انشالله به این مشکل برنخورید. یا علی.

    • مصطفی آصفی

      سلام و ممنون از شما برای انتقال تجربه. راستش گمان نمی کنم مشکلتون از نسخه پایتون بوده باشه.
      خطایی که بار قبل گزارش کردید به نگاشت url در جنگو ربط داشت و نگاشت url به نسخه پایتون نباید ارتباطی داشته باشه. شایدم من خوب متوجه توضیحتون نشدم.
      در هر صورت خوشحالم که با تلاش مشکلتون رو حل کردید و ممنون که تجربتون رو منتقل کردید.

  49. ابوالفضل حسن زاده

    سلام استاد خسته نباشید. استاد من با یه خطایی درگیرم که هرچی سرچ میکنم فیلم رو بالا پایین میکنم source code رو بررسی میکنم اصلا دلیل وجود این خطا رو نمیدونم. لطفا کمک کنید.

    متن خطا رو بگم.
    Reverse for ‘password_reset_done’ not found. ‘password_reset_done’ is not a valid view function or pattern name

    این برای password_change هم میده.

    • مصطفی آصفی

      سلام به شما. سلامت باشید انشالله.
      ببینید خطای Reverse به معنی پیدا نکردن یک نگاشت url هست. مطمئن بشید که این نگاشت رو در جای درست خودش تعریف کردید:
      path(”, include(‘django.contrib.auth.urls’))

  50. گوشکی (خریدار محصول)

    سلام استاد عزیز خسته نباشید من دوره rest frame work رو دیدم کاشکی میشد این اموزش رو در قالب rest framework اموزش میدادین یا یه توضیح تکمیلی بدید که کمکی کنه ما خودمون در اون قالب پیاده سازیش کنیم

    • مصطفی آصفی

      سلام به شما. بله پیشنهاد خیلی خوبیه. خود بنده هم دوست داشتم که چنین کنم.

      مشکل اینجاست که در این صورت باید برای فرانت اند از فلاتر، ری اکت یا … استفاده می کردیم که مستلزم شناخت قبلی فراگیر هست.
      برای این پروژه البته شما که آموزش Django Rest رو دیدید می تونید با تبدیل مدل ها به سریالایزر خروجی جیسون بسازید. نکته هایی در این تبدیل هست که طبیعتا در بخش نظرات نمیگنجه ولی برای شما که تا این مرحله با جنگو پیش اومدید شدنیه.

      پی‌نوشت: امیدوارم بتونم راهی به لحاظ طراحی سرفصل پیدا کنم که برای پروژه فروشگاهی از API استفاده کنیم.

  51. رضا (خریدار محصول)

    درود بر شما
    این آموزشی رو تهیه کردم و الان قسمت چهارم هستم.مثل همیشه عالی و استاندارد.

    نکته ای رو خواستم در مورد پایچارمتون بگم و اونم این هستش که از اونجایی که جنگو توسط نسخه ی معمولی پایچارم به خوبی ساپورت نمیشه میتونید از نسخه ی pro استفاده کنید و هر زمان که 30 روز رو به اتمام بود از از تریال ریست استفاده کنید.

    راستی این رو هم اضافه کنم برای برخی از دوستان -من از آخرین نسخه ی پایچارم(2020.3.3) و جنگو(3.1.5) و پایتون(3.9.1) برای این پروژه استفاده میکنم و خوشبختانه تا به اینجا مشکلی نبوده و البته در قسمت های قبلی آموزشی هم این اختلاف ورژن برای بنده مشکلی رو ایجاد نکرده.

    • مصطفی آصفی

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

      ضمنا جای خوشحالیه که آموزش براتون مفید بوده. موفق باشید

  52. رضا (خریدار محصول)

    سلام وقت بخیر
    من این دوره رو تهیه کردم
    ای کاش توی قسمت ورود
    فیلد اول میشد هم نام کاربری / هم ایمیل / شماره موبایل رو وارد کنه
    فیلد پاینی هم پسود
    توی پنل ادمین ساخت دسته بندی های بی نهایت رو هم آموزش بدید
    و کار با autocomplte کردن فیلد ها توی پنل ادمین
    طریقه گزارش گیری هم بگید
    این موارد رو توی آموزش های قبلی نگفتید امیدوارم توی این دوره بگید
    تشکر

    • مصطفی آصفی

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

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

  53. محمدجواد

    بسیار عالیه
    لطفا لاگین با موبایل رو هم اضافه کنید
    اگر اتصال api به ippanel رو استفاده کنید تقریبا ۷۰ درصد شرکت های پنل پیامک رو پوشش میده . چون همشون ippanel هستن ففط اسامی سایت هاشون فرق داره
    با تشکر

    • مصطفی آصفی

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

  54. مونا اصغری

    سلام من هم با درخواست دوستمون در مورد ثبت نام از طریق موبایل موافقم ، اگر دوره اش رو بگذارید خیلی برامون مفید خواهد بود
    لطفا یه دوره یا تک جلسه درمورد تفاوت viewset, Modelviewset, Genericviewset و کاربردهای هر کدوم هم مد نظر قرار بدید ممنونم

    • مصطفی آصفی

      سلام به شما و ممنون از پیشنهاتون. با ارجاع به توضیحی که برای دوستمون دادم، پیشنهادهای شما رو یادداشت کردم. انشالله فرصتی دست بده این موارد رو هم اضافه می کنیم.

  55. Faxmodem

    یکی از کمبودها به نظر من ثبت نام از طریق موبایل هستش که ای کاش اینم اعمال کنید داخل پروژه چون الان هر پروژه ای کارفرما ها نیاز دارن یکیش ثبت نام از طریق موبایل هستش …. اینم بگنجونید لطفاً

    • مصطفی آصفی

      سلام به شما. پیشنهاد به جایی دارید اما موضوعی که هست ثبت نام با شماره همراه معمولا در هر سرویس دهنده داخلی یا خارجی API خودش رو داره که در بخش مستندات توسعه دهندگان قرار میدن. ما در این آموزش Django REST (+) در مورد ارتباط گیری با Web API صحبت کردیم و حتی تولید اون با جنگو رو گفتیم.
      سیستم های ثبت نام موبایلی (ارائه کننده خدمات پیامکی) معمولا Web API ارائه می کنن. مراحل کار معمولا به این صورته که شما در اون سرویس دهنده ثبت نام می کنید. بعد در بخش توسعه دهندگانشون توضیح میدن که چطور باید از API استفاده کنید. شما باید کد صدا کردن اون API رو پشت دکمه ثبت نام د رجنگو قرار بدید. باقی مراحل کار به تناسب پارامترهایی که اون سرویس در نظر می گیره کمی متفاوته ولی معمولا روند کلی اینه:
      1- صدا کردن API ثبت نام اون سرویس دهنده با پاس دادن شماره همراه کاربر که خودش وارد و فرم رو سابمیت می کنه
      2- هدایت کاربر (redirect) به صفحه جدیدی که در اون منتظر وارد کردن کد دریافتی کاربر هستیم که اون سرویس دهنده تولید و براش ارسال می کنه و یک نمونه هم به سرور ما برمی گردونه
      3- دریافت جواب اون سرویس دهنده که حاوی کد فعال سازی ارسالی به شماره کاربر هست و مقابسه با اونچه که کاربر وارد کرده
      4- ثبت نام شماره همراه و باقی مشخصات کاربر در فیلدهای USER در صورتی که کد رو درست وارد کرده باشه.

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

  56. محمدمتین محمدی

    فقط این آیا توی این پروژه از rest api استفاده میکنید؟

    • مصطفی آصفی

      خیر تو این پروژه به rest api نمی پردازیم. لطفا سرفصل ها رو با دقت بخونید.
      انشالله در مورد Web API و کاربرد اون در جنگو به ویژه در اتصال به کتابخونه های فرانت اند مثل فلاتر و ریکت حتما یه دوره خواهیم داشت.

  57. محمدمتین محمدی

    سلام خیلی ممنون که بالاخره این پروژه رو انجام میدید ممنونیم
    حتما هم توی این ویدیو خیلی چیز های جدید یاد میگیریم
    تشکر

    • مصطفی آصفی

      سلام سلامت باشید. انشالله که مفید باشه.

دیدگاه خود را بنویسید