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/xml
的 Content-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':
....
我有一个 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/xml
的 Content-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':
....