django-chelseruیک بسته جنگویی برای گپزنی همزمان، راستیآزمایی پیامکی و فرستادن پیامک با یاریدهندههای ایرانی.نویسندهSobhan Bahman Rashnu🚀 ویژگیها📱 راستیآزمایی پیامکی (رمز یکبارمصرف): راستیآزمایی امن کاربران با یاریگیری از رمزهای یکبارمصرف که از راه پیامک فرستاده میشوند.💬 گپزنی همزمان: کارکرد پیامرسانی همزمان بر پایه WebSocket.✉️ سامانههای پیامکی: فرستادن پیامک از راه یاریدهندههای نامور پیامکی ایرانی.⚙️ نصببسته را با یاریگیری از pip نصب کنید:pip install django-chelseru
'drfchelseru' را به INSTALLED_APPS در پرونده settings.py خود بیفزایید:INSTALLED_APPS = [
...
'channels',
'rest_framework',
'rest_framework_simplejwt',
'drfchelseru',
...
]
🛠️ پیکربندیبرای پیکربندی بسته، واژهنامه DJANGO_CHELSERU را به پرونده settings.py خود بیفزایید. این واژهنامه به شما پروانه میدهد تا چیدمانهای راستیآزمایی و پیامک را خودساخته نمایید.# settings.py
DJANGO_CHELSERU = {
'AUTH': {
'AUTH_METHOD' : 'OTP', # روشهای پشتیبانی شده: OTP, PASSWD
'AUTH_SERVICE' : 'rest_framework_simplejwt', # سرویسهای پشتیبانی شده: rest_framework_simplejwt
'OPTIONS': {
'OTP_LENGTH' : 8, # پیشفرض: 8
'OTP_EXPIRE_PER_MINUTES': 4, # پیشفرض: 4
'OTP_SMS_TEMPLATE_ID' : 1, # شناسه قالب پیامکی برای رمز یکبارمصرف
}
},
'SMS': {
'SMS_SERVICE': 'PARSIAN_WEBCO_IR', # یاریدهندههای پشتیبانی شده: PARSIAN_WEBCO_IR, MELI_PAYAMAK_COM, KAVENEGAR_COM
'SETTINGS': {
'PARSIAN_WEBCO_IR_API_KEY' : 'YOUR_PARSIAN_WEBCO_API_KEY',
'MELI_PAYAMAK_COM_USERNAME' : 'YOUR_MELI_PAYAMAK_USERNAME',
'MELI_PAYAMAK_COM_PASSWORD' : 'YOUR_MELI_PAYAMAK_PASSWORD',
'MELI_PAYAMAK_COM_FROM' : 'YOUR_MELI_PAYAMAK_FROM_NUMBER',
'KAVENEGAR_COM_API_KEY' : 'YOUR_KAVENEGAR_API_KEY',
'KAVENEGAR_COM_FROM' : 'YOUR_KAVENEGAR_FROM_NUMBER',
},
'TEMPLATES': {
'T1': 1,
'T2': 2,
...
}
}
}
AUTH_METHOD: روش راستیآزمایی را روشن میسازد. برای راستیآزمایی پیامکی، از 'OTP' بهره بگیرید.OTP_LENGTH: درازای رمز یکبارمصرف.OTP_EXPIRE_PER_MINUTES: زمان پایانیافتن رمز یکبارمصرف بر پایه دقیقه.OTP_SMS_TEMPLATE_ID: شناسه قالب پیامکی که برای فرستادن رمز یکبارمصرف بهره گرفته میشود.SMS_SERVICE: یاریدهنده پیامکی دلخواه خود را برگزینید.SETTINGS: آگاهیهای نیاز برای یاریدهنده پیامکی برگزیدهتان را فراهم آورید.TEMPLATES: شناسههای قالب پیامکی خود را روشن سازید.🔌 نقطههای پایانیبرای به کارگیری کارکردهای این بسته، URLهای زیر را به پرونده urls.py خود بیفزایید.# urls.py
from django.urls import path, include
urlpatterns = [
...
path('api/', include('drfchelseru.urls')),
...
]
این بسته نقطههای پایانی API زیر را فراهم میآورد:نقطه پایانیشرحروش/api/otp/send/یک رمز یکبارمصرف به شماره همراه گفتهشده میفرستد.POST/api/authenticate/کاربری را با رمز یکبارمصرف دریافتشده، راستیآزمایی میکند.POST/api/sessions/نشستهای فعال کاربر را فهرست کرده و درایوری میکند.GET/api/message/send/یک پیامک با یاریدهنده پیکربندیشده میفرستد.POSTبه کارگیری نقطههای پایانی1. فرستادن رمز یکبارمصرف (/api/otp/send/)روش: POSTشرح: یک رمز یکبارمصرف به شماره همراه کاربر میفرستد.دادهنماهای نیاز:دادهنماگونهشرحنمونهmobile_numberstrشماره همراه کاربر.09121234567پاسخها:HTTP 200 OK: رمز یکبارمصرف با کامیابی فرستاده شد.{"details": "The OTP code was sent correctly."}
HTTP 400 BAD REQUEST: ساختار نادرست mobile_number.HTTP 409 CONFLICT: یک رمز یکبارمصرف پیشتر فرستاده شده و هنوز روایی دارد.{"details": "An OTP code has already been sent. Please wait X seconds before trying again."}
HTTP 500 INTERNAL SERVER ERROR: یک دشواری در کارگذار پیش آمده است.2. راستیآزمایی (/api/authenticate/)روش: POSTشرح: کاربر را با رمز یکبارمصرف فراهم شده، راستیآزمایی میکند. اگر با کامیابی انجام شود، توکنهای JWT (access و refresh) را بازمیگرداند.دادهنماهای نیاز:دادهنماگونهشرحنمونهmobile_numberstrشماره همراه کاربر.09121234567codestrرمز یکبارمصرف دریافت شده از راه پیامک.12345678groupintاختیاری: یک شناسه دسته برای کاربر.1پاسخها:HTTP 200 OK: راستیآزمایی با کامیابی انجام شد.{
"access": "...",
"refresh": "..."
}
HTTP 401 UNAUTHORIZED: رمز یکبارمصرف ناروا یا پایانیافته.{"error": "The code sent to this mobile number was not found."}
HTTP 400 BAD REQUEST: دادهنماهای نیاز ناپیدا یا ساختار نادرست.HTTP 500 INTERNAL SERVER ERROR: یک دشواری در کارگذار پیش آمده است.3. فرستادن پیامک (/api/message/send/)روش: POSTشرح: یک پیامک خودساخته را با یاریدهنده پیکربندیشده میفرستد.دادهنماهای نیاز:دادهنماگونهشرحنمونهmobile_numberstrشماره همراه گیرنده.09121234567message_textstrنوشتار پیام. (بیشینه ۲۹۰ نویسه)Hello, World!template_idintبرای برخی یاریدهندهها (برای نمونه پارسیان) نیاز است.1پاسخها:HTTP 200 OK: پیام با کامیابی فرستاده شد.{"details": "The Message was sent correctly."}
HTTP 400 BAD REQUEST: دشواریهای درستسنجی برای دادهنماها.HTTP 401 UNAUTHORIZED: راستیآزمایی انجام نشد.HTTP 500 INTERNAL SERVER ERROR: یک دشواری در کارگذار پیش آمده است.HTTP 502 BAD GATEWAY: یاریدهنده پیامکی یک دشواری را بازگرداند.4. فهرست نشستها (/api/sessions/)روش: GETشرح: همه نشستهای فعال کاربران را فهرست میکند. نیاز به راستیآزمایی (IsAuthenticated) دارد.سربرگهای نیاز:سربرگارزشAuthorizationBearer <your_access_token>💡 مدلهااین بسته یک مدل Session برای درایوری نشستهای فعال کاربران دارد. میتوانید به این نشستها از راه نقطه پایانی /api/sessions/ دسترسی یافته و آنها را درایوری کنید.
Raw data
{
"_id": null,
"home_page": "https://pipdjango.chelseru.com",
"name": "django-chelseru",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.11",
"maintainer_email": null,
"keywords": "djangochelseruchat djangochat drfchat online-chat online real-time chat iran chelseru lor lur bahman rashnu lour sms djangoauth auth ywt otpauth otp authentication djangootp djangoiransms iransms djangosms djangokavenegar djangomelipayamak sobhan \u0686\u062a \u0633\u0628\u062d\u0627\u0646 \u0628\u0647\u0645\u0646 \u0631\u0634\u0646\u0648 \u0686\u0644\u0633\u0631\u0648 \u062c\u0646\u06af\u0648 \u067e\u0627\u06cc\u062a\u0648\u0646 \u0644\u0631 \u0644\u0648\u0631 \u0622\u0646\u0644\u0627\u06cc\u0646 \u0631\u06cc\u0644 \u062a\u0627\u06cc\u0645",
"author": "Sobhan Bahman|Rashnu",
"author_email": "bahmanrashnu@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/73/ac/9a6e09e5cff95b518c8716b5739293aae619aa7422ce0b6ecf705fd22de5/django_chelseru-1.0.2.tar.gz",
"platform": null,
"description": "django-chelseru\u06cc\u06a9 \u0628\u0633\u062a\u0647 \u062c\u0646\u06af\u0648\u06cc\u06cc \u0628\u0631\u0627\u06cc \u06af\u067e\u200c\u0632\u0646\u06cc \u0647\u0645\u0632\u0645\u0627\u0646\u060c \u0631\u0627\u0633\u062a\u06cc\u200c\u0622\u0632\u0645\u0627\u06cc\u06cc \u067e\u06cc\u0627\u0645\u06a9\u06cc \u0648 \u0641\u0631\u0633\u062a\u0627\u062f\u0646 \u067e\u06cc\u0627\u0645\u06a9 \u0628\u0627 \u06cc\u0627\u0631\u06cc\u200c\u062f\u0647\u0646\u062f\u0647\u200c\u0647\u0627\u06cc \u0627\u06cc\u0631\u0627\u0646\u06cc.\u0646\u0648\u06cc\u0633\u0646\u062f\u0647Sobhan Bahman Rashnu\ud83d\ude80 \u0648\u06cc\u0698\u06af\u06cc\u200c\u0647\u0627\ud83d\udcf1 \u0631\u0627\u0633\u062a\u06cc\u200c\u0622\u0632\u0645\u0627\u06cc\u06cc \u067e\u06cc\u0627\u0645\u06a9\u06cc (\u0631\u0645\u0632 \u06cc\u06a9\u200c\u0628\u0627\u0631\u0645\u0635\u0631\u0641): \u0631\u0627\u0633\u062a\u06cc\u200c\u0622\u0632\u0645\u0627\u06cc\u06cc \u0627\u0645\u0646 \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u0628\u0627 \u06cc\u0627\u0631\u06cc\u200c\u06af\u06cc\u0631\u06cc \u0627\u0632 \u0631\u0645\u0632\u0647\u0627\u06cc \u06cc\u06a9\u200c\u0628\u0627\u0631\u0645\u0635\u0631\u0641 \u06a9\u0647 \u0627\u0632 \u0631\u0627\u0647 \u067e\u06cc\u0627\u0645\u06a9 \u0641\u0631\u0633\u062a\u0627\u062f\u0647 \u0645\u06cc\u200c\u0634\u0648\u0646\u062f.\ud83d\udcac \u06af\u067e\u200c\u0632\u0646\u06cc \u0647\u0645\u0632\u0645\u0627\u0646: \u06a9\u0627\u0631\u06a9\u0631\u062f \u067e\u06cc\u0627\u0645\u200c\u0631\u0633\u0627\u0646\u06cc \u0647\u0645\u0632\u0645\u0627\u0646 \u0628\u0631 \u067e\u0627\u06cc\u0647 WebSocket.\u2709\ufe0f \u0633\u0627\u0645\u0627\u0646\u0647\u200c\u0647\u0627\u06cc \u067e\u06cc\u0627\u0645\u06a9\u06cc: \u0641\u0631\u0633\u062a\u0627\u062f\u0646 \u067e\u06cc\u0627\u0645\u06a9 \u0627\u0632 \u0631\u0627\u0647 \u06cc\u0627\u0631\u06cc\u200c\u062f\u0647\u0646\u062f\u0647\u200c\u0647\u0627\u06cc \u0646\u0627\u0645\u0648\u0631 \u067e\u06cc\u0627\u0645\u06a9\u06cc \u0627\u06cc\u0631\u0627\u0646\u06cc.\u2699\ufe0f \u0646\u0635\u0628\u0628\u0633\u062a\u0647 \u0631\u0627 \u0628\u0627 \u06cc\u0627\u0631\u06cc\u200c\u06af\u06cc\u0631\u06cc \u0627\u0632 pip \u0646\u0635\u0628 \u06a9\u0646\u06cc\u062f:pip install django-chelseru\n'drfchelseru' \u0631\u0627 \u0628\u0647 INSTALLED_APPS \u062f\u0631 \u067e\u0631\u0648\u0646\u062f\u0647 settings.py \u062e\u0648\u062f \u0628\u06cc\u0641\u0632\u0627\u06cc\u06cc\u062f:INSTALLED_APPS = [\n ...\n 'channels',\n 'rest_framework',\n 'rest_framework_simplejwt',\n 'drfchelseru',\n ...\n]\n\ud83d\udee0\ufe0f \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc\u0628\u0631\u0627\u06cc \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u0628\u0633\u062a\u0647\u060c \u0648\u0627\u0698\u0647\u200c\u0646\u0627\u0645\u0647 DJANGO_CHELSERU \u0631\u0627 \u0628\u0647 \u067e\u0631\u0648\u0646\u062f\u0647 settings.py \u062e\u0648\u062f \u0628\u06cc\u0641\u0632\u0627\u06cc\u06cc\u062f. \u0627\u06cc\u0646 \u0648\u0627\u0698\u0647\u200c\u0646\u0627\u0645\u0647 \u0628\u0647 \u0634\u0645\u0627 \u067e\u0631\u0648\u0627\u0646\u0647 \u0645\u06cc\u200c\u062f\u0647\u062f \u062a\u0627 \u0686\u06cc\u062f\u0645\u0627\u0646\u200c\u0647\u0627\u06cc \u0631\u0627\u0633\u062a\u06cc\u200c\u0622\u0632\u0645\u0627\u06cc\u06cc \u0648 \u067e\u06cc\u0627\u0645\u06a9 \u0631\u0627 \u062e\u0648\u062f\u0633\u0627\u062e\u062a\u0647 \u0646\u0645\u0627\u06cc\u06cc\u062f.# settings.py\n\nDJANGO_CHELSERU = {\n 'AUTH': {\n 'AUTH_METHOD' : 'OTP', # \u0631\u0648\u0634\u200c\u0647\u0627\u06cc \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0634\u062f\u0647: OTP, PASSWD\n 'AUTH_SERVICE' : 'rest_framework_simplejwt', # \u0633\u0631\u0648\u06cc\u0633\u200c\u0647\u0627\u06cc \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0634\u062f\u0647: rest_framework_simplejwt\n 'OPTIONS': {\n 'OTP_LENGTH' : 8, # \u067e\u06cc\u0634\u200c\u0641\u0631\u0636: 8\n 'OTP_EXPIRE_PER_MINUTES': 4, # \u067e\u06cc\u0634\u200c\u0641\u0631\u0636: 4\n 'OTP_SMS_TEMPLATE_ID' : 1, # \u0634\u0646\u0627\u0633\u0647 \u0642\u0627\u0644\u0628 \u067e\u06cc\u0627\u0645\u06a9\u06cc \u0628\u0631\u0627\u06cc \u0631\u0645\u0632 \u06cc\u06a9\u200c\u0628\u0627\u0631\u0645\u0635\u0631\u0641\n }\n },\n 'SMS': {\n 'SMS_SERVICE': 'PARSIAN_WEBCO_IR', # \u06cc\u0627\u0631\u06cc\u200c\u062f\u0647\u0646\u062f\u0647\u200c\u0647\u0627\u06cc \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0634\u062f\u0647: PARSIAN_WEBCO_IR, MELI_PAYAMAK_COM, KAVENEGAR_COM\n 'SETTINGS': {\n 'PARSIAN_WEBCO_IR_API_KEY' : 'YOUR_PARSIAN_WEBCO_API_KEY',\n 'MELI_PAYAMAK_COM_USERNAME' : 'YOUR_MELI_PAYAMAK_USERNAME',\n 'MELI_PAYAMAK_COM_PASSWORD' : 'YOUR_MELI_PAYAMAK_PASSWORD',\n 'MELI_PAYAMAK_COM_FROM' : 'YOUR_MELI_PAYAMAK_FROM_NUMBER',\n 'KAVENEGAR_COM_API_KEY' : 'YOUR_KAVENEGAR_API_KEY',\n 'KAVENEGAR_COM_FROM' : 'YOUR_KAVENEGAR_FROM_NUMBER',\n },\n 'TEMPLATES': {\n 'T1': 1,\n 'T2': 2,\n ...\n }\n }\n}\nAUTH_METHOD: \u0631\u0648\u0634 \u0631\u0627\u0633\u062a\u06cc\u200c\u0622\u0632\u0645\u0627\u06cc\u06cc \u0631\u0627 \u0631\u0648\u0634\u0646 \u0645\u06cc\u200c\u0633\u0627\u0632\u062f. \u0628\u0631\u0627\u06cc \u0631\u0627\u0633\u062a\u06cc\u200c\u0622\u0632\u0645\u0627\u06cc\u06cc \u067e\u06cc\u0627\u0645\u06a9\u06cc\u060c \u0627\u0632 'OTP' \u0628\u0647\u0631\u0647 \u0628\u06af\u06cc\u0631\u06cc\u062f.OTP_LENGTH: \u062f\u0631\u0627\u0632\u0627\u06cc \u0631\u0645\u0632 \u06cc\u06a9\u200c\u0628\u0627\u0631\u0645\u0635\u0631\u0641.OTP_EXPIRE_PER_MINUTES: \u0632\u0645\u0627\u0646 \u067e\u0627\u06cc\u0627\u0646\u200c\u06cc\u0627\u0641\u062a\u0646 \u0631\u0645\u0632 \u06cc\u06a9\u200c\u0628\u0627\u0631\u0645\u0635\u0631\u0641 \u0628\u0631 \u067e\u0627\u06cc\u0647 \u062f\u0642\u06cc\u0642\u0647.OTP_SMS_TEMPLATE_ID: \u0634\u0646\u0627\u0633\u0647 \u0642\u0627\u0644\u0628 \u067e\u06cc\u0627\u0645\u06a9\u06cc \u06a9\u0647 \u0628\u0631\u0627\u06cc \u0641\u0631\u0633\u062a\u0627\u062f\u0646 \u0631\u0645\u0632 \u06cc\u06a9\u200c\u0628\u0627\u0631\u0645\u0635\u0631\u0641 \u0628\u0647\u0631\u0647 \u06af\u0631\u0641\u062a\u0647 \u0645\u06cc\u200c\u0634\u0648\u062f.SMS_SERVICE: \u06cc\u0627\u0631\u06cc\u200c\u062f\u0647\u0646\u062f\u0647 \u067e\u06cc\u0627\u0645\u06a9\u06cc \u062f\u0644\u062e\u0648\u0627\u0647 \u062e\u0648\u062f \u0631\u0627 \u0628\u0631\u06af\u0632\u06cc\u0646\u06cc\u062f.SETTINGS: \u0622\u06af\u0627\u0647\u06cc\u200c\u0647\u0627\u06cc \u0646\u06cc\u0627\u0632 \u0628\u0631\u0627\u06cc \u06cc\u0627\u0631\u06cc\u200c\u062f\u0647\u0646\u062f\u0647 \u067e\u06cc\u0627\u0645\u06a9\u06cc \u0628\u0631\u06af\u0632\u06cc\u062f\u0647\u200c\u062a\u0627\u0646 \u0631\u0627 \u0641\u0631\u0627\u0647\u0645 \u0622\u0648\u0631\u06cc\u062f.TEMPLATES: \u0634\u0646\u0627\u0633\u0647\u200c\u0647\u0627\u06cc \u0642\u0627\u0644\u0628 \u067e\u06cc\u0627\u0645\u06a9\u06cc \u062e\u0648\u062f \u0631\u0627 \u0631\u0648\u0634\u0646 \u0633\u0627\u0632\u06cc\u062f.\ud83d\udd0c \u0646\u0642\u0637\u0647\u200c\u0647\u0627\u06cc \u067e\u0627\u06cc\u0627\u0646\u06cc\u0628\u0631\u0627\u06cc \u0628\u0647 \u06a9\u0627\u0631\u06af\u06cc\u0631\u06cc \u06a9\u0627\u0631\u06a9\u0631\u062f\u0647\u0627\u06cc \u0627\u06cc\u0646 \u0628\u0633\u062a\u0647\u060c URL\u0647\u0627\u06cc \u0632\u06cc\u0631 \u0631\u0627 \u0628\u0647 \u067e\u0631\u0648\u0646\u062f\u0647 urls.py \u062e\u0648\u062f \u0628\u06cc\u0641\u0632\u0627\u06cc\u06cc\u062f.# urls.py\n\nfrom django.urls import path, include\n\nurlpatterns = [\n ...\n path('api/', include('drfchelseru.urls')),\n ...\n]\n\u0627\u06cc\u0646 \u0628\u0633\u062a\u0647 \u0646\u0642\u0637\u0647\u200c\u0647\u0627\u06cc \u067e\u0627\u06cc\u0627\u0646\u06cc API \u0632\u06cc\u0631 \u0631\u0627 \u0641\u0631\u0627\u0647\u0645 \u0645\u06cc\u200c\u0622\u0648\u0631\u062f:\u0646\u0642\u0637\u0647\u200c \u067e\u0627\u06cc\u0627\u0646\u06cc\u0634\u0631\u062d\u0631\u0648\u0634/api/otp/send/\u06cc\u06a9 \u0631\u0645\u0632 \u06cc\u06a9\u200c\u0628\u0627\u0631\u0645\u0635\u0631\u0641 \u0628\u0647 \u0634\u0645\u0627\u0631\u0647 \u0647\u0645\u0631\u0627\u0647 \u06af\u0641\u062a\u0647\u200c\u0634\u062f\u0647 \u0645\u06cc\u200c\u0641\u0631\u0633\u062a\u062f.POST/api/authenticate/\u06a9\u0627\u0631\u0628\u0631\u06cc \u0631\u0627 \u0628\u0627 \u0631\u0645\u0632 \u06cc\u06a9\u200c\u0628\u0627\u0631\u0645\u0635\u0631\u0641 \u062f\u0631\u06cc\u0627\u0641\u062a\u200c\u0634\u062f\u0647\u060c \u0631\u0627\u0633\u062a\u06cc\u200c\u0622\u0632\u0645\u0627\u06cc\u06cc \u0645\u06cc\u200c\u06a9\u0646\u062f.POST/api/sessions/\u0646\u0634\u0633\u062a\u200c\u0647\u0627\u06cc \u0641\u0639\u0627\u0644 \u06a9\u0627\u0631\u0628\u0631 \u0631\u0627 \u0641\u0647\u0631\u0633\u062a \u06a9\u0631\u062f\u0647 \u0648 \u062f\u0631\u0627\u06cc\u0648\u0631\u06cc \u0645\u06cc\u200c\u06a9\u0646\u062f.GET/api/message/send/\u06cc\u06a9 \u067e\u06cc\u0627\u0645\u06a9 \u0628\u0627 \u06cc\u0627\u0631\u06cc\u200c\u062f\u0647\u0646\u062f\u0647 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc\u200c\u0634\u062f\u0647 \u0645\u06cc\u200c\u0641\u0631\u0633\u062a\u062f.POST\u0628\u0647 \u06a9\u0627\u0631\u06af\u06cc\u0631\u06cc \u0646\u0642\u0637\u0647\u200c\u0647\u0627\u06cc \u067e\u0627\u06cc\u0627\u0646\u06cc1. \u0641\u0631\u0633\u062a\u0627\u062f\u0646 \u0631\u0645\u0632 \u06cc\u06a9\u200c\u0628\u0627\u0631\u0645\u0635\u0631\u0641 (/api/otp/send/)\u0631\u0648\u0634: POST\u0634\u0631\u062d: \u06cc\u06a9 \u0631\u0645\u0632 \u06cc\u06a9\u200c\u0628\u0627\u0631\u0645\u0635\u0631\u0641 \u0628\u0647 \u0634\u0645\u0627\u0631\u0647 \u0647\u0645\u0631\u0627\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0645\u06cc\u200c\u0641\u0631\u0633\u062a\u062f.\u062f\u0627\u062f\u0647\u200c\u0646\u0645\u0627\u0647\u0627\u06cc \u0646\u06cc\u0627\u0632:\u062f\u0627\u062f\u0647\u200c\u0646\u0645\u0627\u06af\u0648\u0646\u0647\u0634\u0631\u062d\u0646\u0645\u0648\u0646\u0647mobile_numberstr\u0634\u0645\u0627\u0631\u0647 \u0647\u0645\u0631\u0627\u0647 \u06a9\u0627\u0631\u0628\u0631.09121234567\u067e\u0627\u0633\u062e\u200c\u0647\u0627:HTTP 200 OK: \u0631\u0645\u0632 \u06cc\u06a9\u200c\u0628\u0627\u0631\u0645\u0635\u0631\u0641 \u0628\u0627 \u06a9\u0627\u0645\u06cc\u0627\u0628\u06cc \u0641\u0631\u0633\u062a\u0627\u062f\u0647 \u0634\u062f.{\"details\": \"The OTP code was sent correctly.\"}\nHTTP 400 BAD REQUEST: \u0633\u0627\u062e\u062a\u0627\u0631 \u0646\u0627\u062f\u0631\u0633\u062a mobile_number.HTTP 409 CONFLICT: \u06cc\u06a9 \u0631\u0645\u0632 \u06cc\u06a9\u200c\u0628\u0627\u0631\u0645\u0635\u0631\u0641 \u067e\u06cc\u0634\u200c\u062a\u0631 \u0641\u0631\u0633\u062a\u0627\u062f\u0647 \u0634\u062f\u0647 \u0648 \u0647\u0646\u0648\u0632 \u0631\u0648\u0627\u06cc\u06cc \u062f\u0627\u0631\u062f.{\"details\": \"An OTP code has already been sent. Please wait X seconds before trying again.\"}\nHTTP 500 INTERNAL SERVER ERROR: \u06cc\u06a9 \u062f\u0634\u0648\u0627\u0631\u06cc \u062f\u0631 \u06a9\u0627\u0631\u06af\u0630\u0627\u0631 \u067e\u06cc\u0634 \u0622\u0645\u062f\u0647 \u0627\u0633\u062a.2. \u0631\u0627\u0633\u062a\u06cc\u200c\u0622\u0632\u0645\u0627\u06cc\u06cc (/api/authenticate/)\u0631\u0648\u0634: POST\u0634\u0631\u062d: \u06a9\u0627\u0631\u0628\u0631 \u0631\u0627 \u0628\u0627 \u0631\u0645\u0632 \u06cc\u06a9\u200c\u0628\u0627\u0631\u0645\u0635\u0631\u0641 \u0641\u0631\u0627\u0647\u0645 \u0634\u062f\u0647\u060c \u0631\u0627\u0633\u062a\u06cc\u200c\u0622\u0632\u0645\u0627\u06cc\u06cc \u0645\u06cc\u200c\u06a9\u0646\u062f. \u0627\u06af\u0631 \u0628\u0627 \u06a9\u0627\u0645\u06cc\u0627\u0628\u06cc \u0627\u0646\u062c\u0627\u0645 \u0634\u0648\u062f\u060c \u062a\u0648\u06a9\u0646\u200c\u0647\u0627\u06cc JWT (access \u0648 refresh) \u0631\u0627 \u0628\u0627\u0632\u0645\u06cc\u200c\u06af\u0631\u062f\u0627\u0646\u062f.\u062f\u0627\u062f\u0647\u200c\u0646\u0645\u0627\u0647\u0627\u06cc \u0646\u06cc\u0627\u0632:\u062f\u0627\u062f\u0647\u200c\u0646\u0645\u0627\u06af\u0648\u0646\u0647\u0634\u0631\u062d\u0646\u0645\u0648\u0646\u0647mobile_numberstr\u0634\u0645\u0627\u0631\u0647 \u0647\u0645\u0631\u0627\u0647 \u06a9\u0627\u0631\u0628\u0631.09121234567codestr\u0631\u0645\u0632 \u06cc\u06a9\u200c\u0628\u0627\u0631\u0645\u0635\u0631\u0641 \u062f\u0631\u06cc\u0627\u0641\u062a \u0634\u062f\u0647 \u0627\u0632 \u0631\u0627\u0647 \u067e\u06cc\u0627\u0645\u06a9.12345678groupint\u0627\u062e\u062a\u06cc\u0627\u0631\u06cc: \u06cc\u06a9 \u0634\u0646\u0627\u0633\u0647 \u062f\u0633\u062a\u0647 \u0628\u0631\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631.1\u067e\u0627\u0633\u062e\u200c\u0647\u0627:HTTP 200 OK: \u0631\u0627\u0633\u062a\u06cc\u200c\u0622\u0632\u0645\u0627\u06cc\u06cc \u0628\u0627 \u06a9\u0627\u0645\u06cc\u0627\u0628\u06cc \u0627\u0646\u062c\u0627\u0645 \u0634\u062f.{\n \"access\": \"...\",\n \"refresh\": \"...\"\n}\nHTTP 401 UNAUTHORIZED: \u0631\u0645\u0632 \u06cc\u06a9\u200c\u0628\u0627\u0631\u0645\u0635\u0631\u0641 \u0646\u0627\u0631\u0648\u0627 \u06cc\u0627 \u067e\u0627\u06cc\u0627\u0646\u200c\u06cc\u0627\u0641\u062a\u0647.{\"error\": \"The code sent to this mobile number was not found.\"}\nHTTP 400 BAD REQUEST: \u062f\u0627\u062f\u0647\u200c\u0646\u0645\u0627\u0647\u0627\u06cc \u0646\u06cc\u0627\u0632 \u0646\u0627\u067e\u06cc\u062f\u0627 \u06cc\u0627 \u0633\u0627\u062e\u062a\u0627\u0631 \u0646\u0627\u062f\u0631\u0633\u062a.HTTP 500 INTERNAL SERVER ERROR: \u06cc\u06a9 \u062f\u0634\u0648\u0627\u0631\u06cc \u062f\u0631 \u06a9\u0627\u0631\u06af\u0630\u0627\u0631 \u067e\u06cc\u0634 \u0622\u0645\u062f\u0647 \u0627\u0633\u062a.3. \u0641\u0631\u0633\u062a\u0627\u062f\u0646 \u067e\u06cc\u0627\u0645\u06a9 (/api/message/send/)\u0631\u0648\u0634: POST\u0634\u0631\u062d: \u06cc\u06a9 \u067e\u06cc\u0627\u0645\u06a9 \u062e\u0648\u062f\u0633\u0627\u062e\u062a\u0647 \u0631\u0627 \u0628\u0627 \u06cc\u0627\u0631\u06cc\u200c\u062f\u0647\u0646\u062f\u0647 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc\u200c\u0634\u062f\u0647 \u0645\u06cc\u200c\u0641\u0631\u0633\u062a\u062f.\u062f\u0627\u062f\u0647\u200c\u0646\u0645\u0627\u0647\u0627\u06cc \u0646\u06cc\u0627\u0632:\u062f\u0627\u062f\u0647\u200c\u0646\u0645\u0627\u06af\u0648\u0646\u0647\u0634\u0631\u062d\u0646\u0645\u0648\u0646\u0647mobile_numberstr\u0634\u0645\u0627\u0631\u0647 \u0647\u0645\u0631\u0627\u0647 \u06af\u06cc\u0631\u0646\u062f\u0647.09121234567message_textstr\u0646\u0648\u0634\u062a\u0627\u0631 \u067e\u06cc\u0627\u0645. (\u0628\u06cc\u0634\u06cc\u0646\u0647 \u06f2\u06f9\u06f0 \u0646\u0648\u06cc\u0633\u0647)Hello, World!template_idint\u0628\u0631\u0627\u06cc \u0628\u0631\u062e\u06cc \u06cc\u0627\u0631\u06cc\u200c\u062f\u0647\u0646\u062f\u0647\u200c\u0647\u0627 (\u0628\u0631\u0627\u06cc \u0646\u0645\u0648\u0646\u0647 \u067e\u0627\u0631\u0633\u06cc\u0627\u0646) \u0646\u06cc\u0627\u0632 \u0627\u0633\u062a.1\u067e\u0627\u0633\u062e\u200c\u0647\u0627:HTTP 200 OK: \u067e\u06cc\u0627\u0645 \u0628\u0627 \u06a9\u0627\u0645\u06cc\u0627\u0628\u06cc \u0641\u0631\u0633\u062a\u0627\u062f\u0647 \u0634\u062f.{\"details\": \"The Message was sent correctly.\"}\nHTTP 400 BAD REQUEST: \u062f\u0634\u0648\u0627\u0631\u06cc\u200c\u0647\u0627\u06cc \u062f\u0631\u0633\u062a\u200c\u0633\u0646\u062c\u06cc \u0628\u0631\u0627\u06cc \u062f\u0627\u062f\u0647\u200c\u0646\u0645\u0627\u0647\u0627.HTTP 401 UNAUTHORIZED: \u0631\u0627\u0633\u062a\u06cc\u200c\u0622\u0632\u0645\u0627\u06cc\u06cc \u0627\u0646\u062c\u0627\u0645 \u0646\u0634\u062f.HTTP 500 INTERNAL SERVER ERROR: \u06cc\u06a9 \u062f\u0634\u0648\u0627\u0631\u06cc \u062f\u0631 \u06a9\u0627\u0631\u06af\u0630\u0627\u0631 \u067e\u06cc\u0634 \u0622\u0645\u062f\u0647 \u0627\u0633\u062a.HTTP 502 BAD GATEWAY: \u06cc\u0627\u0631\u06cc\u200c\u062f\u0647\u0646\u062f\u0647 \u067e\u06cc\u0627\u0645\u06a9\u06cc \u06cc\u06a9 \u062f\u0634\u0648\u0627\u0631\u06cc \u0631\u0627 \u0628\u0627\u0632\u06af\u0631\u062f\u0627\u0646\u062f.4. \u0641\u0647\u0631\u0633\u062a \u0646\u0634\u0633\u062a\u200c\u0647\u0627 (/api/sessions/)\u0631\u0648\u0634: GET\u0634\u0631\u062d: \u0647\u0645\u0647 \u0646\u0634\u0633\u062a\u200c\u0647\u0627\u06cc \u0641\u0639\u0627\u0644 \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u0631\u0627 \u0641\u0647\u0631\u0633\u062a \u0645\u06cc\u200c\u06a9\u0646\u062f. \u0646\u06cc\u0627\u0632 \u0628\u0647 \u0631\u0627\u0633\u062a\u06cc\u200c\u0622\u0632\u0645\u0627\u06cc\u06cc (IsAuthenticated) \u062f\u0627\u0631\u062f.\u0633\u0631\u0628\u0631\u06af\u200c\u0647\u0627\u06cc \u0646\u06cc\u0627\u0632:\u0633\u0631\u0628\u0631\u06af\u0627\u0631\u0632\u0634AuthorizationBearer <your_access_token>\ud83d\udca1 \u0645\u062f\u0644\u200c\u0647\u0627\u0627\u06cc\u0646 \u0628\u0633\u062a\u0647 \u06cc\u06a9 \u0645\u062f\u0644 Session \u0628\u0631\u0627\u06cc \u062f\u0631\u0627\u06cc\u0648\u0631\u06cc \u0646\u0634\u0633\u062a\u200c\u0647\u0627\u06cc \u0641\u0639\u0627\u0644 \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u062f\u0627\u0631\u062f. \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u0628\u0647 \u0627\u06cc\u0646 \u0646\u0634\u0633\u062a\u200c\u0647\u0627 \u0627\u0632 \u0631\u0627\u0647 \u0646\u0642\u0637\u0647\u200c \u067e\u0627\u06cc\u0627\u0646\u06cc /api/sessions/ \u062f\u0633\u062a\u0631\u0633\u06cc \u06cc\u0627\u0641\u062a\u0647 \u0648 \u0622\u0646\u0647\u0627 \u0631\u0627 \u062f\u0631\u0627\u06cc\u0648\u0631\u06cc \u06a9\u0646\u06cc\u062f.\n",
"bugtrack_url": null,
"license": null,
"summary": "Authentication system, online and real-time chat, SMS system for Iranian SMS services.",
"version": "1.0.2",
"project_urls": {
"Documentation": "https://github.com/Chelseru/django-chelseru-lour/",
"Homepage": "https://pipdjango.chelseru.com",
"Telegram Channel": "https://t.me/ChelseruCom",
"Telegram Group": "https://t.me/bahmanpy"
},
"split_keywords": [
"djangochelseruchat",
"djangochat",
"drfchat",
"online-chat",
"online",
"real-time",
"chat",
"iran",
"chelseru",
"lor",
"lur",
"bahman",
"rashnu",
"lour",
"sms",
"djangoauth",
"auth",
"ywt",
"otpauth",
"otp",
"authentication",
"djangootp",
"djangoiransms",
"iransms",
"djangosms",
"djangokavenegar",
"djangomelipayamak",
"sobhan",
"\u0686\u062a",
"",
"\u0633\u0628\u062d\u0627\u0646",
"\u0628\u0647\u0645\u0646",
"\u0631\u0634\u0646\u0648",
"\u0686\u0644\u0633\u0631\u0648",
"\u062c\u0646\u06af\u0648",
"\u067e\u0627\u06cc\u062a\u0648\u0646",
"\u0644\u0631",
"\u0644\u0648\u0631",
"\u0622\u0646\u0644\u0627\u06cc\u0646",
"\u0631\u06cc\u0644",
"\u062a\u0627\u06cc\u0645"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "416b43a0df4f96077c7fb32443a56627aa7b5ab7c1a281a3ee75a7ca1d2cc2f3",
"md5": "da28514e01fc718c8d0147dc8c59c980",
"sha256": "5dd3021869b1c982a95cbe848a03a98dcad35148772a23d0ae9d02ab5d90ddd7"
},
"downloads": -1,
"filename": "django_chelseru-1.0.2-py3-none-any.whl",
"has_sig": false,
"md5_digest": "da28514e01fc718c8d0147dc8c59c980",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.11",
"size": 19493,
"upload_time": "2025-08-13T04:33:39",
"upload_time_iso_8601": "2025-08-13T04:33:39.741251Z",
"url": "https://files.pythonhosted.org/packages/41/6b/43a0df4f96077c7fb32443a56627aa7b5ab7c1a281a3ee75a7ca1d2cc2f3/django_chelseru-1.0.2-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "73ac9a6e09e5cff95b518c8716b5739293aae619aa7422ce0b6ecf705fd22de5",
"md5": "840fb8dd120bc25b53535b7ae703bff1",
"sha256": "7566cbbe18d87a1a34c98b39d6d9bfb4eb5612ccea03046cdd8a0b8c20fabda7"
},
"downloads": -1,
"filename": "django_chelseru-1.0.2.tar.gz",
"has_sig": false,
"md5_digest": "840fb8dd120bc25b53535b7ae703bff1",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.11",
"size": 16908,
"upload_time": "2025-08-13T04:33:41",
"upload_time_iso_8601": "2025-08-13T04:33:41.199390Z",
"url": "https://files.pythonhosted.org/packages/73/ac/9a6e09e5cff95b518c8716b5739293aae619aa7422ce0b6ecf705fd22de5/django_chelseru-1.0.2.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-08-13 04:33:41",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "Chelseru",
"github_project": "django-chelseru-lour",
"github_not_found": true,
"lcname": "django-chelseru"
}