创建Vue项目
环境搭建
安装npm
创建django项目
安装django
pass
创建项目+编写测试接口
pass
解决django跨域问题
1
| pip install django-cors-headers
|
添加app
1 2 3 4 5
| INSTALLED_APPS = ( ... 'corsheaders', ... )
|
添加中间件
1 2 3 4 5 6
| MIDDLEWARE = [ ... 'corsheaders.middleware.CorsMiddleware', 'django.middleware.common.CommonMiddleware', ... ]
|
配置跨域规则
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| CORS_ORIGIN_ALLOW_ALL = False CORS_ORIGIN_WHITELIST = ( 'localhost:8080', )
CORS_ALLOW_CREDENTIALS = True
CORS_ALLOW_METHODS = ( 'GET', 'POST',
)
CORS_ALLOW_HEADERS = ( 'accept', 'accept-encoding', 'authorization', 'content-type', 'dnt', 'origin', 'user-agent', 'x-csrftoken', 'x-requested-with', )
|
session处理
因为前后端分离,django自带的session和cookie处理机制不再生效,这里用户在登陆成功后,我们手动把sessionid传给前台,前台用cookie保存起来。
后台:
1 2 3 4 5 6
| res_dict = dict( status=1, session_id=request.session.session_key, ) return JsonResponse(res_dict)
|
前台:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| function setCookie(name,value) { var days = 14; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString()+"; path=/"; }
$.ajax({ ... success: function(data){ ... setCookie("sessionid", data.session_id); ... }, ... });
|
ajax跨域请求带cookie
登陆后 前台的请求应该携带cookie,以便于后台做权限管理。
ajax默认不带cookie,在ajax请求是应该做跨域处理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| $.ajax({ url: 'crosssurl', type: "get", dataType: "json", xhrFields: { withCredentials: true }, crossDomain: true, success: function(data) { ... }, error: function(a,b,c) { ... } });
|