جنگولرن

Description
آموزش Django و بستگان
admin: @miladhzz
http://djangolearn.ir
https://www.youtube.com/c/DjangoLearn
https://www.aparat.com/djangolearn
We recommend to visit

?? ??? ?? ????? ?

We comply with Telegram's guidelines:

- No financial advice or scams
- Ethical and legal content only
- Respectful community

Join us for market updates, airdrops, and crypto education!

Last updated 6 months, 1 week ago

[ We are not the first, we try to be the best ]

Last updated 8 months, 3 weeks ago

FAST MTPROTO PROXIES FOR TELEGRAM

ads : @IR_proxi_sale

Last updated 4 months, 3 weeks ago

7 months, 2 weeks ago
***✅***سوال پایتونی

سوال پایتونی

آیا روشی که توی خط 8 متد super رو صدا زدیم درست است؟

این کد ارور میده؟

7 months, 2 weeks ago
***✅***سوال پایتونی

سوال پایتونی

این کد رو اجرا کنیم، نتیجه ش چی میشه؟

اعتراف می کنم خودم نمی دونستم.

7 months, 2 weeks ago

از صبح داشتم یک پروژه رو review می‌کردم که بنا به مشکلات از یک فریمورک به فریمورک دیگه جابجا شده؛ اما بعد از جابجایی یک سری بخش‌های پروژه باگ داره و من وارد شدم برای کد ریویو (امروز صبح روز اول کارم بود)

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

بنظرتون مشکل از کجاست ؟

مدیرفنی یا تیم‌لید بکند.

یک درس بزرگی که حتی قبل از ورود به دنیای بکند و بخاطر عادت به سورس کد خوندن گرفتم این بود که
Intégration test
اولویت بالاتری داره از
Unit test
واقعیت هم همین هست، unit test برای راحتی خودمون و دولوپر بعدی هست و intégration test برای راحتی و بدون باگ بودن استفاده‌های client

خیلی تیم‌ها (ایرانی و خارجی) که intégration test نمی‌نویسند متاسفانه ولی اون‌هایی هم که می‌نویسند مثل کدهای امروز من دقیقاً از آنچه که فریمورک ارائه میده استفاده می‌کنند.

این کاملاً خطا هست، برای مدیر فنی ٫ تیم‌ لید منظورم هست. الان سوالتون اینه که چرا ؟

توی این پروژه اگر intégration test ها میومد سرور رو روی یک thread جدا اجرا می‌کرد و بعد با استفاده از پکیج دیگری مثل requests درخواست می‌زد به api هاش بنظرتون بهتر نمی‌شد ؟

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

وقتی دارم از بیرون به سیستم نگاه می‌کنم برام چه فرقی داره که چه زبان برنامه‌نویسی یا چه فریمورکی استفاده شده؛ همونطور که برای یوزر من فرقی نداره.

خواستم بگم حواستون به این نکته باشه، intégration test باید جوری باشه که فارغ از فریمورک و زبان قابل اجرا باشه.

متاسفانه کدهای جدید این تیم هم این خطا رو داره و باز وابسته شده به فریمورک

11 months ago

دوره غیر رایگان ساخت فروشگاه اینترنتی با جنگو آپدیت شد.

قسمت های زیر اضافه شدند:

فصل هفتم
✔️ریفکتور کدهای پرداخت

فصل هشتم
✔️فرم ورود با رمز عبور
✔️فرم ثبت نام کاربر
✔️آماده سازی ارسال ایمیل فعالسازی
✔️تولید توکن فعالسازی ایمیل
✔️فعالسازی حساب کاربر
✔️آماده سازی ورود با موبایل
✔️ورود موفق با کد یکبار مصرف

چند قسمت از این دوره رو اینجا ببینید:
https://t.me/djangolearn_ir/531
https://t.me/djangolearn_ir/533
https://t.me/djangolearn_ir/573
https://t.me/djangolearn_ir/676
https://t.me/djangolearn_ir/724
https://t.me/djangolearn_ir/808

لینک دوره در دانشجویار:
https://www.daneshjooyar.com/project-django/

11 months ago

جزوه جلسه ۱۰ با تشکر از اقا مهدی

@SEYED_BAX | @MakeDeveloper

11 months, 1 week ago

آپدیت کردن چند آبجکت به صورت همزمان در #جنگو

فریم‌ورک #django قابلیت آپدیت کردن دیتاها رو به روش ها مختلف داره که خیلی ها یا ازش بی خبر ان یا استفاده نمیکنن. بیایید ببینیم هر کدوم رو کجا استفاده کنی بهتره :)

مدل فرضی:

class Records(models.Model): name = models.Charfield() balance = models.InetegerField() country =models.CharField()

خب فرض کنید ما یک هدیه به مناسب عید نو روز میخواییم به کاربرا بدیم، مثلا میخاییم نفری ۲ هزار تومن هدیه بدیم D:

حالا چند روش وجود داره.

روش اول ( نوب):

```
users = Records.objects.all()

for user in users:
user.balanc = user.balance + 2
user.save()
```

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

( تو اینه پست به اینکه باید از F استفاده کنید یا کانکارنسی و اینا هندل کنید اشاره نمیکنم، پست‌ها قبلی بخونید)

حالا روش بهتر چیه؟

روش بهتر:

user = Records.objects.update(balance=F("balance") + 2 )

همینقدر ساده :)

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

حالا بیایید فقط کوئری آپدیت این بهش ببینیم، فرض کنید این کوئری آخر هفته اجرا میشه. ( این فیلدا تو مدل فرض نداریم دیگه خودتون فرض کنید هست ?❤️)

```
users = Records objects.fileter(done_weekly=True)

for user in users:
user.name = "Grunt " + user.name
if user.weekly_score >= 10:
user.balance = user.balance + 100

user.save()

```

خب همینطور که خیلی معلومه مشکلات فراوان داخلش هست. بزرگ‌ترین مشکلش اینه که هر بار برای هر کاربر یک درخواست آپدیت میدیم که میشهه همون مشکل بالا، آما آیا این بار میشه از روش بالا استفاده کرد و اینو فیکسش کرد؟ نه
روش بالا زمانی کاربرد داره که فیلدها قراره یک مقداری ثابتی به همشون داده بشه، اینجا بعضی ها ۱۰۰ تا گلد میگیرن بعضی ها نه پس کار نمیکنه، اینجا ما میتونیم از فانکشن bulk_update جنگو استفاده کنیم.

همون حلقه بالا رو میزنید با این تفاوت که داخلش .save رو صدا نمیزنید و تمام آبجکت‌ها رو داخل مموری آپدیت میکنید و بعد همچین حرکتی میزنید:

Records.objects.bulk\_update(updated\_users\_list)

و تموم همرو با هم آپدیت میکنید با یک درخواست اینجا حتی میتونید یک قدم جلوتر برید و با اضافه کردن updated_fields به ورودی فانشکن و مشخص کردن اینکه دقیقا دوتا فیلد بالانس و نام فقط قرار آپدیت بشه بهترش کنید!

از این به بعد بهتر آپدیت کنید :)

@TorhamDevCH

1 year, 1 month ago

شبیه ساز درگاه های بانکی ایران

بعد از بررسی ها و خوندن پرسش و پاسخ های دوستان توی گروه های جنگو
متوجه شدم که محیط sandbox یا test زرین پال و pay.ir از یه تایمی به بعد دیگه غیرفعال شدن

✔️و متاسفانه داکیومنت هاشون رو آپدیت نکردن و همه رو به اشتباه انداختن

سایت banktest.ir زحمت کشیده و درگاه پرداخت بعضی بانکهارو شبیه سازی کرده

البته من ترجیح میدم خودم یه شبیه ساز بنویسم

توی زرین پال یه نکته هم دیدم ولی همه فرایند پرداخت رو باهاش تست نکردم. شاید اگه یه مرچنت کد داشته باشیم بتونم باهاش پرداخت واقعی انجام بدیم. یه کالکشن postman توی next زرین پال هست که یه مرچنت کد داره و ریکوئست دادم جواب میداد.

✔️البته وقتی درگاه پرداخت مستقیم از بانک ها میگیریم، آی پی سرور رو میخوان و از هر آی پی نمیشه request داد. ولی شاید زرین پال اینو چک نمیکنه

آپدیت:
خدایا توبه ? انصافا سرویس دهنده رو ببین. انگار هر کی استخدام شده یه داکیومنت ساخته
سایت زرین پال رو که باز میکنی. لینک توسعه دهندگان مستندات pdf گذاشته که برای سال 1393 هست و توضیحات وب سرویس WSDL یا SOAP هست:
https://www.zarinpal.com/pg/services/WebGate/wsdl
نمونه کد جنگو برای سال 1395 هست و سرویس REST هست و آدرس ها اینجوری هستن (اینجا سندباکس کار میکنه):
https://www.zarinpal.com/pg/rest/WebGate/PaymentRequest.json
حالا توی گوگل سرچ کن 'داکیومنت زرین پال' دو تا سایت داره با توضیحات متفاوت و آدرس ها اینجوری هستن (توی این جدیده سندباکس کار نمیکنه):
https://api.zarinpal.com/pg/v4/payment/request.json

1 year, 1 month ago

معرفی پکیج az-iranian-bank-gateways
از گیت هاب علی زاهدی

✔️اتصال جنگو به درگاه بانک های مختلف

اتصال به بانک های ایرانی
درگاه پرداخت بانک ملی ایران،بانک سامان، بانک ملت، درگاه پرداخت زرین پال و ...

لینک github:
https://github.com/ali-zahedi/az-iranian-bank-gateways

1 year, 3 months ago

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

✔️فایل pdf رو مطالعه کنید.

مطلبی از لینکدین Mohammad Amin Amjadi
برای یه پروژه برنامه نویسی قطعا مدیریت پکیج‌ها یکی از مهم‌ترین نکات و مواردی هست که باید بهش حواسمون باشه.
اگر پکیج‌ها آپدیت نباشن می‌تونه باعث مشکلات امنیتی و ... بشه.
از اون طرف اگر مدیریت پکیج‌هامون نادرست باشه میتونه جلوی امکان بیلد پروژه رو هم بگیره حتی.

توی این پست سعی کردم برای پروژه‌های پایتونی نکاتی رو پیرامون pip بگم که چرا نباید ازش استفاده کنیم و در ادامه نحوه استفاده از poetry رو برای ستاپش، استفاده، dockerfile و pre-commit رو هم آوردم.

امیدوارم که مفید باشه.

1 year, 3 months ago

#django#python Django Lifecycle

این پکیج چیه کاربردش چیه؟

تفاوت اصلی میان Django Lifecycle و سیگنال‌ها (Signals) در Django این است که Django Lifecycle یک رویکرد ساختارمندتر و اصولی‌تر را برای مدیریت چرخه عمر اجزا فراهم می‌کند. با استفاده از Django Lifecycle، شما می‌توانید کدهای مربوط به هر مرحله از چرخه عمر را به صورت مستقیم در کلاس‌های مدل یا دیگر اجزا تعریف کنید و این اجزا را به یک مدل متصل کنید. این اجازه را به شما می‌دهد که کدهای مربوط به هر مرحله را در یک مکان مرتبط و خوانا نگه دارید و از تفکیک بخش‌ها بهره‌مند شوید.

مثالی از این بخش:

به عنوان مثال، فرض کنید که می‌خواهید هر زمان که یک مدل از نوع Post ایجاد یا به‌روزرسانی می‌شود، یک عملیات خاصی انجام دهید. با استفاده از Django Lifecycle، می‌توانید این عملیات را به صورت مستقیم در مدل Post تعریف کنید، به عنوان مثال:

```
from django.db import models
from django_lifecycle import LifecycleModel, hook

class Post(LifecycleModel):
title = models.CharField(max_length=100)
content = models.TextField()

@hook(BEFORE\_UPDATE, when="content", has\_changed=True) def update\_history(cls, old\_instance, instance, field\_name): History.objects.create( post=instance, old\_content=old\_instance.content, new\_content=instance.content )

post = Post.objects.create(title="Title", content="Content")

post.content = "Updated Content"
post.save()
```

در این مثال، یک مدل به نام Post تعریف شده است که از کلاس LifecycleModel ارث‌بری کرده است. با استفاده از دکوراتور hook، یک عملیات update_history برای مدل تعریف شده است. این عملیات هر زمان که محتوای یک نمونه از مدل تغییر می‌کند، یک رکورد جدید به جدول History اضافه می‌کند که تاریخچه تغییرات محتوا را ثبت می‌کند.

اطلاعات بیشتر راجبش:

https://github.com/rsinger86/django-lifecycle

@SEYED_BAX

We recommend to visit

?? ??? ?? ????? ?

We comply with Telegram's guidelines:

- No financial advice or scams
- Ethical and legal content only
- Respectful community

Join us for market updates, airdrops, and crypto education!

Last updated 6 months, 1 week ago

[ We are not the first, we try to be the best ]

Last updated 8 months, 3 weeks ago

FAST MTPROTO PROXIES FOR TELEGRAM

ads : @IR_proxi_sale

Last updated 4 months, 3 weeks ago