一. 前后端分离解决跨域
1.1 问题描述
关于跨域报错提示:No 'Access-Control-Allow-Origin'
原因:当前端和后端不属于同源策略就会访问不到数据
1.2 后端SpringBoot框架下解决方式之一
使用@CrossOrigin这个注解在controller类中使用
1.3 后端Django框架下解决方式之一
1、安装django-cors-headers
pip install django-cors-headers
2、.配置settings.py文件
(a) INSTALLED_APPS里添加“corsheaders
”
(b)MIDDLEWARE_CLASSES添加配置 'corsheaders.middleware.CorsMiddleware'
,
(c)底部添加
CORS_ALLOW_CREDENTIALS = True
CORS_ORIGIN_ALLOW_ALL = True
CORS_ORIGIN_WHITELIST = ()
CORS_ALLOW_METHODS = (
'DELETE',
'GET',
'OPTIONS',
'PATCH',
'POST',
'PUT',
'VIEW',
)
CORS_ALLOW_HEADERS = (
'accept',
'accept-encoding',
'authorization',
'content-type',
'dnt',
'origin',
'user-agent',
'x-csrftoken',
'x-requested-with',
)
截图如下
二. 后端返回json源码:
2.1 SpringBoot框架下java实现json
代码如下:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.List;
@Controller
@RequestMapping(value = "DbService")
@CrossOrigin
public class Dblihui {
@Autowired
private JdbcTemplate jt;
@ResponseBody
@RequestMapping(value = "/getCustName", method = RequestMethod.GET)
public List getSum() {
String sql = "select distinct cust_name from pon_zwzx_wang order by cust_name";
List list = jt.queryForList(sql);
return list;
}
}
2.2 Django框架下python实现json
代码如下:
from django.db import models
class BossBoss(models.Model):
acc_num = models.CharField(max_length=20)
prod_id = models.CharField(max_length=10)
prod_name = models.CharField(max_length=20)
owner_cust_id = models.CharField(max_length=19)
owner_cust_name = models.CharField(max_length=30)
address_desc = models.CharField(max_length=60)
order_item_id = models.CharField(max_length=19)
create_date = models.DateTimeField()
class Meta:
managed = False
db_table = 'boss_boss'
# Create your views here.
from django.http import JsonResponse
from zqlx_api.models import BossBoss
def get_boss(request):
boss = BossBoss.objects.all()
data = []
for b in boss:
dic = {
'owner_cust_id': b.owner_cust_id, 'acc_num': b.acc_num}
data.append(dic)
print(data)
return JsonResponse(data, safe=False)
def list(request):
result_set = models.users.objects.all().values('a_id', 'name', 'create_time')
data_list = result_set[:] # queryset转为list
print(type(list(data_list)))
data = list(data_list)
resp = {
'code': '100', 'message': '查询成功' , "data": data}
print(json.dumps(resp, cls=CJsonEncoder))
return HttpResponse(json.dumps(resp, cls=CJsonEncoder), content_type="application/json")
class CJsonEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, datetime):
return obj.strftime('%Y-%m-%d %H:%M:%S')
elif isinstance(obj, datetime.date):
return obj.strftime('%Y-%m-%d')
else:
return json.JSONEncoder.default(self, obj)