✅ معرفی منابع یادگیری جنگو
توی این ویدئو چند تا دوره خارجی و ایرانی رو معرفی کردم
همچنین چندتا کتاب مفید و گروه مفید هم معرفی کردم
در مورد کنفرانس های جنگو هم مطالبی گفتم
نکاتی هم در مورد دیدن ویدئوها ارائه کردم
البته یکم تبلیغیه وگرنه خیلی از دوستان رو باید معرفی میکردم 😊
✔️ لینک آپارت:
https://www.aparat.com/v/qxCze
✔️ لینک یوتیوب:
https://youtu.be/jn9B59M4x3c
توی این ویدئو چند تا دوره خارجی و ایرانی رو معرفی کردم
همچنین چندتا کتاب مفید و گروه مفید هم معرفی کردم
در مورد کنفرانس های جنگو هم مطالبی گفتم
نکاتی هم در مورد دیدن ویدئوها ارائه کردم
البته یکم تبلیغیه وگرنه خیلی از دوستان رو باید معرفی میکردم 😊
✔️ لینک آپارت:
https://www.aparat.com/v/qxCze
✔️ لینک یوتیوب:
https://youtu.be/jn9B59M4x3c
آپارات - سرویس اشتراک ویدیو
معرفی منابع یادگیری جنگو
توی این ویدئو چند تا دوره خارجی و ایرانی رو معرفی کردم
همچنین چندتا کتاب مفید و گروه مفید هم معرفی کردم
در مورد کنفرانس های جنگو هم مطالبی گفتم
نکاتی هم در مورد دیدن ویدئوها ارائه کردم
همچنین چندتا کتاب مفید و گروه مفید هم معرفی کردم
در مورد کنفرانس های جنگو هم مطالبی گفتم
نکاتی هم در مورد دیدن ویدئوها ارائه کردم
🥰1
✅ نکته از کتاب جنگو دیزاین پترن درباره اپ های جنگو
Ideally, each app must be reusable and loosely coupled to others. You can create as many apps as you need. Never be afraid to add more apps or refactor the existing ones into multiple apps. A typical Django project contains 15-20 apps.
و من الله التوفیق
Ideally, each app must be reusable and loosely coupled to others. You can create as many apps as you need. Never be afraid to add more apps or refactor the existing ones into multiple apps. A typical Django project contains 15-20 apps.
و من الله التوفیق
👍1
✅ شما برای ساختن محیط ایزوله از کدوم استفاده میکنید؟
virtualenv or python -m venv or pipenv
لینک زیر رو بخونید. هر کسی دلیل خودش رو گفته. من خودم از python -m venv استفاده میکنم.
https://stackoverflow.com/questions/41573587/what-is-the-difference-between-venv-pyvenv-pyenv-virtualenv-virtualenvwrappe
virtualenv or python -m venv or pipenv
لینک زیر رو بخونید. هر کسی دلیل خودش رو گفته. من خودم از python -m venv استفاده میکنم.
https://stackoverflow.com/questions/41573587/what-is-the-difference-between-venv-pyvenv-pyenv-virtualenv-virtualenvwrappe
Stack Overflow
What is the difference between venv, pyvenv, pyenv, virtualenv, virtualenvwrapper, pipenv, etc?
Python 3.3 includes in its standard library the new package venv. What does it do, and how does it differ from all the other packages that match the regex (py)?(v|virtual|pip)?env?
✅ پترن یا متدولوژی ۱۲ فاکتور چیه؟
The Twelve Factors
توی لینک زیر آقای محمد قدسیان این ۱۲ اصل رو خیلی ساده و قشنگ توضیح دادن.
از گیت هاب https://github.com/arocks و ریپو edge به این ۱۲ اصل رسیدم.
✔ لینک مقاله فارسی در ویرگول:
https://virgool.io/@mohammad.ghodsian/twelve-factor-app-methodology-blw5cti9tkem
The Twelve Factors
توی لینک زیر آقای محمد قدسیان این ۱۲ اصل رو خیلی ساده و قشنگ توضیح دادن.
از گیت هاب https://github.com/arocks و ریپو edge به این ۱۲ اصل رسیدم.
✔ لینک مقاله فارسی در ویرگول:
https://virgool.io/@mohammad.ghodsian/twelve-factor-app-methodology-blw5cti9tkem
Forwarded from Django Expert (Mohammad Babazadeh)
✔️ معماری مونولیتیک چیست؟
بررسی ۳ الگوی طراحی رایج در معماری های یکپارچه نرم افزار:
1. Single Monolithic
2. Modular Monolithic
3. Layered Monolithic
✅ پیشنهاد میکنم این ویدئو رو حتما ببینید چون به درک بهتری از معماری ماژولار و لایه بندی شده فریمورک Django میرسید.
🖥 مشاهده در یوتوب
👉 Link: https://youtu.be/QnBZnW3qzwk
#monolithic #software_architecture #bobycloud
〰️〰️〰️〰️〰️〰️
©@DjangoEx | @AI_Python | @BobyDotCloud
بررسی ۳ الگوی طراحی رایج در معماری های یکپارچه نرم افزار:
1. Single Monolithic
2. Modular Monolithic
3. Layered Monolithic
✅ پیشنهاد میکنم این ویدئو رو حتما ببینید چون به درک بهتری از معماری ماژولار و لایه بندی شده فریمورک Django میرسید.
🖥 مشاهده در یوتوب
👉 Link: https://youtu.be/QnBZnW3qzwk
#monolithic #software_architecture #bobycloud
〰️〰️〰️〰️〰️〰️
©@DjangoEx | @AI_Python | @BobyDotCloud
This media is not supported in your browser
VIEW IN TELEGRAM
تلفظ درست جنگو - از لینکدین علی خلف نژاد
👍1
✅ The Power of Django ORM
مقاله ای در مورد جنگو از صدرا یحیی پور
در مورد Django ORM
- What is ORM
- Use Exceptions in get()
- Django connection
- Iterators
- Set The Timeout
- ORM Best Tricks
-- F() Function
-- Aggregations
-- len() or count()
-- bulk() For Ever
✔ لینک:
https://imsadra.me/the-power-of-django-orm
مقاله ای در مورد جنگو از صدرا یحیی پور
در مورد Django ORM
- What is ORM
- Use Exceptions in get()
- Django connection
- Iterators
- Set The Timeout
- ORM Best Tricks
-- F() Function
-- Aggregations
-- len() or count()
-- bulk() For Ever
✔ لینک:
https://imsadra.me/the-power-of-django-orm
Sadra Yahyapour
The Power of Django ORM
Object Relational Mapping functions and methods help you to interact with the DB in an optimized way. See what I got for you today.
👍3
✅ مطلبی از دانیال کیماسی، مهندس نرم افزار از کوئرا - Django و Nextjs
ما توی کوئرا حدود یک سالی هست که از Nextjs استفاده میکنیم. از همون ابتدا برای integration بین Django و Next.js پکیجی رو توسعه دادیم که به تازگی داخل گیتهاب منتشر کردیم.
داخل این مقاله شیوه انجام این کار رو توضیح دادم و همینطور یه راهنمایی اولیه برای استفاده از این پکیج قرار داده شده.
✔ لینک مقاله در Medium:
https://medium.com/@danialkeimasi/django-next-js-the-easy-way-655efb6d28e1
✔ لینک ریپو گیتهاب:
https://github.com/QueraTeam/django-nextjs
ما توی کوئرا حدود یک سالی هست که از Nextjs استفاده میکنیم. از همون ابتدا برای integration بین Django و Next.js پکیجی رو توسعه دادیم که به تازگی داخل گیتهاب منتشر کردیم.
داخل این مقاله شیوه انجام این کار رو توضیح دادم و همینطور یه راهنمایی اولیه برای استفاده از این پکیج قرار داده شده.
✔ لینک مقاله در Medium:
https://medium.com/@danialkeimasi/django-next-js-the-easy-way-655efb6d28e1
✔ لینک ریپو گیتهاب:
https://github.com/QueraTeam/django-nextjs
Medium
Django + Next.js The Easy Way
After reading this article, you can create or enhance your projects using the many convenient features of Next.js and Django.
✅ سال 1401 رو با مطلبی در مورد django migrations شروع کنیم.
✔ فرض کنید 2 برنامه نویس علی و رضا همزمان روی یک یا چند مدل دارن تغییرات میدن و هر کدوم مایگریشن های خودشون رو میسازن و روی دیتابیس لوکال مایگریت می کنن. بعد از تکمیل کارشون همه چی رو commit و push میکنن.
حالا ممکنه وقتی میخواهیم روی سرور مایگریت کنیم خطای Conflicting migrations detected رو ببینم. دلیلش هم مشخصه.
❓راهکار شما اینجا چیه؟
- بعضی ها کلا فولدر migrations رو ignore میکنن. (در این صورت اگه data migration داشته باشیم به فنا میره)
- بعضی ها توی تغییرات دیتابیسی سخت گیری میکنن و برنامه نویس اجازه نداره بدون هماهنگی تغییری در مدل ها اعمال کنه. (البته اگه قبل از کدنویسی تحلیل درستی داشته باشیم تغییرات حین توسعه به حداقل میرسه)
- بعضی ها هم تغییرات دیتابیس رو دستی روی سرور اعمال میکنن. (یکم مطمئن نیست و ممکنه باعث خطا بشه)
✔ اما جنگو توی داکیومنت ها صراحتا گفته که مایگریشن ها جزئی از کدبیس هستن. پس نباید ignore کنیم.
✔ جنگو کامند -merge رو برای مشکل conflict داره که می تونیم ازش استفاده کنیم.
مقاله زیر رو بخونید، در این مورد توضیح داده:
https://www.algotech.solutions/blog/python/django-migrations-and-how-to-manage-conflicts/
✔ فرض کنید 2 برنامه نویس علی و رضا همزمان روی یک یا چند مدل دارن تغییرات میدن و هر کدوم مایگریشن های خودشون رو میسازن و روی دیتابیس لوکال مایگریت می کنن. بعد از تکمیل کارشون همه چی رو commit و push میکنن.
حالا ممکنه وقتی میخواهیم روی سرور مایگریت کنیم خطای Conflicting migrations detected رو ببینم. دلیلش هم مشخصه.
❓راهکار شما اینجا چیه؟
- بعضی ها کلا فولدر migrations رو ignore میکنن. (در این صورت اگه data migration داشته باشیم به فنا میره)
- بعضی ها توی تغییرات دیتابیسی سخت گیری میکنن و برنامه نویس اجازه نداره بدون هماهنگی تغییری در مدل ها اعمال کنه. (البته اگه قبل از کدنویسی تحلیل درستی داشته باشیم تغییرات حین توسعه به حداقل میرسه)
- بعضی ها هم تغییرات دیتابیس رو دستی روی سرور اعمال میکنن. (یکم مطمئن نیست و ممکنه باعث خطا بشه)
✔ اما جنگو توی داکیومنت ها صراحتا گفته که مایگریشن ها جزئی از کدبیس هستن. پس نباید ignore کنیم.
✔ جنگو کامند -merge رو برای مشکل conflict داره که می تونیم ازش استفاده کنیم.
مقاله زیر رو بخونید، در این مورد توضیح داده:
https://www.algotech.solutions/blog/python/django-migrations-and-how-to-manage-conflicts/
Algotech Solutions
Django Migrations and How to Manage Conflicts - Algotech Solutions
Migrations are one of Django’s most useful features, but for me, personally, it was a dreadful task to take care of model changes. Despite reading the docs, I was still scared of migration conflicts or losing the data or having to manually modify the migration…
✅ تفاوت OpenAPI و Swagger چیست؟
اگه تا حالا از swagger برای مستندسازی API هاتون استفاده کرده باشید. قطعا OpenAPI هم کنارش به چشمتون خورده.
✔ خیلی خودمونی و نادقیق بخوام بگم. OpenAPI یه استاندارد برای توصیف API هست و Swagger مجموعه ابزارهایی هست که از OpenApi استفاده میکنه و بصری سازی و... میکنه.
OpenAPI = Specification
Swagger = Tools for implementing the specification
✔ این یعنی ما میتونیم به جای swagger از ابزارهای دیگه ای هم استفاده کنیم. مثل redoc یا حتی خودمون ابزاری شبیه به اینا بسازیم.
جزییات بیشتر رو از لینک زیر بخونید:
https://swagger.io/blog/api-strategy/difference-between-swagger-and-openapi/
اگه تا حالا از swagger برای مستندسازی API هاتون استفاده کرده باشید. قطعا OpenAPI هم کنارش به چشمتون خورده.
✔ خیلی خودمونی و نادقیق بخوام بگم. OpenAPI یه استاندارد برای توصیف API هست و Swagger مجموعه ابزارهایی هست که از OpenApi استفاده میکنه و بصری سازی و... میکنه.
OpenAPI = Specification
Swagger = Tools for implementing the specification
✔ این یعنی ما میتونیم به جای swagger از ابزارهای دیگه ای هم استفاده کنیم. مثل redoc یا حتی خودمون ابزاری شبیه به اینا بسازیم.
جزییات بیشتر رو از لینک زیر بخونید:
https://swagger.io/blog/api-strategy/difference-between-swagger-and-openapi/
SmartBear.com
What is OpenAPI? Swagger vs. OpenAPI | Swagger Blog
This year marked the official release of OpenAPI 3.0, the latest version of the OpenAPI specification.For those involved in API development, the release of OAS 3.0 is, well... kind of a big deal.Why? One of the most notable reasons why the release is so important…
👍4
Forwarded from Django Expert (Sadra)
متد setUp و tearDown در یونیت تستینگ پایتون!
در این پست سعی کردم یه نگاه به این قضیه داشته باشیم و ببینیم چطور میشه با استفاده از این دو متد، خوانایی تست ها رو یه لول بالاتر ببریم و DRY رو رعایت کنیم. تا اینجا اومدیم.. یه سر هم میزنیم به جنگو. اینکه جنگو درواقع چطور از این مکانیزم واسه ایجاد یک دیتابیس کش در کلاس TestCase خودش استفاده میکنه و یه محیط ایزوله برای اجرای تست ها میسازه!
اگه پست رو مفید دیدید، حتما به اشتراک بذارید. :)❤️
https://imsadra.me/setup-and-teardown-in-python-unit-testing
〰️〰️〰️〰️〰️〰️
©@DjangoEx
در این پست سعی کردم یه نگاه به این قضیه داشته باشیم و ببینیم چطور میشه با استفاده از این دو متد، خوانایی تست ها رو یه لول بالاتر ببریم و DRY رو رعایت کنیم. تا اینجا اومدیم.. یه سر هم میزنیم به جنگو. اینکه جنگو درواقع چطور از این مکانیزم واسه ایجاد یک دیتابیس کش در کلاس TestCase خودش استفاده میکنه و یه محیط ایزوله برای اجرای تست ها میسازه!
اگه پست رو مفید دیدید، حتما به اشتراک بذارید. :)❤️
https://imsadra.me/setup-and-teardown-in-python-unit-testing
〰️〰️〰️〰️〰️〰️
©@DjangoEx
Sadra Yahyapour
setUp & tearDown in Python Unit Testing
I'm pretty sure you've already used/seen unit tests in the projects before. Have you ever wondered about how Django actually prepares you an isolated environment for testing your project without affecting other resources like your database? Before we...
👍4👎1
✅ پاسخ به سوال یکی از دوستان در مورد اینکه چطور بدون کارآموزی سطح خودمو بالا ببرم؟
اینقدر زیاد نوشتم که گفتم توی کانال هم منتشر کنم 😅
قطعا شما یه سری دوره و آموزش دیدید.
و احتمالا به سطح متوسط به پایین رسیدید.
الان جای اینکه کارآموزی بدون حقوق کنید.
توی جابینجا یا بقیه سایت های کاریابی ببینید برای جنگو کارها چیا لازمه.
✔️و بعدش حتما حتما حداقل ده یا بیست تا مصاحبه هم بدید.
همه رو هم انلاین مصاحبه بده که هزینه نداشته باشه.
برای اینکه دعوت به مصاحبه بشید (دقت کنید برای کارآموزی رزومه ندید برای برنامه نویس middle رزومه بدید)
✔️ برای هر فرصت شغلی (شرکت) رزومه مخصوص اون شرکت رو آماده کنید و از روی چیزهایی که می خوان رزومه بسازید. طوری که حداقل 90 درصد نیازهای اونارو پوشش بده. و روزمه های ارسالی رو تک تک نگه دارید.
قبل مصاحبه هم رزومه ارسالی برای اون شرکت رو نگاه کنید و در مورد چیزهایی که میخوان یکم مطالعه کنید.
توی مصاحبه ها و با توجه به سوالاتی که میپرسن متوجه میشید ایده آل ها چیا هستن (هر چند وقتی میرید توی شرکت همش اسپاگتی ان)
بعد از مصاحبه ها دو حالت داره. یا استخدام میشید به عنوان برنامه نویس متوسط یا نه
✔️اگه نه (که احتمال نه خیلی زیاده) همه نکات رو یادداشت میکنید و روی اونا خودتون رو قوی می کنید. این میشه کارآموزی در خانه
روش بالا یکم اخلاقی شاید نباشه 😅
✔️برای اینکه سطح خودتون هم بالا ببرید
- کتاب هایی مثل جنگو دیزاین پترن. two scope. django api و... رو بخونید.
- افراد حرفه ای (واقعی) رو دنبال کنید
- کنفرانس های djanocon هم توی یوتیوب ببینید.
- ریپازیتوی های جنگو اوپن سورس با star بالا رو پیدا کنید و با کدنویسی شون آشنا بشید.
اینقدر زیاد نوشتم که گفتم توی کانال هم منتشر کنم 😅
قطعا شما یه سری دوره و آموزش دیدید.
و احتمالا به سطح متوسط به پایین رسیدید.
الان جای اینکه کارآموزی بدون حقوق کنید.
توی جابینجا یا بقیه سایت های کاریابی ببینید برای جنگو کارها چیا لازمه.
✔️و بعدش حتما حتما حداقل ده یا بیست تا مصاحبه هم بدید.
همه رو هم انلاین مصاحبه بده که هزینه نداشته باشه.
برای اینکه دعوت به مصاحبه بشید (دقت کنید برای کارآموزی رزومه ندید برای برنامه نویس middle رزومه بدید)
✔️ برای هر فرصت شغلی (شرکت) رزومه مخصوص اون شرکت رو آماده کنید و از روی چیزهایی که می خوان رزومه بسازید. طوری که حداقل 90 درصد نیازهای اونارو پوشش بده. و روزمه های ارسالی رو تک تک نگه دارید.
قبل مصاحبه هم رزومه ارسالی برای اون شرکت رو نگاه کنید و در مورد چیزهایی که میخوان یکم مطالعه کنید.
توی مصاحبه ها و با توجه به سوالاتی که میپرسن متوجه میشید ایده آل ها چیا هستن (هر چند وقتی میرید توی شرکت همش اسپاگتی ان)
بعد از مصاحبه ها دو حالت داره. یا استخدام میشید به عنوان برنامه نویس متوسط یا نه
✔️اگه نه (که احتمال نه خیلی زیاده) همه نکات رو یادداشت میکنید و روی اونا خودتون رو قوی می کنید. این میشه کارآموزی در خانه
روش بالا یکم اخلاقی شاید نباشه 😅
✔️برای اینکه سطح خودتون هم بالا ببرید
- کتاب هایی مثل جنگو دیزاین پترن. two scope. django api و... رو بخونید.
- افراد حرفه ای (واقعی) رو دنبال کنید
- کنفرانس های djanocon هم توی یوتیوب ببینید.
- ریپازیتوی های جنگو اوپن سورس با star بالا رو پیدا کنید و با کدنویسی شون آشنا بشید.
👍20
✅ اپ core در پروژه فروشگاه اوپن سورس saleor که با جنگو توسعه داده شده!
✔️ معمولا توی core کارهای فریمورکی رو انجام میدیم. یعنی چیزهایی که مربوط به پروژه هست و میتونیم توی پروژه های دیگه هم استفاده کنیم، توی core می گذاریم.
یعنی کدهایی مثل کارهای لاگ گیری. مثل caching مثل jwt (کدهای resuable)
✔️ اینها چیزهایی هستن که ممکنه توی بقیه پروژه ها هم بنویسیم پس میبریم توی یه اپ به اسم core
لینک پروژه saleor در گیت هاب (فورک شده):
https://github.com/miladhzz/saleor
✔️ معمولا توی core کارهای فریمورکی رو انجام میدیم. یعنی چیزهایی که مربوط به پروژه هست و میتونیم توی پروژه های دیگه هم استفاده کنیم، توی core می گذاریم.
یعنی کدهایی مثل کارهای لاگ گیری. مثل caching مثل jwt (کدهای resuable)
✔️ اینها چیزهایی هستن که ممکنه توی بقیه پروژه ها هم بنویسیم پس میبریم توی یه اپ به اسم core
لینک پروژه saleor در گیت هاب (فورک شده):
https://github.com/miladhzz/saleor
👍8
✅ اگه نرمال سازی دیتابیس رو خونده باشید با کلید اصلی و کلید کاندید و ... آشنا هستید
بعضی مواقع کلید اصلی میتونه ترکیبی از چند فیلد باشه
یعنی ممکنه جدول ستون id به عنوان کلید اصلی نداشته باشه و به جاش دو یا چند تا فیلد با هم، یک کلید اصلی (primary key) رو ایجاد کنند
✔️ همونطوری که می دونید جنگو جفت کلید رو به صورت مستقیم پشتیبانی نمی کنه
اما برای هندل کردن این موضوع unique_together رو ارائه کرده و ما میتونیم توی مدل ها ازش استفاده کنیم و دو یا چند تا فیلد رو با هم unique کنیم
وقتی دو تا فیلد با هم unique_together میشن دیگه این دو تا ستون با همدیگه تکرار نمیشن. دقیقا همون رفتار جفت کلید اصلی توی دیتابیس هارو داره
برای مطالعه بیشتر در موردش لینکهای زیر رو بخونید:
https://docs.djangoproject.com/en/4.0/ref/models/options/#unique-together
https://gsilvapt.iss.one/posts/django-how-to-properly-modify-unique-together/
بعضی مواقع کلید اصلی میتونه ترکیبی از چند فیلد باشه
یعنی ممکنه جدول ستون id به عنوان کلید اصلی نداشته باشه و به جاش دو یا چند تا فیلد با هم، یک کلید اصلی (primary key) رو ایجاد کنند
✔️ همونطوری که می دونید جنگو جفت کلید رو به صورت مستقیم پشتیبانی نمی کنه
اما برای هندل کردن این موضوع unique_together رو ارائه کرده و ما میتونیم توی مدل ها ازش استفاده کنیم و دو یا چند تا فیلد رو با هم unique کنیم
وقتی دو تا فیلد با هم unique_together میشن دیگه این دو تا ستون با همدیگه تکرار نمیشن. دقیقا همون رفتار جفت کلید اصلی توی دیتابیس هارو داره
برای مطالعه بیشتر در موردش لینکهای زیر رو بخونید:
https://docs.djangoproject.com/en/4.0/ref/models/options/#unique-together
https://gsilvapt.iss.one/posts/django-how-to-properly-modify-unique-together/
👍2
✅ اگه میخواهید لاگین و پارامترها و... یه رکوئست رو توی گوگل کروم، کامل کپی کنید و توی postman ازش استفاده کنید این گزینه رو بزنید.
توی postman هم میتونید ایمپورتش کنید.
دیگه لازم نیست توی postman توکن بگیریم و هدر ست کنیم و...
لکن #منهای_جنگو 😁
توی postman هم میتونید ایمپورتش کنید.
دیگه لازم نیست توی postman توکن بگیریم و هدر ست کنیم و...
لکن #منهای_جنگو 😁
❤1
Forwarded from Django Expert (Boby Cloud)
✔️ بچه ها توی کانال گفتیم سفته ندید و اگر میدید خیلی مراقب باشید که سفید نباشه و تا جایی که میتونید اصلا سفته ندید.
شرکتی هم که سفته میخواد لیاقت اینو نداره براش کار کنید.
ممنونم از آقا میلاد که جسارت به خرج دادند و این تجربشون رو به اشتراک گذاشتند حتما بخونید:
https://www.linkedin.com/posts/miladhzz_aebaepaesaevabraeqaezaepaezaexaepaex-aevagpaetabraeuaesaeq-activity-6935513680922988544-QxdY?utm_source=linkedin_share&utm_medium=member_desktop_web
〰〰〰〰〰〰
© @DjangoEx
شرکتی هم که سفته میخواد لیاقت اینو نداره براش کار کنید.
ممنونم از آقا میلاد که جسارت به خرج دادند و این تجربشون رو به اشتراک گذاشتند حتما بخونید:
https://www.linkedin.com/posts/miladhzz_aebaepaesaevabraeqaezaepaezaexaepaex-aevagpaetabraeuaesaeq-activity-6935513680922988544-QxdY?utm_source=linkedin_share&utm_medium=member_desktop_web
〰〰〰〰〰〰
© @DjangoEx
🤯13👍7