Django入门教程(三):前后端数据交互(POST,GET传参)

大家好我是连人。本期本来是打算直接写用户的登录和注册的,但是最后还是决定从最基本的写起。

后端向前端传递数据

我们还是从上一篇的hello world入手。
这个世界既又快乐,亦有悲伤
错的不是我,是这个世界。(不是)
我们自然希望这个世界是快乐的。
我们把world变成变量,这样可以及时反映我们对这个世界的期望。
于是,我们在后端定义world是快乐的

def home(request):
    world = "Happy World!"
    return render(request, 'Home.html', {"w": world})

world是定义的变量,w告诉前端这个变量的名字叫什么。这里为了区分我将后端的变量和前端的变量故意取了不同的名字。
前端的代码修改成:

<!DOCTYPE html>
<html>
    <head>
        <title>Hello world!</title>
    </head>
    <body>
        <p>Hello {{ w }}</p>
    </body>
</html>

变量名使用双大括号括起来。
在这里插入图片描述
很多时候,我们开发的网页不止需要一个变量,这个时候,我们可以使用locals()函数一口气把所有变量都传到前端。

def home(request):
    happy = "Happy"
    world = "World!"
    return render(request, 'Home.html', locals())

此时locals()传递的参数是后端的本来的名字
前端代码修改为

<!DOCTYPE html>
<html>
    <head>
        <title>Hello world!</title>
    </head>
    <body>
        <p>Hello {{ happy }} {{ world }}</p>
    </body>
</html>

但是locals()具有安全隐患,例如,你在登录界面判断用户的密码与输入是否一致,这个时候使用locals()传参,就有可能将用户的密码泄露。
所以我建议使用字典记录下你需要传递的参数,然后将字典传递给前端。

def home(request):
    happy = "Happy"
    world = "World!"
    context = {
        "happy": happy,
        "world": world
    }
    return render(request, 'Home.html', context)

前端向后端传递数据

GET和POST都是HTTP1.0的方法。

POST较GET更安全一些(但其实也没安全到哪儿去),但POST需建立两次连接而GET只需要一次,耗时长。

GET一般用于请求数据,POST一般用于提交数据,合理使用两种方法。

GET传参

在templates下新建g.html

<!DOCTYPE html>
<html>
    <head>
        <title>get</title>
    </head>
    <body>
        <p>{{ g }}</p>
    </body>
</html>

后端代码:

def g(request):
    if request.method == 'GET':
        g = request.GET.get('g')
        return render(request, 'g.html', locals())

urls.py中注册路由:

path('g/', views.g),

输入网址http://127.0.0.1:8000/g/?g=a
得到如下结果:
在这里插入图片描述
注意
1 get方法传递的数字是字符串而不是int型
2 多个参数之间用&连接
3 含有特殊符号(例如空格)会用%加数字代替(空格是%20)

POST表单传参

前端

<!DOCTYPE html>
<html>
    <head>
        <title>get</title>
    </head>
    <body>
        <form method="post" action="">
            {% csrf_token  %}   <!-- 防止跨站攻击 -->
            <input type="text" name="g"> <!-- 后端通过name拿到数据 -->
            <button type="submit">提交</button>
        </form>
        <br/>
        <p>{{ g }}</p>
    </body>
</html>

后端

def g(request):
    g = 'a'
    if request.method == 'POST':
        g = request.POST.get('g')
        return render(request, 'g.html', locals())
    return render(request, 'g.html', locals())

测试
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
很简单我也不详细解释了

转载注明出处

  • 23
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Django和Vue.js是两个非常流行的Web开发框架,分别用于后端前端开发。它们可以很好地进行数据交互,使得前后端之间的数据传输变得简单和高效。 在Django后端,我们可以使用Django的REST框架来创建API接口,将数据以JSON格式返回给前端。通过定义序列化器,我们可以将Django模型转换为JSON格式并向前端发送数据前端可以通过HTTP请求向后端获取数据,并进行增删改查等操作。 在Vue.js前端,我们可以使用Axios库来进行HTTP通信。通过发送HTTP请求,可以从Django后端获取数据,并在前端进行展示和处理。在Vue组件中,我们可以使用Axios来发送GET、POST、PUT等不同类型的请求,与后端进行数据交互。获取到数据后,可以使用Vue的数据绑定功能来动态展示数据。 同时,为了更好地处理数据交互,可以使用Vuex来进行状态管理。Vuex可以在前端应用中集中存储和管理数据,使得数据在不同组件间的共享和传递变得更加便捷。通过Vuex,前端可以将从后端获取的数据存储在全局状态中,并在不同组件中进行共享和使用。 综上所述,通过Django和Vue.js,前后端数据交互变得非常简单和高效。Django提供了强大的API接口,将数据以JSON格式发送给前端,而Vue.js可以通过Axios库进行HTTP通信,与Django进行数据交互,实现前后端的无缝对接。同时,通过Vuex可以方便地进行数据管理和共享。这样的数据交互机制可以为开发者提供更好的开发体验,同时也提高了应用的性能和可维护性。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值