en
Feedback

Don't get caught by a cheater! Telemetrio finds and tags such channels 👉 If you want to see the tag, subscribe

Syntax | سینتکس

Syntax | سینتکس

Open in Telegram
Buy Ad
3 262
Subscribers
+324 hours
+107 days
-130 days
Posts Archive
دوستان کی اینجا میتونه لوگو طراحی کنه؟ یکار خیلی کوچیک داریم یدونه آرم برای چاپ شدن روی جعبه ی محصولات میخوایم کسی اگه میتونه تا فردا شب آماده کنه پیوی پیام بده

با این روش وقتی داری توی جنگو از JWT استفاده می کنی،‌response time درخواست هارو به شکل قابل توجهی کمترش کن‌ !!! توی جنگو اکثر افراد از پکیج Django Simple JWT استفاده می کنن. پکیج Simple Jwt برای ما یک کلاس به اسم JWTAuthentication می دهد تا بتوانیم به عنوان کلاس Authentication در DRF ازش استفاده کنیم. یکی از نکاتی که باید درمورد JWTAuthentication بدونید، متد get_user هستش. هر درخواستی که در هدر آن اکسس توکن رو قرار داده باشید، یک درخواست سمت دیتابیس میزند تا با استفاده از فیلد user_id که در claim توکن ست کرده، اطلاعات کاربر رو بگیره. نکته همینجاست. هر درخواست مساوی با یک hint سمت دیتابیس ! خب میتونیم چیکار کنیم؟ میتونیم توی claim های توکن اطلاعات بیشتری رو قرار بدیم و یوزر خودمون رو با استفاده از claims توکن بدست بیاریم برای اینکار دیگه توکن هارو خودمون بصورت دستی میسازیم و claim هارو هم به این شکل به توکن اضافه می کنیم(همچنین توکن رو encrypt می کنیم):
from django.contrib.auth import get_user_model
from rest_framework_simplejwt.tokens import RefreshToken

from .encryption import encrypt

User = get_user_model()

def set_token_claims(token: Token, data: Dict) -> Token:
    for key, value in data.items():
        token[key] = value

    return token


def get_token_by_user(user: User, client_info: Dict) -> Dict:
    token = RefreshToken.for_user(user=user)

    data = {
        "fullname": user.fullname,
        "national_code": user.national_code,
        "phone_number": user.phone_number,
        "email": user.email,
        "verified_email": user.verified_email,
        "last_image_update": user.last_image_update,
        "is_active": user.is_active,
        "is_admin": user.is_admin,
        "father_name": user.father_name,
        "height": str(user.height),
        "weight": str(user.weight),
        "blood_type": user.blood_type,
        **client_info
    }

    if user.avatar_image:
        data["avatar_image"] = user.avatar_image.url

    token = set_token_claims(token=token, data=data)

    return {
        "refresh_token": encrypt(data=str(token)),
        "access_token": encrypt(data=str(token.access_token)),
    }
در نهایت استفاده کلاس Authentication خودمون رو پیاده سازیش می کنیم:
from django.utils.translation import gettext_lazy as _
from django.contrib.auth import get_user_model

from rest_framework_simplejwt.authentication import JWTAuthentication, AuthUser
from rest_framework_simplejwt.tokens import Token
from rest_framework_simplejwt.exceptions import InvalidToken

from .encryption import decrypt


User = get_user_model()


class CustomAuthentication(JWTAuthentication):

    def get_validated_token(self, raw_token: bytes) -> Token:
        try:
            token = decrypt(encrypted=raw_token)
        except ValueError:
            raise InvalidToken(
                {
                    "detail": _("Given token not valid for any token type"),
                }
            )
        return super().get_validated_token(token.encode())

    def get_user(self, validated_token: Token) -> AuthUser:
        return User(
            id=validated_token["user_id"],
            fullname=validated_token["fullname"],
            national_code=validated_token["national_code"],
            phone_number=validated_token["phone_number"],
            email=validated_token["email"],
            verified_email=validated_token["verified_email"],
            avatar_image=validated_token.get("avatar_image"),
            last_image_update=validated_token["last_image_update"],
            is_active=validated_token["is_active"],
            is_admin=validated_token["is_admin"],
            father_name=validated_token["father_name"],
            height=validated_token["height"],
            weight=validated_token["weight"],
            blood_type=validated_token["blood_type"]
        )
حالا شما با این روش، از قابلیت های jwt توی جنگو به شکل بهتری می تونید استفاده کنید. (صرفا جهت آشنایی گفتم. چون توی جنگو که همه چی از قبل نوشته شده خیلی وقتا فراموش میشه یک ابزار در پشت صحنه به چه صورت کار میکنه) #Django #JWT @Syntax_fa

poetry.pdf2.65 KB

مفهوم Profiling در Python :فرآیند جمع آوری اطلاعات در مورد عملکرد برنامه شما اشاره دارد. این اطلاعات می تواند شامل موارد زیر باشد: زمان صرف شده در هر تابع: این به شما کمک می کند تا ببینید کدام قسمت های کد شما بیشترین زمان را اشغال می کنند. تعداد دفعات فراخوانی هر تابع: این به شما کمک می کند تا ببینید کدام قسمت های کد شما بیشتر استفاده می شوند. حافظه استفاده شده توسط هر تابع: ا ین به شما کمک می کند تا ببینید کدام قسمت های کد شما بیشترین حافظه را اشغال می کنند. با استفاده از profiling، می توانید قسمت های کند و ناکارآمد کد خود را شناسایی کرده و آنها را بهینه سازی کنید. این می تواند به طور قابل توجهی سرعت برنامه شما را افزایش دهد. ابزارهای Profiling در Python چندین ابزار profiling مختلف برای Python وجود دارد. برخی از محبوب ترین ابزارها عبارتند از: cProfile: این یک ابزار profiling داخلی است که در کتابخانه استاندارد Python موجود است. line_profiler: این ابزار به شما امکان می دهد زمان صرف شده در هر خط کد را مشاهده کنید. memory_profiler: این ابزار به شما امکان می دهد حافظه استفاده شده توسط هر تابع را مشاهده کنید. SnakeViz: این ابزار یک رابط کاربری گرافیکی برای تجزیه و تحلیل داده های profiling ارائه می دهد. نحوه استفاده از Profiling در Python برای استفاده از profiling در Python، ابتدا باید یک ابزار profiling را انتخاب کنید. سپس، می توانید از ابزار profiling برای جمع آوری اطلاعات در مورد عملکرد برنامه خود استفاده کنید. در نهایت، می توانید از اطلاعات profiling برای شناسایی و بهینه سازی قسمت های کند و ناکارآمد کد خود استفاده کنید. مثال:
import cProfile

def my_function():
    for i in range(100000):
        pass

cProfile.run('my_function()')
خروجی cProfile شامل اطلاعات زیر است: نام تابع: نام تابعی که در حال اجرا است. ncalls: تعداد دفعات فراخوانی تابع. tottime: زمان کل صرف شده در تابع (بر حسب ثانیه). percall: زمان متوسط صرف شده در هر بار فراخوانی تابع (بر حسب ثانیه). cumtime: زمان کل صرف شده در تابع و تمام توابع تابعه آن (بر حسب ثانیه). [𝙰𝚖𝚒𝚛𝚑𝚘𝚜𝚜𝚎𝚒𝚗] #Python #Profiling @Syntax_fa

#فرصت_نصفه_نیمه_شغلی یه استارت‌آپ تو حوزه پزشکی داریم که ایده خیلی خوبی پشتشه جز خودم به یه بک اند کار دیگه نیاز داریم تا بتونیم سریع تر اولین نسخه رو توسعش بدیم و بریم سراغ بقیه مراحلش ببینید ریسک داره اگه اوکی بشه هممون سود خوبی میکنیم و اگه نشه هم که هیچی باهاتون مذاکره میشه و همه چی تو قرارداد نوشته میشه. یک اند با پایتون و جنگو هستش همچنین تجربه کافی مورد نیازه و اگه تازه کار هستید شما مناسب این پروژه نیستید. اگه کسی علاقه مند هستش، پیویم پیام بده: @Ayeef

توضیح: این یک سوالی است که برای حل کردنش باید درباره data structures ها بدانید. برای اینکه بفهمیم صورت سوال از ما چه میخواهد
توضیح: این یک سوالی است که برای حل کردنش باید درباره data structures ها بدانید. برای اینکه بفهمیم صورت سوال از ما چه میخواهد اول از همه باید با linked list ها آشنا شویم. لیست های پیوندی بر خلاف لیست ها، از یک آرایه ساخته نشده اند. ساختار هر عنصر یک لیست پیوندی به این صورت است که از node ها تشکیل شده است(برخلاف لیست بصورت متوالی نیست) و در هد node مقدار عنصر و آدرس node بعدی را ذخیره می کنیم. برای مثال اگر بخواهیم به عنصر index بیستم دسترسی داشته باشیم باید از head یعنی اولین node لیست پیوندی شروع به پیمایش کنیم و به next هر node سر بزنیم تا به index مورد نظر برسیم. اما مزیت لیست پیوندی این است که insert، delete با n(1) انجام می شود. همچنین boubly linked list داریم که هر node به علاوه ذخیره کردن آدرس نود بعدی، آدرس نپد قبلی خود را هم ذخیره می کند. در این مسئله چالش اینجاست که چجوری عناصر داخل یک لیست پیوندی یک طرفه را از آخر به اول مرتب کنیم. #data_structure @Syntax_fa

جواب های مورد قبول: Sharifi: شروع به خوندن می‌کنیم عنصر هارو به ترتیب وارد یه Stack می‌کنیم پشته همون لیست رو برعکس میکنه

سوال مصاحبه فرض کنید ما یک linked list یک طرفه داریم. چجوری مقادیر داخل این لیست رو از آخر به اول بدست بیاریم؟ #interview_question @Syntax_fa

بچه ها میخام در مورد اقامت دو ساله ی عمان در صورت ثبت شرکت یکم با هم صحبت کنیم شاید برای شما موضوع جذابی باشه قبل از ادامه بگم من فقط نظر شخصی خودم رو میگم و به هیچ عنوان توصیه نمیکنم که فردا عمان برین ، فقط داریم با هم صحبت میکنیم کشور عمان چند سالی میشه که سیاست پیشرفت اقتصادی رو در پیش گرفته برای اینکه از دوبی و عربستان بیشتر ازین عقب نیفته خیلی شرایط رو برای ثبت شرکت آسون تر کرده تا مردم بیشتری بتونن از جاهای مختلف دنیا برای سرمایه گذاری و کار به عمان بیان هزینه ثبت شرکت فکر میکنم ۳۰ ریال عمان باشه و هر ریال عمان در حال حاضر فکر میکنم تقریباً ۲.۵ دلار میشه یه نکته جالب بهتون بگم که شما فقط با داشتن پاسپورت میتونین بدون ویزا تا دو هفته تو کشور عمان باشین و کارای ثبت شرکت خودتون رو انجام بدین ، برای ثبت شرکت فکر میکنم یه سری مراکزی دارن به نام "مکتب و سند" که اونجا کارای ثبت شرکت رو واستون انجام میده و تنها مدرکی که ازتون میخان فقط پاسپورته ، هزینه هر شب اقامت تو مسافرخونه های عمان رو تقریباً شبی ۸ ریال در نظر بگیرین من یکم راجب اجاره خونه تو عمان تحقیقاتی کردم و متوجه شدم صاحب خونه های عمانی اگه باهاشون صحبت کنین تا دو ماه شاید سه ماه هم ازتون هیچ اجاره ای نگیرن تا کارتون راه بیفته و این میتونه خیلی واسه کسایی که میخان به عمان برن واسه کسب و کار خوب باشه راجع به هزینه خودروها هم شاید واستون جالب باشه که با پول پراید یا پژو میتونین تو کشور عمان یه تویوتا سوناتا خیلی خوشگل بخرین بعد از ثبت شرکت تو عمان به شما هم آی دی کارت عمان داده میشه و هم اجازه کار دارین و هم میتونین حساب بانکی عمانی و حساب بانکی بین المللی داشته باشین ، بعد از ثبت شرکت حتی میتونین به ایران برگردین فکر کنم حتی تا ۱۴ ماه میتونین بیایین ایران این گزینه ثبت شرکت تو عمان فکر میکنم برای فریلنسر ها مخصوصاً کسایی که دوس دارن با سایت های فریلنسری مثل آپورک و فایور و فریلنسر دات کام کار کنن خیلی جذاب باشه همچنین این گزینه واسه یوتوبرها هم میتونه گزینه جذابی باشه چون شما حساب بانکی بین الملل دارین و دیگه نیازی به شرکت های واسط ندارین و هم میتونین تو عمان کار یوتوب خودتون رو داشته باشین و هم به ایران سفر کنین و ویدیو های جذاب بسازین خلاصه اینکه گفتم بهتون بگم شاید براتون جذاب باشه ولی حتماً قبلش خودتون خوب مطالعه و تحقیق کنین قبل ازینکه بخایین کاری انجام بدین 🙏🏻⚘️ براتون آرزوی موفقیت دارم Sajjad abdullahi

ورزش صبحگاهی مناسب برنامه نویسا #Fun @Syntax_fa

گولنگ کار ها: استفاده از orm و قابلیت هاش👎 استفاده از raw query و شوآف کردن پرفورمنس و قدرت #Fun @Syntax_fa
گولنگ کار ها: استفاده از orm و قابلیت هاش👎 استفاده از raw query و شوآف کردن پرفورمنس و قدرت #Fun @Syntax_fa

وقتی میخوای بفهمی کارفرما دقیقا چی میخواد #Fun @Syntax_fa

چگونه در لینکدین دیده شوید #Fun @Syntax_fa
چگونه در لینکدین دیده شوید #Fun @Syntax_fa

برای apis documentation کدومو انتخاب می کنید؟
Anonymous voting

من تو خواب هامم فقیرم دیروز خواب دیدم رفتیم روی دامین localhost.com دارم NGINX کانفیگ میکنم😂😂😂😂 لینوکسی #Fun @Syntax_fa

چارلی چاپلین در پایان فیلم "دیکتاتور بزرگ" 🔘صحنه‌ای که او از نقش کمدی خودش بیرون می‌آید و بدون واسطه و خارج از نقش با تماشاگر صحبت می‌کند بیش از ابزار، به انسانیت نیاز داریم @Syntax_fa

پنجاه سوال تاپ مصاحبه پایتون وب سایت geeksforgeeks https://www.geeksforgeeks.org/python-interview-questions/ #Python_interview @Syntax_fa

آرگومان های یک فانکشن توی پایتون بصورت ولیو پاس داده میشه یا اینکه بصورت رفرنس؟ همه چی توی پایتون آبجکت هستش و همه ی value ها بصورت رفرنس توی آبجکت نگه داشته میشن. پس آرگومان ها بصورت رفرنس پاس داده میشن و اگه mutable datatype باشه میشه تغییری در مقدار پاس داده شده بوجود آورد و اما اگه immutable datatype باشه نمیشه. #Python_interview @Syntax_fa

یه پست قدیم درباره string برای درک بهتر اینکه تو پس زمینه چه اتفاقی میوفته

bytes buffer and string builder یکی از انواع داده ای که در اکثر زبان‌های برنامه نویسی وجود دارد و در استفاده از آن باید دقت داشته باشیم نوع string است. قطعه کد زیر را در نظر بگیرید:
    var query string = "select "
    query += "name, family "
    query += "from "
    query += "users "
    query += "where 1 = 1 "
    query += "and name = `ali` "
    db.Execute(query)
زمانی که نیاز داریم تا مقدار یک رشته را تغییر دهیم نوشتن به این روش اشتباه می‌باشد. دلیل آن در این نهفته است که هر دفعه که شما این رشته را تغییر می‌دهید فارغ از متغیر پیشین یک فضای جدید در حافظه برای آن رزرو می‌شود. بنابراین این قطعه کد memory efficient نیست. در بسیاری از زبان‌ها برای چنین مسایلی از string builder استفاده می‌شود. در گو هم string builder را داریم و هم bytes.Buffer. این ساختارها از byte slice در پشت صحنه استفاده می‌کنند و تغییرات را روی آرایه داخلی اعمال میکنند. در نتیجه نیاز به رزرو فضاهای زیاد ندارند و memory efficient‌تر خواهند بود. strings.Builder :
    var sbQuery strings.Builder
    sbQuery.WriteString("select ")
    sbQuery.WriteString("name, family ")
    sbQuery.WriteString("from ")
    sbQuery.WriteString("users ")
    sbQuery.WriteString("where 1 = 1 ")
    sbQuery.WriteString("and name = `ali` ")
    db.Execute(query)
bytes.Buffer :
    var btQuery bytes.Buffer = bytes.Buffer{}
    btQuery.WriteString("select ")
    btQuery.WriteString("name, family ")
    btQuery.WriteString("from ")
    btQuery.WriteString("users ")
    btQuery.WriteString("where 1 = 1 ")
    btQuery.WriteString("and name = `ali` ")
    db.Execute(query)
حالا تابع indent را در نظر بگیرید این تابع قرار است تغییرات زیادی را در خطوط مختلف یک رشته (byte array json) اعمال نماید. پس مناسب است از بافر استفاده شود و به همین خاطر تابع مورد نظر یک bytes.Buffer دریافت می‌کند و خروجی را در آن قرار می‌دهد. تفاوت bytes.Buffer و strings.Builder در این است که bytes.Buffer عمومی‌تر می‌باشد ولی strings.Builder برای رشته استفاده می‌شود. برای تمرین هر کدوم از بچه‌ها که میتونه یک بنچمارک بنویسه و در یک حلقه بزرگ مقدار موجود در یک رشته رو تغییر بده و همین کار رو یکبار با استفاده از bytes Buffer و strings Builder هم انجام بده و نتیجه مصرف memory رو با ما به اشتراک بذاره #string @Syntax_fa