0

这是我的服务器代码,执行时会产生 500 错误。

#views.py

导入json

def registered_users_number(request):
    if not request.is_ajax():
       raise Http404

     usercount_today =  User.objects.raw("SELECT * FROM core_user WHERE DATE(reg_date) =   DATE(NOW())")
     print usercount_today
     response_data['result'] = usercount_today
     response_data['message']='You messed up'
     return HttpResponse(json.dumps(response_data), content_type="application/json")  

我想由于我在 Django 和 Python 中的新手,我可以解决一些语法问题。

打印 usercount_today 也给出:- RawQuerySet: 'SELECT * FROM core_user WHERE DATE(reg_date) = DATE(NOW())'。

谢谢大家

4

3 回答 3

1

我认为您在代码中存在三个问题:

  1. 声明错误response_data。在行之前response_data['result'] = usercount_today,您应该定义response_data = {}

  2. 为什么需要print usercount_today?这是一个服务器代码,python 不会将此行打印到 HttpResponse 中。

  3. 您真的需要对用户对象检索的原始 sql 查询吗?为什么不在这一行中使用 django ORM?它不仅与代码风格有关,还与 Django 有关:从1.4开始,它以特定方式在 db 中保存时间对象,您应该改用日期感知的日期时间对象DATE(NOW())

于 2013-01-31T08:58:30.617 回答
1

如果没有看到更多代码,就不可能完全分辨出来,但是当您可以更轻松地利用 Django ORM 的强大功能时,您似乎正在使用原始 SQL。

对我来说,看起来你可以按照以下几行更干净地做到这一点:

import datetime

def registered_users_number(request):
    usercount_today = User.objects.filter(reg_date__gte=datetime.date.today()).count()
    response_data = simplejson.dumps({"count": usercount_today})
    return HttpResponse(response_data, content_type="application/json")

主要问题是我们看不到您的用户模型,并且很难判断 reg_date 是否已经是日期时间字段。如果没有,我建议models.DateTimeField(auto_now_add=True)对您的 reg_date 字段使用类似的东西,然后您可以轻松地使用上面的 ORM。

于 2013-02-04T05:10:49.993 回答
0

谢谢大家。

我得到了它。只不过是对 Django 不熟悉而已。

这是我所做的更改。

视图.py

def registered_users_number(request):   
    from django.db import connection
    cursor = connection.cursor()
    if not request.is_ajax():
         raise Http404

    cursor.execute("SELECT COUNT(*) FROM core_user WHERE DATE(reg_date) = DATE(NOW())")
    usercount_today = cursor.fetchone()  
    print(usercount_today)
    response_data = simplejson.dumps({"count": usercount_today})
    return HttpResponse(response_data, content_type="application/json") 
于 2013-01-31T10:33:16.707 回答