محمد پورمحمدی فلاح هستم. BackEnd Developer فریم ورک جنگو (Django). کل این سایت رو با
جنگو ساختم و امکانات خیلی زیادی داره که تو جزییات همه شو توضیح میدم. اما برای این که
حوصله تون سر نره، این جا کلیات رو میگم.
این سایت رو به عنوان یه رزومه کاری حرفه ای برای خودم ساختم. یه سایت فروشگاه کیک و شیرینی
که میتونید به بخش های مختلفش سر بزنید و توش نظر بذارید. سبد خریدتون
رو کامل کنید. جست و جو کنید و بر اساس ویژگی های مختلف محصولات رو مرتب کنید.
حالا اگه تصمیم بگیرید ثبت نام کنید، میتونید با استفاده از ایمیلتون این کار رو انجام بدید.
البته امروزه دیگه برای خیلی ها سخت شده و ثبت نام با شماره تلفن رو ترجیح میدن. به خاطر همین
ثبت نام با شماره موبایل هم داریم و میتونید با شماره تون وارد بشید و با کد یکبار مصرف (OTP)
ثبت نام کنید و وارد بشید. البته خیلی ها هم هستند که دوست دارن با اکانت گوگلشون تو همه جا
عضو بشن. این امکان رو هم براتون فراهم کردم و اگه دوست دارید میتونید با اکانت گوگل و یا گیت هاب
تو این سایت عضو بشید. خلاصه این که کارهایی که برای یه سایت واقعی لازم هست رو انجام دادم که
با کلی چالش مواجه بشم و کلی چیزای جدید یاد بگیرم. اگه دوست دارید راجع به ویژگی های پروژه
بیشتر بدونید، میتونید قسمت جزییات پروژه رو در ادامه بخوونید. اگر هم دوست داشتید با من ارتباط
برقرار کنید، به بخش درباره من مراجعه کنید. ادامه این صفحه به دو بخش
درباره پروژه و درباره من تقسیم میشه که راحت تر بتونید مطلب مورد نظرتون رو پیدا کنید. موفق باشید.
درباره پروژه
تو این پروژه سعی کردم برای خودم چالش ایجاد کنم و حلشون کنم. البته چالش های مفید و کاربردی که
به درد یه پروژه واقعی میخوره و بتونم یه سایت قابل عرضه ارایه بدم.
در ادامه بخش های مختلف سایت و ویژگی هاش رو بررسی میکنیم.
- ثبت نام
-
دیدم تو اکثر سایت های امروزی از شماره تلفن و یا اکانت گوگل برای ثبت نام و ورود استفاده
میشه. همچنین آدرس ایمیل هم برای خیلی از جاها کاربرد داره. خودم عاشق گیت هاب هستم. با
اینکه جاهای زیادی ورود با گیت هاب وجود نداره، اما به عنوان چالش ثبت نام با گیت هاب رو هم
درست کردم.
- ورود
-
برای ورود به سایت، وقتی اکانت میسازیم که خب نام کاربری داریم. اما وقتی با شماره موبایل و یکباررمز
وارد میشیم، اطلاعات خاصی از شخص لاگین کننده در دست نیست و فقط ازش یه شماره داریم. با این حال یه اکانت براش میسازیم. اما
برای تجربه کاربری بهتر، یه فرم به کاربر نشون میدم که اطلاعات مهمش رو پر کنه. اگه دوست
نداشت هم میتونه پر نکنه و بذاره بعدا سر فرصت اون ها رو پر کنه و یا کلا این کار رو نکنه
و همیشه با یکبار رمز وارد بشه. البته خودم این رو توصیه نمیکنم. چون بعضی اوقات سرویس های
ارسال اس ام اس به درستی عمل نمیکنن و موجب معطل شدن میشن. بنابراین توصیه ام اینه که
بعد از ورود با شماره موبایل، یک رمز امن هم انتخاب کنید که در صورت نیاز بتونید به سرعت
لاگین کنید. در عین حال یکبار رمز هم فعال هست و میتونید هم با رمز ثابتتون و هم با یکباررمز وارد حساب کاربریتون بشید.
- ویرایش اطلاعات
-
برای ویرایش اطلاعات، میتونید از روی قسمت پروفایل، اطلاعاتتون رو ویرایش کنید.
البته وقتی عکس میذارید، به جای عکس پیش فرض پروفایل آواتار شما رو نشون میده.
از قسمت تغییر عکس و مشخصات کاربری، میتونید عکس کاربری و یا نام و نام خانوادگی و
اطلاعات فردیتون رو کامل کنید. برای بخش تغییر رمز عبور یا نام کاربری یا ایمل، اول
همه شونو با هم گذاشته بودم. اما به نظرم جالب نشده بود و تصمیم گرفتم که هر کودوم
رو جدا بذارم. چون به نظرم این طوری هم حرفه ای تر هست و هم کاربردی تر. اگه کسی بخواد
نام کاربری و رمز عبور و شماره اش رو هم زمان تغییر بده، انگار کلا شخص جدیدی هست
و میتونه یه اکانت جدید درست کنه. در هر صورت شاید کسی بخواد هر کودومش رو جداگانه
انجام بده. به خاطر همین همه شونو جداگانه گذاشتم.
- بخش محصولات
-
تو قسمت محصولات، با توجه به این که کیک، شیرینی و یا نان رو انتخاب کردین، محصولات مرتبط
رو بهتون نشون میده. به صورت پیش فرض، محصولات بر اساس بیشترین رای مثبت افراد نمایش داده
میشن. اما اگه دوست داشتید میتونید بر اساس قیمت و یا آپشن های دیگه اونها رو مرتب کنید.
یه قسمت تمام محصولات هم داره که میتونید تمامی محصولات رو فارغ از این که چه نوعی هستند به
صورت یکجا ببینید. برای دیدن قسمت علاقه مندی های من، حتما باید ثبت نام کرده باشید و
از توی جزییات یک محصول که در ادامه بهش میرسیم، میتونید یک محصول رو لایک کنید و یا از
لیست علاقه مندی هاتون حذفش کنید. یکی از چالش های بسیار جذاب این قسمت، این بود که موقع
نمایش محصولات، میانگین تعداد رای محصولات رو بهتون نشون میده که تو خیلی از سایت ها هست.
اما یه چیزی که تو دیجی کالا دیده بودم و برام خیلی جالب بود، این بود که بنویسه اون محصول
در حال حاضر به چه تعداد توی سبر خریدمون موجود هست و این رو هم برای بخش محصولات پیاده
سازی کردم و به نظرم خیلی جذاب شده. چیزی هست که تو خیلی از سایت ها پیاده سازی نشده. اما چالش جالبی بود و تونستم انجامش بدم. اگه تعداد محصولات هم زیاد بشه که با استفاده از
صفحه بندی، میتونید محصولات بیشتری رو ببینید.
- جزییات محصولات
-
یکی از بخش هایی که روش خیلی کار کردم، این صفحه است. اطلاعات کاملی از یک محصول رو
به شما نشون میده. این که امتیاز کاربرای ثبت نامی بهش چقدر هست. چند نفر از کاربرا
این محصول رو لایک کردند. عکس ها و توضحیات بیشتر این محصول.
تو خیلی از سایت ها، میشه برای محصولات نظر نوشت و نظر دهی برای همه آزاده. اما از اون
جایی که ممکنه اسپم بشه، برای جلوگیری، مدیر سایت باید نظرات رو تایید کنه تا نمایش داده
بشن. از طرفی تو سایتی مثل دیجی کالا، برای گذاشتن نظر حتما باید ثبت نام کرد. در این صورت
نظرمون ثبت میشه و نیازی به تایید مدیریت نیست و میتونیم ویرایشش هم بکنیم. با این حال
مدیر سایت میتونه نظرات رو حذف کنه. با خودم گفتم ترکیبی از هر دو رو بسازم و به این
ترکیب جالب رسیدم. نظر کاربران ثبت نامی سایت که میتونن برای یک محصول نظر بذارن، نظرشون
رو ویرایش کنن و انتخاب کنن که توی سایت اسمشون نمایش داده بشه یا به صورت ناشناس باقی
بمونن. از طرفی میتونن به هر محصول رای هم بدن. از ۱ ستاره تا ۵ تا. نظر کاربرای ثبت نامی
نیاز به تایید مدیریت نداره و فورا منتشر میشه. اما کاربرایی که ثبت نام نکردن هم میتونن
نظر بدن. با این حال چون اطلاعاتشون ممکنه واقعی نباشه و یا بخوان اسپم کنن، بنابراین
نظرشون تایید نمیشه تا مدیر سایت تاییدشون کنه و پس از اون نمایش داده میشه.
نکته آخر این که خودم همیشه تو دیجی کالا یه مشکلی داشتم. این بود که وقتی میانگین تعداد
رای ها به یه محصول حدود ۴ تا هست و تعداد رای ها هم به نسبت زیاده، نمیشه خوب
تصمیم گرفت که محصول خوبی هست یا نه و مجبور میشم کلی از نظرات رو بخوونم. به خاطر همین،
یه آپشن دیگه هم که انحراف معیار نظرات هست رو تو صفحه جزییات گذاشتم. با داشتن انحراف
معیار نظرات، میشه یه دید بهتری از نظرات کلی داشت.
- خانه
-
در بخش خانه، اطلاعات کلی از سایت رو میبینیم و کمی هم جزییات از بخش های دیگه.
مثلا ۶ محصول آخر از هر دسته رو میتونیم ببینم و یا ۵ کامنت آخری که کاربران بر اساس
علاقه مندی در باره محصولات برامون گذاشتن. بخش اشتراک در خبرنامه هم که تو
همه سایت ها هست گذاشتم. البته تو صفحه خانه نیست و تو فوتر و در همه صفحات قابل
دسترسی هست.
- جست و جو
-
از قسمت جست و جو، میتونید به راحتی به دنبال محصولات مورد نظرتون بگردید. اگه
دنبال کلمه خاصی توی اسم یک محصول میگردید، میتونید فقط چکباکس مربوط به همون
رو فعال کنید. اگه دوست دارید میتونید ترکیبات مختلف رو هم تست کنید.
بحث قیمت جداست. بعد از این که آیتم های چکباکس بررسی شدند، بر اساس قیمت هم
میتونید سرچ کنید. یا کلا میتونید محصولات رو بر اساس قیمتشون سرچ کنید.
فقط دقت کنید که قیمت هایی که وارد میکنید باید مضربی از ۵۰۰۰ تومان باشه.
- مرتب سازی
-
تو بخش های مختلف، میتونید محصولاتی که به شما نمایش داده میشه رو بر اساس ترتیبی
که دوست دارید بچینید تا راحت تر به نتیجه دلخواهتون برسید. مثلا اگه دنبال کیک
تو محدوده قیمت ۳۰۰ تا ۵۰۰ هزار تومان هستید، میتونید اول این محدوده رو جست و جو
کنید و بعد تو نتایج، بزنید که اونها رو براتون به ترتیب قیمت از گرانترین
مرتب کنه. یا مثلا پرطرفدار ترین و یا هر نوع دیگه که دوست دارید.
- سبد خرید
-
از قسمت های جذاب پروژه، سبد خرید هست. وقتی کاربری میاد به سایت و ثبت نام نکرده،
میتونه سبد خریدش رو پر کنه و اگه قصد خرید داشت، اون موقع ثبت نام کنه.
و تا اون موقع اطلاعاتش تو سشن ذخیره میشه. بنابراین اگه ثبت نام نکرده باشین و
بروزر رو ببنید و یا مدت خیلی طولانی به سایت سر نزنید، سبد خرید حذف میشه. اما کاربرایی
که ثبت نام کردن، علاوه بر سشن، سبد خریدشون تو دیتابیس هم ذخیره میشه. یعنی این که اگه
با گوشی تون دو تا محصول اضافه کردید و بعد فرصت نشد که خرید رو تکمیل کنید. وقتی میرید
سراغ لپتاپ و یا یه دستگاه دیگه و با اون لاگین میکنید، سبد خریدتون بازیابی میشه.
راجع به جزییات فنی اش صحبت نمیکنم. اما خیلی چیز جالبی شده.
- تکمیل سفارش
-
این قسمت دیگه جاییه که اگه اسم و فامیلتون رو تا حالا وارد نکردید،
نمیتونید از دستش در برید و حتما باید اسم و فامیلتون رو بنویسید.
چون به هر حال این سفارش قراره به یکی تحویل داده بشه.
از اون جایی که گفتم شاید کسی نخواسته که اسم و فامیلش رو جداگانه موقع ثبت نام پر کنه، یه قسمت اینجا
گذاشتم با عنوان (در حساب کاربری من نیز، نام و نام خانوادگی را ذخیره کن) که حالا که
شخص داره اینجا اسمش رو پر میکنه، اگه خودش هست، اطلاعاتش رو تو حسابش هم کامل کنه.
البته اگه دوست داشت. اگه دوست نداشت که میتونه این تیک رو نزنه. در هر صورت این بخش
فقط برای اسم و فامیل هست و برای شماره تلفن نیست. چون ممکنه که هر بار برای یک خانواده،
شخص متفاوتی بخواد سفارش رو تحویل بگیره که شماره اش فرق داره. اما شماره ثبت نامی برای
دریافت کد یکبار رمز هست که امنیتی هست و اون رو اینجا نذاشتم که تغییر داده بشه.
- پرداخت
-
پس از پرداخت، کد پیگری در سایت به شما نمایش داده میشه. همچنین برای شماره ای که موقع
سفارش ثبت کردید هم اس ام اس ارسال میشه. اگر آدرس ایمیل هم برای اون حساب ساخته باشید،
یه ایمیل هم براش ارسال میشه. در حال حاضر، درگاه پرداخت تستی زرین پال (سندباکس)
به درستی کار نمیکنه و وقتی به سندباکسشون وصل میشیم ارور ۵۰۰ میده. تا چند وقت
پیش که کار میکرد، شما میتونستید بدون پرداخت هزینه و با کلیک کردن روی این که
پرداخت موفقیت آمیز بوده یا شکست خورده، نتیجه رو به سایت اعلام کنید و بر اساس
اون نتیجه، مرحله آخر به پایان میرسید. اما برای این که فعلا به این
مشکل برنخوریم، تو سایت این شکلی گذاشتم که سعی کنه به اون صفحه وصل بشه، اگه شد
که شما انتخاب میکنید پرداختتون موفقیت آمیز باشه یا نه و مراحل ادامه داره.
اما اگه نتونست فرض کردم که پرداخت موفقیت آمیز بوده و سفارش شما پرداخت شده در
نظر گرفته میشه و براتون کد پیگیری ارسال میشه در صورتی که درگاه مناسبت تری
پیدا کردم به زودی این مورد رو هم اصلاح میکنم.
- سفارش های من
-
تو این قسمت میتونید سفارش های ثبت شده خودتون رو ببینید.
البته تو بخش اولش کلیات یک سفارش هست. با کلیک کردن رو قسمت جزییات بیشتر،
میتونید اطلاعات کاملی از اون سفارشتون رو ببینید.
- هدف بعدی پروژه
-
برای فاز بعدی پروژه، اضافه کردن API مد نظرم هست تا پروژه کاملتری بشه.
درباره من
محمد پورمحمدی فلاح هستم. متولد ۲۵ آبان ۱۳۶۹
فارغ التحصیل رشته مهندسی کامپیوتر از دانشگاه صنعتی شریف
زبان ها، فریم ورک ها و ابزارهای برنامه نویسی
- پایتون، جنگو، وی اس کد، اندروید استودیو، PyCharm, MySql، MySql Workbench (حرفه ای)
- دارت، جاوا اسکریپت، flutter، sqlite، HTML, CSS, Bootstrap, Git (خیلی خوب)
- C، C++، جاوا، ویژوال استودیو، mongo، hive (خوب)
- آشنا با داکر، PostgreSql
تجربه کاری
از سال ۱۳۹۹ در موسسه پل استار به رده سنی کودک و نوجوان برنامه نویسی آموزش میدم.
بسیاری از این مهارت ها رو در اونجا تقویت کردم و همراه با آموزش، خودم هم کلی رشد کردم.
کلاس آنلاین هم برگزار میکنم که اطلاعات بیشتر در مورد تدریس رو میتونید در سایت استاد سلام ببینید.
اما هدفم با طراحی این سایت، اینه که مهارت هام رو به نمایش بذارم و بهتر دیده بشم
و بتونم پروژه های جدی تری بگیرم و انجام بدم و درآمد بیشتری
کسب کنم. همیشه آموزش رو دوست داشتم و چند وقتی هست که کانال آپارتم رو راه اندازی
کردم. دوره پایتون رو تقریبا تکمیل کردم. البته یه بخش هاییش هنوز مونده.
انشالله سر فرصت تصمیم دارم مطالب دیگه رو هم که بلدم در اختیار دیگران قرار بدم.
پروژه های انجام شده با پایتون
- پروژه نیروگاه گازی قائن
-
این پروژه برای ذخیره اطلاعات نیروگاه گازی قائن نوشته شده که با زبان پایتون و
دیتابیس مای اس کیو ال نوشته شده. با توجه به رضایت سفارش دهنده پروژه، کد
نوشته شده به صورت open source روی گیت هاب منتشر شده و میتونید با کلیک کردن روی
عنوان همین بخش ببینیدش.
- پروژه API فیلم و سریال و موسیقی
-
این پروژه جهت اهداف آموزشی (آموزش بحث API جنگو) برای موسسه پل استار نوشته
شده است. خروجی نمونه را میتوانید در codefather1369.ir/movies مشاهده کنید.
البته اون پروژه رو موقع یادگیری نوشته بودم و تصمیم دارم یه مورد بهترش رو برای همین
شیرینی فروشی پیاده سازی کنم.
اطلاعات تماس
- همراه: ۰۹۳۵۶۶۴۰۲۰۴
- آدرس ایمیل: mohammad.pfallah@gmail.com
شبکه های اجتماعی
علایق فردی
پیاده روی - بازی های دسته جمعی - تماشای فیلم - بازی های کامپیوتری - شنا
تشکر
از همسرم فاطمه معتمد که عشق و علاقه زیادش به آشپزی و شیرینی پزی، ایده ساخت این سایت رو بهم داد.
و با انگیزه هدیه کردن این سایت به همسرم، ساخت سایت رو شروع کردم و راه اندازیش کردم.
حرف آخر
اگه لامپ این صفحه رو روشن کردیدD: ببخشید که ظاهرش به قشنگی و جذابیت صفحات دیگه
نیست. برای این جذابیت چراغ قوه کم نشه و کلمات دیده نشن، مجبور شدم رنگ لینک ها رو
عوض کنم و از عکس تو این صفحه استفاده نکنم تا همه جا تاریک باشه :)
جزییات فنی پروژه
- بخش بک اند
- با زبان برنامه نویسی پایتون و فریم ورک جنگو پیاده سازی شده
- کتابخانه های نصبی
-
- django-debug-toolbar
- جهت نوشتن کدهای بهینه و بهتر ORM جهت بهبود عملکرد پروژه
- django-allauth
- برای قسمت ثبت نام و ورود و مدیریت حساب کاربری و همچنین ورود با گوگل و گیت هاب
- django-crispy-forms
- جهت نمایش بهتر فرم های بوت استرپ
- django-rosetta
- برای دو زبانه کردن سایت
- environs
- جهت ذخیره متغیرهای مهم و رمزهای استفاده شده در کدها در متغیرهای محیطی (همون environment variables خودمون :) ) جهت امنیت بیشتر اطلاعات
- ghasedakpack
- برای ارسال اس ام اس از سرویس ارسال اس ام اس قاصدک استفاده شده
- pillow
- برای کار با عکس ها در سایت
- requests
- برای ارسال درخواست به بانک جهت پرداخت
- az-iranian-bank-gateways
- جهت کار کردن با درگاه های بانکی
- django-jalali-date
- جهت کار با تاریخ شمسی برای ذخیره اطلاعات
- بخش فرانت اند
- اچ تی ام ال، سی اس اس، جاوا اسکریپت و بوت استرپ
- سورس کد پروژه
- کل کدهای نوشته شده را میتوانید از آدرس گیت هاب من و ریپازیتوری confectionery دریافت کنید.
منابع متفرقه پروژه
همونطور که گفتم، تخصص من بک اند هست. اما فرانت هم کار کردم. HTML, CSS, JS رو تا میزان خیلی خوبی
باهاشون آشنایی دارم. و با بوت استرپ هم کار کردم. اما هنوز خیلی مونده تا یه فول استک کامل بشم.
برای فرانت این پروژه، از جاهای مختلفی استفاده کردم که به قرار زیرند :)
- Free Css
-
یک سایت خوب برای دانلود قالب های آماده که خیلی هاشون هم رایگان هستند. قالب کلی سایتی که ساختم رو از این سایت برداشتم. البته قالبی که
انتخاب کردم سبد خرید و صفحه جزییات و خیلی از چیزها رو نداشت که خودم با بوت استرپ
پیاده سازیشون کردم.
- uiverse
-
یه سایت خوب دیگه که توش پره از کمپوننت های آماده و جذاب. مثلا
همین شبکه های اجتماعی که تو فوتر هر صفحه میبینید و با حرکت دادن ماوس روشون
رنگشون خیلی قشنگ تغییر میکنه رو از اینجا برداشتم. البته شبکه آپارات رو خودم
شخصی سازیش کردم که چالش جالبی بود و گرادیانت اینستاگرامش رو به همه شبکه های دیگه
هم تعمیم دادم.
- net copy
-
یه سایت ایرانی خوب که پر از قالب و اسکریپت برای سایت های فارسی هست.
صفحه ۴۰۴ و صفحات مشابهش رو از این سایت برداشتم.
- کدهای قبلی خودم روی سایت گیت هاب
-
خیلی از پروژه های مختلف خودم رو روی گیت هاب گذاشتم. یک چراغ قوه با جاوا اسکریپت
هم درست کردم که جالب بود و رو گیت هاب گذاشتم و شما هم میتونید ازش استفاده کنید. البته
تو این سایت برای همین صفحه فقط استفاده شده و البته یه کم هم تغییرش دادم.
چون نوشته ها زیادند و اسکرول ماوس رو لازم داریم، به جای اسکرول کردن از دکمه
های + و - برای بزرگ کردن و کوچیک کردن سایز چراغ قوه استفاده کردم.