اذهب إلى المحتوى
  • 0

الحصول على موقع المستخدم عند التسجيل (خطوط الطول والعرض ) وحفظها في قاعدة البيانات ضمن مشروع دجانغو

Zeina Almakdisi

السؤال

مرحبا 

ضمن مشروع دجانغو احتاج الى الحصول على موقع المستخدم عند التسجيل (خطوط الطول والعرض ) وحفظها في قاعدة البيانات 

حاولت العمل على 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()

 

هل هذه الطريقة مناسبة ام يوجد طريقة افضل 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

يمكنك باستعمال الحزمة 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)

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

مرحبا زينة،

للحصول على موقع مستخدم بطريقة سهلة وبسيطة يمكننا استخدام المكتبة 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.

بالتوفيق.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ On 11/9/2022 at 14:21 قال مسعود زاهي:

 

بعدها يمكننا الحصول على إحداثيات المستخدم في دوال العرض views على الشكل التالي:


def api_view(request):
   location = request.geolocation 
   
   
def other_view(request):
  location = request.geolocation
  ...

 

هل يمكن توضيح الفكرة 

كيف يتم حفظها ضمن قاعدة postgresql

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ منذ ساعة مضت قال 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()
    

بالتوفيق.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...