【发布时间】:2012-07-19 04:17:01
【问题描述】:
在我的聚合 NBA 球员统计数据的 Django 项目(作为一个学习项目)中,我构建了一个简单的搜索视图,允许您按名字或姓氏(或两者)搜索球员。它在开发服务器上运行良好,但现在我想使用 Google App Engine 部署我的网站,我遇到了我认为是由于 GAE 的 High Replication Datastore 造成的错误。
我的印象是Django-nonrel/dbindexer 工具可以帮助缓解这个问题,但到目前为止,我尝试实施它们无济于事——当我尝试在我的网站上搜索时,我收到一个错误日志,其中包含消息:'DatabaseError:数据库不支持此查询。'
我猜我的问题可能是这些工具的说明分布在多个文档中,这些文档是在其开发的不同阶段编写的,因此我很难将它们组合成一张连贯的图片。此外,我查看了他们提供的 testapp,它的设置似乎与他们的说明有所不同。所以我想问两个问题:
1) 我编写的视图是否甚至可以与 GAE 和 Django-nonrel/dbindexer 一起使用?这里是:
def search(request):
query = request.GET.get('q','')
querywords = query.split(' ')
lname=''
for word in querywords[1:-1]:
lname += word+' '
lname += querywords[-1]
if query:
if len(querywords)>1:
qset = (
Q(first_name__iexact=querywords[0]) &
Q(last_name__iexact=lname)
)
exact_results = Player.objects.filter(qset).distinct()
if exact_results != []:
result = exact_results
qset = (
Q(first_name__icontains=querywords[0])|
Q(last_name__icontains=querywords[0])|
Q(first_name__icontains=lname)|
Q(last_name__icontains=lname)
)
results = Player.objects.filter(qset).distinct()
results = results.order_by('last_name','first_name')
else:
qset = (
Q(first_name__icontains=querywords[0]) &
Q(last_name__icontains=lname)|
Q(first_name__icontains=querywords[0])|
Q(last_name__icontains=querywords[0])
)
results = Player.objects.filter(qset).distinct()
results = results.order_by('last_name','first_name')
result = ''
else:
qset = (
Q(first_name__icontains=querywords[0])|
Q(last_name__icontains=querywords[0])
)
results = Player.objects.filter(qset).distinct()
results = results.order_by('last_name','first_name')
result = ''
else:
results = []
result = ''
return render(request,'search.html', {
'result':result,
'results': results,
'query': query,
'querywords':querywords
})
2) 如果可以使用,并且我在 dev 中的项目结构如下,我可以遵循哪些最简洁的步骤来使我的搜索视图在 GAE 上正常工作?
NBA/
__init__.py
manage.py
settings.py
urls.py
templates/
(html files)
players/
__init__.py
admin.py
models.py
tests.py
views.py
fixtures/
(some .yaml fixture files)
static/
(css, js, and gif files)
【问题讨论】:
-
你是什么意思它在开发服务器上工作正常?它在 dev_appserver 上正常运行?
-
我的意思是当我使用“python manage.py runserver”运行我的项目时,我的代码完全按照我的意愿运行。
-
我不清楚你是在运行 django 项目还是 django-nonrel 项目。听起来你建立了一个非 GAE django 项目,并试图让它在 GAE 上工作。我目前感到困惑的是,我希望如果您正确设置它,您应该会在本地看到相同的失败。我在你的树中没有看到 app.yaml 或 django 文件夹,这对于你的 GAE 项目来说是必需的。
-
你是对的;我建立了一个非 GAE 项目,并试图将其移植过来。我上面的所有信息都是针对我普通的旧 Django 项目的。到目前为止,我没有发布我尝试过的内容,因为它是从多篇文章和 testapp 示例中挑选出来的大杂烩。我希望有人能给我一套更统一的步骤来移植我的项目,但听起来这可能是不可能的。
-
我不太清楚,但我的建议是用简单的非关系查询重写应用程序。
标签: django google-app-engine django-nonrel