我只是尝试使用Django, 如何实现一个存储数据库中提供的请求数的计数器?
我想计算GET请求,我该怎么办才能使它工作?
我的模板,
<form action="/submit/" method="GET">
<input type="text" name="q">
<input type="submit" value="Submit">
</form>
我的观点
def result(request):
name = request.GET['q']
message = 'your name is %r ' % name
return render(request, 'result.html', {'message': message})
我想计算按下提交按钮的次数。我应该开始一个新的应用程序counter
还是有其他方法来实现一个计数器?
答案 0 :(得分:2)
好吧,session就是为了这个。
def result(request):
name = request.GET['q']
message = 'your name is %r ' % name
hit = request.session.get('hit')
if not hit:
request.session['hit'] = 1
else:
request.session['hit'] += 1
return render(request, 'result.html', {'message': message})
通过会话,您可以在请求之间存储信息。
答案 1 :(得分:1)
这可能有些混乱,但是你应该从会话中获得基本概念而不是get方法 model / .py描绘你朋友的模型
friend = models.ForeignKey("self", related_name="referral", null=True, blank=True)
view.py这是你计算过多少朋友
cool_obj = cool.objects.get(ref_id=ref_id)
obj = cool.objects.filter(friend=cool_obj)
count = cool_obj.referral.all().count()
这是你如何通过中间件获取你的东西
def home(request):
try:
cool_id = request.session['cool_id_ref']
obj = cool.objects.get(id=cool_id)
except:
obj = None
form = CoolJoin(request.POST or None)
if form.is_valid():
new_cool = form.save(commit=False)
email = form.cleaned_data['email']
new_cools, created = cool.objects.get_or_create(email=email)
if created:
new_cools.ref_id = get_ref_id()
if not obj == None:
new_cools.friend = obj
new_cools.ip_adress = get_ip(request)
new_cools.save()
return HttpResponseRedirect("/%s" %(new_cools.ref_id))
context = {"form": form}
template = "home.html"
return render(request, template, context)
中间件/吡啶
class ReferMiddleware():
def process_request(self, request):
ref_id = request.GET.get("ref")
try:
obj = cool.objects.get(ref_id = ref_id)
except:
obj = None
if obj:
request.session['cool_id_ref'] = obj.id
答案 2 :(得分:0)
您应该使用一些键值存储来计数器。例如,redis。它有内置方法INCR,可用于计数器:
有一些基于redis的django应用程序来存储计数器:
https://github.com/bradmontgomery/django-redis-metrics
https://github.com/Suor/django-counters
但我认为自己编码计数器会更好,而不需要任何额外的django应用程序。有python-redis驱动程序:
https://pypi.python.org/pypi/redis/
从文档中可以看出,与python中的redis进行交互非常简单。