Django接口开发

Django接口开发

一、前后端分离
  • 传统开发模式

url -->> 视图函数(逻辑判断、调用数据库、渲染HTML)–>>向浏览器返回HTML页面。
项目后台的商品列表页面已经使用传统开发模式实现了

但是呢,有时候我们需要将这些内容在移动端(手机APP)或者的设备上显示。那怎么办呢?
我们可以再编写一套后台逻辑给移动端使用。但是这样比较麻烦,工作量比较大。有没有更简单的方式呢?我们可以使用前后端分离开发模式

二、前后端分离模型

前后端分离模型指的是后端只负责返回数据,不再负责渲染页面。前端负责渲染数据

在这里插入图片描述

接下来就要探讨一下返回的数据类型,如果我们返回Python中的字典或者列表,但是前端人员或者移动端人员不一定会Python语法。我们可以返回一种前端人员、后台人员都会的一种数据类型,这样就可以顺利的完成开发了。一般在开发中我们返回JSON或者XML数据类型

前端后端分离开发步骤:

前端:

(1)用ajax向指定url发送参数
(2)接受响应内容
(3)处理响应内容,进行DOM操作

后端:

(1)接受指定参数
(2)准备数据
(3)响应json

三、JSON和XML
  • JSON介绍

    JSON(JavaScript Object Notation) : 是一种轻量级的数据交换格式,JSON数据格式类似于Python中的字典

  • XML介绍

    XML(Extensible Markup Language): 可扩展标记语言,很少企业使用XML进行数据传输,了解即可

  • JsonResponse

    form django.http import JsonResponse

    使用JsonResponse对象可以将Python中的字典或者其他数据类型转换为JSON数据

    # 路由
    urlpatterns += [
        # 查询所有商品
        path('api/goodses/', api_view.select_all_goods)# 视图
    def select_all_goods(request):
        """查询所有的商品"""
    
       # 查询所有商品得到的是QuerySet类型的对象
       goods_qs = Goods.objects.all()
       # 转成列表字典格式
       goods_list = [{
         "id": goods.id, "name": goods.name} for goods in goods_qs]
        # JsonResponse
       return JsonResponse(goods_list,safe=False,json_dumps_params=					{
         "ensure_ascii":False})
    
    

    safe=False可以使用列表,默认只转换字典格式
    son_dumps_params={“ensure_ascii”:False}:显示中文

四、AJAX
  • AJAX介绍

    AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步JavaScript和XML”。即使用JavaScript语言与服务器进行异步交互,传输的数据为XML(当然,传输的数据不只是XML)还有JSON数据

    AJAX还有一个最大的特点就是,当服务器响应时,不用刷新整个浏览器页面,而是可以局部刷新,这一特点给用户的感受是在不知不觉中完成请求和响应过程
    应用场景:注册时信息校验(百度首页注册)

  • AJAX格式

    使用原生的JavaScript 使用AJAX 比较麻烦,我们采用 jQuery 实现 AJAX 请求。
    1、语法:$.ajax({参数1:值1,参数2,值2})

    • 参数介绍
    参数 描述
    url 发送请求的地址
    type 请求方式(“POST” 或 “GET”), 默认为 “GET”。注意:其它 HTTP 请求方法如 PUT 和 DELETE 也可以使用,但仅部分浏览器支持
    data 发送到服务器的数据。格式 {key:value,key:value}
    error 请求失败时调用此函数
    success 请求成功后的回调函数,参数:由服务器返回数据
    dataType 预期服务器返回的数据类型。如果不指定,浏览器会智能判断

可用值:
“xml”: 返回 XML 文档,可用 jQuery 处理。
“html”: 返回纯文本 HTML 信息;
“script”: 返回纯文本 JavaScript 代码。
“json”: 返回 JSON 数据 |

  • 案例:

    1、前端需要做什么?

    • 以何种形式展示:web网页展示
      发送参数
      获取响应
      局部刷新-修改DOM

    2、后端需要做什么?

    • 获取商品类型,根据商品类型查询商品
      get请求
    # 视图
    def select_all_goods_by_goodstype(request):
        """查看更多,根据商品类型查询所有商品"""
        # 接收参数
        goodstype_id = request.GET.get("goodstype_id")
        # 查询数据
        goods_qs = Goods.objects.filter(goodstype_id=goodstype_id)
        # 转成列表字典格式
        goods_list = [{
         "id": goods.id, "name": goods.name,"price":goods.price,"picture":goods.picture.name,"unite":goods.unite} for goods in goods_qs]
        # JsonResponse
        return JsonResponse(goods_list,safe=False,json_dumps_params={
         "ensure_ascii":False})
    
    
    # 前端页面
    <script>
        // 根据url中的goodstype_id
        var url = window.location.href;
        var goodstype_id = url.split("?")[1].split("=")[1];
        //发送请求
        $.ajax({
         
            "url": "/api/more/",
            "method": "get",
            "data": {
         "goodstype_id": goodstype_id},
            "success": function (data) {
         
                {
         #console.log(data)#}
                {
         #console.log(typeof data)#}
                var divs = ""
                //遍历
                for(var i=0;i<data.length;i++){
         
                    var goods = data[i]
                    var id = goods["id"]
                    var name = goods["name"]
                    var picture = goods["picture"]
                    var price = goods["price"]
                    var unite = goods["unite"]
                 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值