python解决跨域问题_python 关于跨域问题

测试跨域问题:

1、编写一个view(jsonp)跳转到模板

2、模板使用ajax请求一个地址(do_jsonp)

3、编写一个view(do_jsonp)返回json串

4、测试,如果是同源下进行ajax请求可以获取数据,如果把请求的域名改成localhost那么就会出现一个错误,不能访问其他域名下的数据的错误

解决方案:

1、使用jsonp解决

就是通过客户端js动态创建一个script标签,里面编写一个src,src是可以访问外部资源,

这个外部资源是一个函数定义,然后本地把这个函数进行实现,就可以获取远程跨域的数据

a) 客户端编写一个动态构建script的方法:

function do_req() {

var script = window.document.createElement('script')

script.src = 'http://localhost:8000/school/do_jsonp/?callback=do_callback'

console.log(script)

document.body.appendChild(script)

}

b) 服务端编写一个view,返回一个函数定义 比如:函数名(参数)

def do_jsonp(request):

callback = request.GET.get('callback')

data = {"code": 200, 'message': 'Success!', "data": '这是测试JSONP跨域'}

response = None

if callback: # 代表是跨域请求

data = json.dumps(data)

# callback(data)

print(callback + "(" + data + ")")

response = HttpResponse(callback + "(" + data + ")", charset='utf-8')

else: # 正常请求

response = HttpResponse(json.dumps(data), content_type="application/json; charset=utf-8", charset='utf-8')

return response

c) 客户端定义一个函数的实现

function 函数名(参数){

// TODO

}

function do_callback(resp){

console.log(resp)

}

使用jQuery进行操作:使用$.getJSON()或者get(),使用get时,需要指定返回的类型是jsonp

function do_req() {

/*$.getJSON('http://localhost:8000/school/do_jsonp/?callback=?', {}, function(resp) {

console.log(resp)

})*/

$.get('http://localhost:8000/school/do_jsonp/?callback=?', {}, function(resp) {

console.log(resp)

}, 'jsonp')

}

使用jQuery获取GitHub上某个用户的粉丝,展示出来,使用jsonp直接展示:

https://api.github.com/users/schacon/followers

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值