PDA

View Full Version : رویکرد صحیح برای داشتن تاریخ در پایگاه داده



roya_django
پنج شنبه 08 تیر 1396, 12:14 عصر
درود


من باید یک سری تاریخ رو از کاربر بگیرم و در پایگاه داده ذخیره کنم و البته باید بعدا از پایگاه بخوانم و به کاربر نشان دهم . بعد از سرچ هایی که داشتم متوجه شدم که دو رویکرد برای انجام اینکار وجود داره:

رویکرد اول : اینکه از https://github.com/slashmili/django-jalali


استفاده کنم و تاریخ رو به صورت شمسی در پایگاه داده ذخیره کنم. به این ترتیب میتوانم تاریخ رو به همان صورتی که از کاربر می گیرم در پایگاه ذخیره کنم

رویکرد دوم:

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

عده ای می گوینداگر فیلد تاریخ را شمسی بگیرم نمیتوانم روی ان کوئری های مناسب بزنم یا به راحتی آن را سریالیزه( به فرمت جی سون) ببرم

اگر ممکن است در مورد عملکر صحیحی که در اینده من را به زحمت های اضافی نمی اندازد و دست و بال مرا باز می گذارد راهنمایی بفرمایید.

اگر علاوه بر این دو رویکرد راه و روش دیگری هم هست شنیدنش برای من مفید است.

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


متشکرم

plague
پنج شنبه 08 تیر 1396, 14:37 عصر
میلادی بزار تو دیتابیس
مشکل شمسی اینه که دیتبایس و پایتون تاریخ شمسی رو نمیشناسن
در نتیجه اگه شمسی زخیره بکنی از خیلی از عملگر های وفانکشنالیتی ها ممکنه محروم کنی خودت رو

roya_django
پنج شنبه 08 تیر 1396, 15:21 عصر
باشه همین کارو میکنم

اما در مورد تبدیل کردن تاریخ ممکنه راهنمایی کنین ؟

تبدیل کردن تاریخ رو با کتابخونه ی جاوااسکریپت باید انجام بدم درسته؟ایا کتابخونه ی مناسبی برای این کار میشناسین که شمسی بدم میلادی بگیرم و همین طور برعکس؟

plague
جمعه 09 تیر 1396, 13:00 عصر
نه تبدیل کردن رو توی بک اند باید انجام بدی با پایتون وقتی میخای بریزی تو دیتبایس
توی قالب هم که میخای نشون بدی باید یه فیلترقالب براش بنویسی که اونم با پایتون کار میکنه

roya_django
جمعه 09 تیر 1396, 16:12 عصر
ممکنه ازتون خواهش کنم برام توضیح بدین که چرا نباید کار تبدیل تاریخ رو سمت مرورگر انجام بدم؟

من ابزار جاواسکریپتی پیدا کردم در ادرس زیر که گویا برای همین کار نوشته شده:

https://github.com/babakhani/PersianDate

plague
شنبه 10 تیر 1396, 13:13 عصر
ساده تره و کثیف کاریش کمتره و از همه مهمتر قابل اطمینان تره

اول اینکه همه ذخیره سازی در دیتابیس در سمت سرور انجام میشه نه در سمت کلاینت و کد های سمت کلاینت رو کاربر میبینه و میتونه دستکاری کنه
حالا فرض کاربر یه تاریخ رو ثبت میکنه توی بک اند خیلی احتمالش بیشتره که نیاز باشی این تاریخ رو کوئری بزنی روش یا محاسبه ریاضی رو ش انجام بدی و در نتیجه نیاز بشه که تبدیلش کنی از میلادی به شمسی یا برعکس

دوم اینکه شما وقتی از دیتابیس میخای بخونی و توی قالب نمایش بدی چجوری میخای با جاوااسکریپت تبدیل کنی ؟
مگه اینکه یه کد بنویسی که بعد از لود شدن صفحه و بگیره توی قلب بگرده دنبال تاریخ با کلاس خاص و تبدیلش کنه به شمسی مثلا که برمیگرده به همون بث کثیف کاری مگه اینکه از یه تمپلیت انجین js استفاده کنی که اون بحثش جداست

roya_django
یک شنبه 11 تیر 1396, 10:05 صبح
خب پس حالا که این طوره پس باید همین کارو بکنیم.
من فک کردم با جاوااسکریپت کار کردن باعث میشه سمت سرور کمتر کار کنیم اما خب همان طور که شما فرمودین امکان تغییر کد
توسط کاربر هست.

من برای تبدیل تاریخ شمسی به میلادی و برعکس ماژول زیر را پیدا کردم ایا منظور شما هم همین ماژول بود؟
یا ماژول مناسب تری میشناسین.
https://github.com/mjnaderi/Jalali.py

ممنون بابت پاسخ گویی

plague
یک شنبه 11 تیر 1396, 13:26 عصر
من از jdatetime استفاده میکنم
2 تا تابع داره GregorianToJalali , JalaliToGregorian برای تبدیل شمسی به میلادی و برعکس
روش کارش هم تو این مایه هاست


from jdatetime import GregorianToJalali , JalaliToGregorian

current_hj_date = GregorianToJalali(year ,month,day)