DjangoVue前后分离_后端跨域传递参数(搭建博客第二步)

简介: DjangoVue前后分离_后端跨域传递参数(搭建博客第二步)

get请求

安装django-cors-headers

根据django版本安装合适的cors-headers插件

$ pip install django-cors-headers==2.1.0

image.png

添加corsheaders应用

添加corsheaders

为了Vue可以跨域像Django发起get的请求,在配置的setting.py添加corsheaders

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'corsheaders',#添加
]

添加CorsMiddleware

添加中间件

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'corsheaders.middleware.CorsMiddleware',#跨域
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

image.png

指定ip访问、允许cookie

在setting.py配置

CORS_ORIGIN_WHITELIST = (
    'http://ip:端口',
',#凡是出现在白名单中的域名,都可以访问后端接口 添加协议
)
CORS_ORIGIN_ALLOW_ALL=True#允许所有的ip访问
CORS_ALLOW_CREDENTIALS = True#允许cookie

post请求

注释中间件csrf

注释掉这个组件之后,打印控制台会失效

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'corsheaders.middleware.CorsMiddleware',#跨域
    # 'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

image.png

cookie组件使用

安装cookies

vue使用

$ npm install vue-cookies --save

或者

$ vue add vue-cookies

在main.js引入

import cookies from 'vue-cookies'
Vue.use(cookies)
Vue.prototype.$cookies = cookies

其方法使用规则
可以在浏览器打印cookie出来查看

config、set、 get、remove、isKey、keys

image.png

this.$cookies.方法名(参数)

注意不同作用域this指向,错误指向导致undefined
也可以粗暴使用document.cookie

request简单测试

vue引入axios

在vue项目添加axios

$ npm install axios

或者(前提已经安装vue-cli)

$ vue add axios

登录测试

vue发起post请求

post匹配django的登录url,并且将用户名和密码传递过去

//axios提交数据 post
            axios.post('http://ip:端口/user/login/',{
              name:that.ruleForm.name,
              password:that.ruleForm.pass
            }).then(res=>{
              // alter('提交中');
              console.log(res.data)
              if(res.data.code==1){
                console.log('return home!')
                that.$router.push({path:'/home'})
              }
              else if(res.data.code==0){
                // alter("失败!")
                console.log("失败")
              }
              // that.$cookies.set('')
            }).catch(res=>{
              console.log(res)
            })
     

django返回json

view视图的登录函数返回json格式以data发送

def Login(request):#登录
    if request.method=='POST':
        data = json.loads(request.body.decode('utf-8'))
        name=data['name']
        password=data['password']
        try:
            user=Users.objects.get(username=name,password=password)
            #获取该用户的model obj
        except Exception as e:
            data={'code':0,'msg':str(e)}
            return JsonResponse(data)
        data={'code':1,'user':user.username}
        return JsonResponse(data)
    data={'code':0}
    return JsonResponse(data)

若在vue中得到django传过来的code参数为1执行
登录!
image.png

登录成功!
image.png

控制台
image.png

注册测试

vue发起post的提交请求

vue向django发起post请求并传递参数,注册成功就设置cookie

axios
            .post(that.baseurl + "user/register/",
            {
              // 传递的名字和密码
                name: that.ruleForm.name,
                password: that.ruleForm.pass,
            }
            )
            .then(function (res) {
              console.log("成功post", res);
              console.log(res.data.code)
              if(res.data.code===0)
              {
                console.log('重名')
                console.log(that.$cookies.get('user_session'))//取出cookies的user_session
                console.log(that.$cookies)//存在
                document.cookie= `user=${that.ruleForm.name}`
                that.register_error=true
              }
              else{
                that.register_success=true;
                console.log('时间节点');
              }
              
            })
            .catch(function (res) {
              //获取res中的name
              alert("后端的问题!");
              console.log("失败post", res);
            });

django后端的注册函数

try-catch注册然后返回json

def Register(request):
    if request.method=='POST':
        # 获取axios通过post传递过来的参数json格式
        data = json.loads(request.body.decode('utf-8'))
        name=data['name']
        password=data['password']
        try:
            add_user = Users.objects.create(username=name,password=password)#ok json格式不能直接传递adduser
            print(add_user)
            data = {'code': 1, 'name': name, 'password': password}
            return JsonResponse(data)
        except Exception as e:
            #错误已经缩小为 用户名已经被使用
            data={'code':0,'msg':str(e)}
            return JsonResponse(data)
    data={'code':0}
    print(data)
    return False

注册成功!
image.png

可以在django的admin后台看见
image.png

end

完成!
image.png

目录
相关文章
|
3月前
|
Java 数据库连接 API
springBoot:后端解决跨域&Mybatis-Plus&SwaggerUI&代码生成器 (四)
本文介绍了后端解决跨域问题的方法及Mybatis-Plus的配置与使用。首先通过创建`CorsConfig`类并设置相关参数来实现跨域请求处理。接着,详细描述了如何引入Mybatis-Plus插件,包括配置`MybatisPlusConfig`类、定义Mapper接口以及Service层。此外,还展示了如何配置分页查询功能,并引入SwaggerUI进行API文档生成。最后,提供了代码生成器的配置示例,帮助快速生成项目所需的基础代码。
198 1
|
3月前
|
JSON 前端开发 数据格式
@RequestMapping运用举例(有源码) 前后端如何传递参数?后端如何接收前端传过来的参数,传递单个参数,多个参数,对象,数组/集合(有源码)
文章详细讲解了在SpringMVC中如何使用`@RequestMapping`进行路由映射,并介绍了前后端参数传递的多种方式,包括传递单个参数、多个参数、对象、数组、集合以及JSON数据,并且涵盖了参数重命名和从URL中获取参数的方法。
273 0
@RequestMapping运用举例(有源码) 前后端如何传递参数?后端如何接收前端传过来的参数,传递单个参数,多个参数,对象,数组/集合(有源码)
|
5月前
|
前端开发 JavaScript
这篇文章介绍了如何使用form表单结合Bootstrap格式将前端数据通过action属性提交到后端的servlet,包括前端表单的创建、数据的一级和二级验证,以及后端servlet的注解和参数获取。
这篇文章介绍了使用AJAX技术将前端页面中表单接收的多个参数快速便捷地传输到后端servlet的方法,并通过示例代码展示了前端JavaScript中的AJAX调用和后端servlet的接收处理。
这篇文章介绍了如何使用form表单结合Bootstrap格式将前端数据通过action属性提交到后端的servlet,包括前端表单的创建、数据的一级和二级验证,以及后端servlet的注解和参数获取。
|
5月前
|
JavaScript 前端开发
Vue中传递自定义参数到后端、后端获取数据(使用Map接收参数)
这篇文章讲述了如何在Vue中通过Axios二次封装传递自定义参数到后端,并展示了后端如何使用Map接收这些参数,以及如何避免参数转换错误和统一接口设计的方法。
|
6月前
|
存储 资源调度 前端开发
JavaScript 使用axios库发送 post请求给后端, 给定base64格式的字符串数据和一些其他参数, 使用表单方式提交, 并使用onUploadProgress显示进度
使用 Axios 发送包含 Base64 数据和其他参数的 POST 请求时,可以通过 `onUploadProgress` 监听上传进度。由于整个请求体被视为一个单元,所以进度可能不够精确,但可以模拟进度反馈。前端示例代码展示如何创建一个包含 Base64 图片数据和额外参数的 `FormData` 对象,并在上传时更新进度条。后端使用如 Express 和 Multer 可处理 Base64 数据。注意,实际进度可能不如文件上传精确,显示简单加载状态可能更合适。
|
6月前
|
前端开发 JavaScript Java
文本----简单编写文章的方法(中),后端接口的编写,自己编写好页面就上传到自己的服务器上,使用富文本编辑器进行编辑,想写好一个项目,先分析一下需求,再理一下实现思路,再搞几层,配好参数校验,lomb
文本----简单编写文章的方法(中),后端接口的编写,自己编写好页面就上传到自己的服务器上,使用富文本编辑器进行编辑,想写好一个项目,先分析一下需求,再理一下实现思路,再搞几层,配好参数校验,lomb
|
7月前
|
JavaScript
fastadmin js里获取后端传的参数
fastadmin js里获取后端传的参数
147 0
|
7月前
|
安全 Java 应用服务中间件
详细介绍几种处理后端跨域问题的方案
详细介绍几种处理后端跨域问题的方案
|
8月前
|
XML JSON 前端开发
获取后端接口请求中的参数(@PathVariable,@RequestParam,@RequestBody区别,使用postman请求
获取后端接口请求中的参数(@PathVariable,@RequestParam,@RequestBody区别,使用postman请求
260 1
|
8月前
|
Web App开发 移动开发 运维
跨域解决方案[前端+后端]
跨域解决方案[前端+后端]
95 0

热门文章

最新文章