Zeina Almakdisi نشر 9 نوفمبر 2022 أرسل تقرير نشر 9 نوفمبر 2022 مرحبا ضمن مشروع دجانغو احتاج الى الحصول على موقع المستخدم عند التسجيل (خطوط الطول والعرض ) وحفظها في قاعدة البيانات حاولت العمل على PointField() class Clinic(Center): name_doctor = models.CharField(_("Name_Doctor:"),max_length=50) working_hours = models.CharField(_("working_hours:"),max_length=50,unique=False) waiting_time = models.IntegerField(_("waiting_time"), unique=True) price = models.IntegerField(_("Price is"), unique=True) slug = models.SlugField(_("slug") ) location = models.PointField() def save(self, **kwargs): if not self.location: address = u'%s %s %s %s %s %s' % (self.a2, self.a3, self.a4, self.a5, self.a6, self.pcode) address = address.encode('utf-8') geocoder = GoogleV3(api_key='My API Key') try: _, latlon = geocoder.geocode(address, timeout=10) except (URLError, ValueError, TypeError): pass else: point = "POINT(%s %s)" % (latlon[1], latlon[0]) self.location = geos.fromstr(point) super(Architect, self).save() هل هذه الطريقة مناسبة ام يوجد طريقة افضل 1 اقتباس
0 Ahmed Sadek Elamine Touahria نشر 9 نوفمبر 2022 أرسل تقرير نشر 9 نوفمبر 2022 يمكنك باستعمال الحزمة GeoIP2 from django.shortcuts import render, HttpResponse from django.contrib.gis.geoip2 import GeoIP2 def home(request): x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR') if x_forwarded_for: ip = x_forwarded_for.split(',')[0] else: ip = request.META.get('REMOTE_ADDR') device_type = "" browser_type = "" browser_version = "" os_type = "" os_version = "" if request.user_agent.is_mobile: device_type = "Mobile" if request.user_agent.is_tablet: device_type = "Tablet" if request.user_agent.is_pc: device_type = "PC" browser_type = request.user_agent.browser.family browser_version = request.user_agent.browser.version_string os_type = request.user_agent.os.family os_version = request.user_agent.os.version_string g = GeoIP2() # إنشاء كائن من GeoIP2 location = g.city(ip) # جلب المدينة أو الحداثيات ، حسب ما تريد location_country = location["country_name"] location_city = location["city"] context = { "ip": ip, "device_type": device_type, "browser_type": browser_type, "browser_version": browser_version, "os_type":os_type, "os_version":os_version, "location_country": location_country, "location_city": location_city } return render(request, "home.html", context) 1 اقتباس
0 مسعود زاهي نشر 9 نوفمبر 2022 أرسل تقرير نشر 9 نوفمبر 2022 مرحبا زينة، للحصول على موقع مستخدم بطريقة سهلة وبسيطة يمكننا استخدام المكتبة django-ip-geolocation. لتثبيت المكتبة نستخدم الأمر: pip install django-ip-geolocation نقوم بإضافة 'django_ip_geolocation.middleware.IpGeolocationMiddleware' إلى إعدادات ال MIDDLEWARE في ملف الإعدادات settings.py: MIDDLEWARE = [ ... 'django_ip_geolocation.middleware.IpGeolocationMiddleware', ... ] بعدها يمكننا الحصول على إحداثيات المستخدم في دوال العرض views على الشكل التالي: def api_view(request): location = request.geolocation def other_view(request): location = request.geolocation ... المكتبة تستخدم عدة واجهات برمجية APIs للحصول على المعلومات منها ماهو مجاني ومنها ماهو مدفوع. يمكنك تغيير الواجهة البرمجية أو انشاء واحدة جديدة من خلال الإعدادات BACKEND. بالتوفيق. 1 اقتباس
0 Zeina Almakdisi نشر 10 نوفمبر 2022 الكاتب أرسل تقرير نشر 10 نوفمبر 2022 بتاريخ On 11/9/2022 at 14:21 قال مسعود زاهي: بعدها يمكننا الحصول على إحداثيات المستخدم في دوال العرض views على الشكل التالي: def api_view(request): location = request.geolocation def other_view(request): location = request.geolocation ... هل يمكن توضيح الفكرة كيف يتم حفظها ضمن قاعدة postgresql 1 اقتباس
0 مسعود زاهي نشر 10 نوفمبر 2022 أرسل تقرير نشر 10 نوفمبر 2022 بتاريخ منذ ساعة مضت قال Zeina Makdisi: هل يمكن توضيح الفكرة كيف يتم حفظها ضمن قاعدة postgresql مرحبا مجددا، بعد تثبيت مكتبة django-ip-geolocation. نقوم بتحديد ال BACKEND الخاص بالمكتبة. المكتبة توفر لنا استخدام الواجهة البرمجية الخاصة بموقع ipstack وذلك عن طريق استخدام الباكند "django_ip_geolocation.backends.IPStack". لاستخدام هذا الأخير يستوجب علينا الحصول على API_KEY من موقع ipstack (الموقع لديه صيغة مجانية وصيغ أخرى مدفوعة). بعد الحصول على ال API_KEY نقوم بتحديث الإعدادات في ملف settings.py: IP_GEOLOCATION_SETTINGS = { 'BACKEND': 'django_ip_geolocation.backends.IPStack', 'BACKEND_API_KEY': '', # هنا نضع ال # API_KEY # لذي حصلنا عليه من موقع # ip stack } نستعمل المكتبة في الكود الخاص بنا وبالتحديد في دالة العرض المسؤولة عن حفظ المستخدمين في قاعدة البيانات، نفرض أن دالة العرض هي register: def register(request): # لجلب احداثيات المستخدم نقوم ب location = request.geolocation latitude = location['geo']['latitude'] longitude = location['geo']['longitude'] # لحفظ الاحداثيات في قاعدة البيانات نستخدم الصنف # Point point = Point(latitude, longitude) clinic = Clinic() clinic.location = point # نضيف المعلومات الأخرى الخاصة بالعيادة .... .... # نقوم بعملية الحفظ clinic.save() بالتوفيق. 1 اقتباس
السؤال
Zeina Almakdisi
مرحبا
ضمن مشروع دجانغو احتاج الى الحصول على موقع المستخدم عند التسجيل (خطوط الطول والعرض ) وحفظها في قاعدة البيانات
حاولت العمل على PointField()
هل هذه الطريقة مناسبة ام يوجد طريقة افضل
4 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.