我正在开发一个django python Web应用程序。在我的网页中,我通过发送“期限”向我的API发送请求,我的API应该返回搜索的“内容”字段。
我的内容在我的数据库中包含'xxx很好'。
这是我在views.py
中的代码def get_RuleStatement(request):
if request.is_ajax():
q = request.GET.get('term', '')
rule_statements = RuleStatement.objects.filter(content__icontains = q )[:1]
results = []
for rule_statement in rule_statements:
rule_statement_json = {}
rule_statement_json['content'] = rule_statement.content
results.append(rule_statement_json)
data = json.dumps(results)
else:
data = 'fail'
mimetype = 'application/json'
return HttpResponse(data, mimetype)
出于某种原因,每当我发送以下请求时:http://website.com/api/get_RuleStatement/?term=xxx
即使我的数据库包含数据'xxx很好',它也会返回'fail'。任何人都可以建议我哪里出错了吗?
答案 0 :(得分:0)
可能的唯一原因是is_ajax()
返回False。这意味着您没有提出AJAX
请求。我相信你正在对你的终端进行正常的HTTP调用。
答案 1 :(得分:0)
请参阅django documentation并检查您的HTTP请求是否已使用字符串'XMLHttpRequest'设置HTTP标头HTTP_X_REQUESTED_WITH
。然后request.is_ajax()
将返回True
。
注意像jQuery这样的现代库会自动为你设置这个HTTP头;例如,如果你得到jquery并且
<script>
$.get('/api/get_RuleStatement', {'term': 'xxx'})
</script>
或者,您可以删除if request.is_ajax():
行并将其设为
def get_RuleStatement(request):
q = request.GET.get('term', '')
rule_statements = RuleStatement.objects.filter(content__icontains = q)[:1]
results = []
for rule_statement in rule_statements:
results.append({'content': rule_statement.content})
data = json.dumps(results)
mimetype = 'application/json'
return HttpResponse(data, mimetype)
如果你不关心它是一个ajax调用,并希望能够看到响应,否则。此外,您可能需要考虑使用JsonResponse
而不是HttpResponse,因此您不必自己序列化或设置MIME类型。例如,
def get_RuleStatement(request):
q = request.GET.get('term', '')
rule_statements = RuleStatement.objects.filter(content__icontains = q)[:1]
results = []
for rule_statement in rule_statements:
results.append({'content': rule_statement.content})
return JsonResponse(results, safe=False)
# the safe = False is neccessary when
# you serialize non-dicts like results which is a list