2015-07-31 2 views
2

У меня есть собственный URL-адрес Django, который отлично работает в POSTMAN, но не работает должным образом в браузере, подробности приведены ниже.Python GET не работает в браузере

В почтальоном, я использую следующий URL и ы работает нормально 127.0.0.1:8000/v0/call_letter_status/ и я получаю ответ 200 и выход, а также

Но когда я пытаюсь в браузере я получаю сообщение об ошибке, как этот

ValueError в/v0/call_letter_status/

The view project.views.User.call_letter_track didn't return an HttpResponse object. 

    Request Method: GET 

    Request URL: http://127.0.0.1:8000/v0/call_letter_status/ 

    Django Version: 1.5 

    Exception Type: ValueError 

Мой код является ы ниже:

def call_letter_track(request): 
    if request.META["CONTENT_TYPE"] == 'application/json': 
     if request.method == 'GET': 
      sqlQuery = """ SELECT jc.company_name,jc.job_position,jc.venue,jc.email_body,jc.interview_date,aj.job_id,aj.logo_image_url FROM jr_call_letter jc 
         JOIN api_job aj ON aj.job_id=jc.job_id ORDER BY "jc.job_id" DESC LIMIT 2 """ 

      cursor.execute(sqlQuery) 
      result=dictfetchall(cursor) 
      final_response_map = [] 
      key=0 
      for result_new in result: 
       print key 
       response_map = {} 
       response_map['company_name']=result[key]['company_name'] 
       response_map['job_id']=result[key]['job_id'] 
       response_map['job_position']=result[key]['job_position'] 
       response_map['interview_date']=datetime.fromtimestamp(result[key]['interview_date']).strftime('%d-%m-%Y') 
       response_map['email_body']=result[key]['email_body'] 
       response_map['venue']=result[key]['venue'] 
       response_map['logo_image_url']=result[key]['logo_image_url'] 
       key=key+1 
       final_response_map.append(response_map) 
      response = {'data':final_response_map} 
      data = json.dumps(response, encoding="ISO-8859-1") 
     return HttpResponse(data,content_type="application/json", status=200) 

Пожалуйста, помогите мне в получении решения этой проблемы.

ответ

1

Браузер не отправляет CONTENT_TYPE заголовок с application/json; вызывает блокировку внешнего блока if; Функция просмотра не вернется.

Как об удалении внешнего if, чтобы запрос без Content-type: application/json также получил HttpResponse?

def call_letter_track(request): 
    if request.META["CONTENT_TYPE"] == 'application/json': # <--- 
     if request.method == 'GET': 
      .... 
+0

#falsetru Это на самом деле работает, но проблема состоит в том, что, если я хочу передать идентификатор и хочу получить результат для этого ID, как о/р, то я должен использовать это право ?? ? –

+0

@thomaschacko, Вы имеете в виду прохождение как строку запроса, например '....? Id = something'? Затем вы можете получить доступ к id с помощью 'request.REQUEST.get ('id')' или 'request.GET.get ('id')' – falsetru

2

Ваше заявление return находится в состоянии if. Если это условие недействительно, оно выходит за пределы условия и ожидает Response, но нет возврата за пределы вашего условия, следовательно, ошибка.

попытка предоставления этого для проверки:

def call_letter_track(request): 
    if request.META["CONTENT_TYPE"] == 'application/json': 
    ''' 
    . 
    . 
    your code 
    . 
    . 
    ''' 
     return HttpResponse(data,content_type="application/json", status=200) 
    return HttpResponse('Hello World') 

Браузер по умолчанию имеет Content-Type заголовок application/xml и, следовательно, не в ваш if состояние.

Смежные вопросы