2016-08-24 23 views
0

私はdjango python Webアプリケーションを開発中です。私のWebページでは、私はAPIに「用語」を送信してリクエストを送信しています。私のAPIは検索の「content」フィールドを返すことになっています。Django JSONが適切なデータを送信していません

私のコンテンツには、データベースに「xxx is good」が含まれています。 http://website.com/api/get_RuleStatement/?term=xxx

それは私のデータベースは、データ「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) 

で私のコードです'誰かが私が間違っている場所を提案することはできますか?

+1

明らかに、 'request.is_ajax()'はfalseです。 [この他の質問](http://stackoverflow.com/questions/8587693/django-request-is-ajax-returning-false)への回答は役に立ちます。テスト時にリクエストをどのように送っていますか?それはそれがajax要求であるように見えるためには特定のヘッダーを持っていなければなりません。具体的には、HTTP_X_REQUESTED_WITHヘッダーは "XMLHttpRequest"に等しくなければなりません。 – Octopus

+0

私のWebページからajaxリクエストを送信しています – Elisha512

答えて

0

唯一の理由はis_ajax()です。戻り値はfalseです。つまり、あなたはAJAXリクエストをしていません。あなたがエンドポイントに通常のHTTPコールを行っていると思います。

0

django documentationを参照して、HTTPリクエストにHTTPヘッダーHTTP_X_REQUESTED_WITHが「XMLHttpRequest」という文字列で設定されていることを確認してください。その後request.is_ajax()Trueを返します。

jQueryのような最新のライブラリは自動的にこのHTTPヘッダを設定します。例えば、あなたはjqueryのを取得し、

<script> 
$.get('/api/get_RuleStatement', {'term': 'xxx'}) 
</script> 

をすれば別の方法として、あなたはif request.is_ajax():ラインを取り除くことができますし、それが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) 

作りますそうでなければ応答を見ることができます。また、HttpResponseではなくJsonResponseを使用して、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 
関連する問題