• 1400/03/30

بازدید های اخیر :

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

 

  • 1400/03/30
  • ساعت 22:53

سلام وقت بخیر

برای ثبت بازدید از مقاله یا محصول و یا هر مدلی که میخواید یه فیلد به مدل مورد نظرتون اضافه کنید به این شکل :

viewd_count = models.IntegerField(default=0)

که تعداد بازدید رو برای شما ذخیره میکنه و در ادامه میتونید با order_by این فیلد بر اساس پربازدید ترین ها مرتبش کنید.

اگر میخواید با هر بار لود شدن صفحه بازدید ثبت شه مثلا یک صفحه رو رفرش کنید و مجدد بازدید ثبت کنه ، نیازی به ثبت بازدید ها نیست و کافیه توی ویوی مورد نظر بنویسید :

object # instance of your model
object.viewd_count += 1
object.save()

اما اینجوری بازدید فیک میخوره و اهمیت چندانی نداره برای بازدید واقعی تر بهتر هستش یه مدل برای بازدید بسازید و بازدید هارو مثلا بر اساس IP کاربر ثبت کنید 

برای دریافت IP کاربر توابع اماده مختلفی هست این یکیشه مثلا که request رو دریافت میکنه و IP رو برمی گردونه :

def get_client_ip(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')
    return ip

مدل هم به این شکل میشه مثلا برای بازدید محصول :

class ProductView(models.Model):
	user_ip = models.CharField(max_length=100)
	product = models.ForeginKey(Product, on_delete=models.SET_NULL, null=True)
	create_date = models.DateTimeField(auto_now_add=True)

حالا داخل ویو جزئیات محصول مورد نظر برای ثبت بازدید به این شکل مینویسیم :

product # instance of Product

ip = get_client_ip(request)

if not ProductView.objects.filter(user_ip=ip, product_id=product.id).exists():
	ProductView.objects.create(user_ip=ip, product_id=product.id)
	product.viewd_count += 1
	product.save()

با اینکار میاد چک میکنه اگر IP فعلی از این محصول بازدید کرده بود دیگه بازدید ثبت نمیکنه در غیر این صورت ثبت میکنه

البته باز هم دقیق نیست چون روزانه با فیلترشکن و موارد دیگه بارها IP ما تغییر میکنه و بازدید ثبت میکنه

ولی باز هم خیلی دقیق تر از حالت اول هستش

موفق باشید


  • 1400/03/31
  • ساعت 17:05

خیلی ممنون از توضیح کاملتون درست شد

فقط امکان داره توضیح بدید این تکه کد چی کار میکنه؟

def get_client_ip(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')
    return ip

کداش رو متوجه نمیشم

ممنون میشم


  • 1400/03/31
  • ساعت 19:46

 

 

استاد من کدم رو این شکلی نوشتم برای پیدا کردن بیشترین بازدید هر کاربر

این خطارو میده میگه به product دسترسی نداره درحالی که من ForeignKey زدم 

دلیلیش رو میدونید؟


  • 1400/04/01
  • ساعت 16:43

کدوم قسمت رو میگین دوست من

من خطایی در کدتون نمیبینم


  • 1400/04/05
  • ساعت 13:59

ممنون استاد حل شد

امکانش هست این تکه کدرو توضیح بدید؟

def get_client_ip(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') 
		return ip

  • 1400/04/09
  • ساعت 11:29

این قطعه کد با استفاده از درخواستی که به سرور ارسال شده، مقدار IP رو برمیگردونه که بتونین ازش استفاده کنین


  • 1400/04/09
  • ساعت 20:10

مممون


logo-samandehi