毕设随想 就是跨域问题和request.POST 拿不到值的问题。关于update_or_create

写在前面:

听说要开学了,真的还有有些激动呢。在家苟了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 = ("*",)

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值