写在前面:
听说要开学了,真的还有有些激动呢。在家苟了20天,最近开始发奋写毕设了。还要给别人代写毕设,好在技术差不多,内容也差不多。关键还有避免重复,考虑给别人的用django, 给自己用flask, 但是想想flask要用的sql语句,果断放弃。
代毕已经写完大部分接口,自己用postman测试也完全没啥子问题,可是今天写自己的毕设,用vue axios发送post请求出现了403错误,这个好弄,但是又有跨域问题,mmp。给代毕用的rest_framework, 好像没啥子403和跨域问题 。 实测 刚刚测了一下, 存在跨域问题。
跨域问题,一开始想在vue结局的,但是我对vue不太说,看要改配置文件,我嫌弃麻烦。记得之前写过django中间件解决过跨域问题,但是忘记怎么写了,mmp。 网上一查 得有人写好,用现成的得了。
前端vue axios发送POST请求。 为啥子人家类似字典的对象写成这个样子,不加引号,发送的时候不用序列化一下,咱也不敢问,问了估计也不会。
关于update_or_create
mm。 忘记这个用法了,或者说根本没记住这个方法。
models.DoctorInfo.objects.update_or_create(username=username,
defaults={"company": company, "position": position, "star": star,
"profile": profile, "phone": phone})
这个是啥意思呢,就是先找username等于指定的值,如果找到了就更新default的值。如果没找到就创建。
关于request.POST 拿不到值的问题:
因为之前都是前端的form表单发送的post请求,所以request.POST.get("")就能拿到数据了。
但是如果直接发Json数据的话,request.POST就拿不到数据了,要通过request.body拿数据了
req = json.loads(request.body)
username = req['username']
login() {
if (!this.username || !this.pwd){
alert("用户名或密码不能为空")
}else {
let newRes = {
username: this.username,
pwd: this.pwd
};
Axios.post("http://127.0.0.1:8000/login/", newRes).then(
)
}
}
但是问题来了,最先出问题不是403和跨域问题,而是 request.POST.get()拿不到数据,之前好像遇到过类似问题,咋解决的忘了。
查了下好像因为数据格式不对,所以拿不到。
视图长这个样子
import json
from django.shortcuts import HttpResponse, render_to_response, HttpResponse
from django.views.decorators.csrf import csrf_exempt
# 这个装饰器解决跨域问题
@csrf_exempt
def login(request):
if request.method == "POST":
req = json.loads(request.body)
# request.POST.get() 拿不到数据
username = req['username']
pwd = req['pwd']
return HttpResponse(123)
下面是结局跨域问题
有人写好了,为啥子还要自己写中间件
直接
pip install django-cors-headers
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'corsheaders', # 听说要写在这个位置
'myapp.apps.MyappConfig',
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'corsheaders.middleware.CorsMiddleware', # 听说要写在这个位置
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
# 还要加这个
CORS_ALLOW_CREDENTIALS = True
CORS_ORIGIN_ALLOW_ALL = True
CORS_ALLOW_HEADERS = ("*",)