Python GET 在浏览器中不起作用

Python GET is not working in browser

我有一个 Django 自定义 URL,它在 POSTMAN 中工作正常,但在浏览器中无法正常工作,详细信息如下。

在 postman 中,我使用以下 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)

请帮我解决这个问题。

您的 return 语句在 if 条件内。如果该条件无效,它将超出条件并期望 Response,但在您的条件之外没有 return,因此出现错误。

尝试提供这个用于检查:

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')

默认情况下,浏览器具有 application/xmlContent-Type header,因此它不会进入您的 if 条件。

浏览器不会发送 CONTENT_TYPE header 和 application/json;导致外部 if 块永远不会执行;视图函数不会return.

如何删除最外层的 if 以便没有 Content-type: application/json 的请求也能获得 HttpResponse?

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