(django入门学习笔记3)python中基于django库的后端开发(从零开始搭建一个项目)(作者企业开发历程)

前言

在学习笔记2的学习当中,我们已经成功构建了一个django项目,同时实现了一个书本增加接口的方法,可以直接增加数据库当中的数据,那么学习笔记3中我们就来一起学习一下其他方法的编写以及调用吧。

核心方法之一——filter方法

我们在之前的方法当中(学习笔记2中有详细教程),已经成功编写了一个增加数据的接口,

那么我们下一步要做的,就是将数据库的数据调出来反馈给前端,让前端的页面可以显示出我们想看到的东西,那么首先先确认我们要什么请求,其实企业查询的请求一般会采用GET,所有我们这里也用GET请求,除了@api_view后面的POST变为GET,目前没有其他变化,所以代码如下:

@api_view(["GET"])
def book_list(request):
    data_information = []
    book_data = models.Book.objects.all()
    for information in book_data:
        data_dict = {
            "id": information.id,
            "book_name": information.book_name,
            "book_author": information.book_author,
            "book_type": information.book_type,
            "book_SSIN": information.book_SSIN
        }
        data_information.append(data_dict)

    return JsonResponse({'status': 'ok',"data":data_information})

book_data = models.Book.objects.all()

这里开始介绍标准方法,models里面封装的方法中,先选择你要用于操作的数据库Book,然后objects就是选中它的内容,是固定格式,然后调用all这个方法,all就和字面意思一样,会把数据库里所有的东西给输出出来,所以此时,book_data变量里面的内容就是表里的内容,现在我们要把里面的内容反馈出来。

所以我们一开始先建了一个空列表data_information,(这里补充一句企业的变量命名规范,所有的变量采用英文直译的方法,用下滑线隔开,就和我展示的代码一样),然后用for循环遍历变量里面的数据,创建一个字典,以此把前端需要的字段以键值对的方式存到字典里,每存完一个数据,就把它添加到要返回的数据列表当中,最后走完了一遍for循环,那么所有的数据也就拿完存完了。

然后就是利用return这里的JsonResponse是一个库,它能返回的数据格式是固定的,这个库一般企业不用,企业会有自己的返回方法。但是我们这里用就好了,它返回的数据基本上就是元组,列表和字典,然后集合是会报错的,集合和字典都是花括号,区别是集合没有键值对,每一个元素都是逗号隔开,例如:data = {"变量1","变量2","变量3"}。所以你要返回这种数据时,用列表返回就好。

那么方法写好了,不要忘记添加到路由里面,

找到子应用下的路由,将book_list的路径添加进去,这里说一下path的选择:

前面这个book_list是网页端的接口,也就是说它对应了前端打开的接口名字,后面的views.book_list,则是在所有的视图里面找到名为book_list的方法,然后将它与前端那个接口对应起来,也就是说,前面的名字不用非得一样,你可以改,随之而变的是网页的接口也改变。

反斜杠在学习笔记1中说过,这里再说一遍,反斜杠是为了让网页可以遍历所有接口的名字,找到这个接口,如果不加反斜杠,那么就不会去一个一个找对应的接口,就会报错,遍历是它自己遍历,这个是反斜杠的原理,但是网页里不用写成book_list/,写成book_list也是可以的。

那么来看看结果:

要在APIfox里面新建一个get的接口,然后把接口名改对

最后就可以顺利输出结果了!

由于我们数据库里只有一条数据,因此我们现在在增加两条试试效果:

好,然后再调用输出的接口输出东西试试:

 

我们看到这些东西就可以顺利的输出出来了,那么这个时候,就会有人有问题了,如果我做一个搜索栏,能通过名字搜索一本书要怎么做?

这里教大家一个集成化方法,也就是filter方法。

代码如下:

@api_view(["POST"])
def book_search(request):
    book_name = request.data.get('book_name')
    data_information = []
    book_data = models.Book.objects.filter(book_name=book_name).all()
    for information in book_data:
        data_dict = {
            "id": information.id,
            "book_name": information.book_name,
            "book_author": information.book_author,
            "book_type": information.book_type,
            "book_SSIN": information.book_SSIN
        }
        data_information.append(data_dict)

    return JsonResponse({'status': 'ok',"data":data_information})

这里我们新建一个搜索方法,用POST请求,然后按照学习笔记2的方法,拿一个字段,这个字段就是书名,是前端键入进去返回给我们的,那么这里在来看这一句:

book_data = models.Book.objects.filter(book_name=book_name).all()

那么,前面的同理,filter的方法就是对数据库里的数据进行匹配,这里则是匹配一个字段book_name也就是在book_data的数据表里,找到名为book_name的字段,然后将字段名为变量book_name里面的内容筛选出来。

也可以匹配多个,用 "," 隔开,例如filter(book_name=book_namebook_type="小说"),那么就会把名字为book_name,类型为小说的书给找出来。

然后将这个接口添加到路由里,在添加到apifox里面我们试试,

记得要切换到Body里面的form-data!

然后运行看看,

好,完美输出,那么这个时候会有疑问了,如果我想模糊搜索呢?比如一个龙字就搜索出来,那么仅仅只需要改一行代码:

book_data = models.Book.objects.filter(book_name__contains=book_name).all()

注意,这里唯一变了的是filter里面的内容,_ _contains,(两根连续下划线,中间没有间隔)它是filter下方法的其中一种,就是搜索出包含该字段的内容。filter下还有很多方法例如__in等等,这里就不说了。__contains就是模糊搜索,改了这一行我们在用龙这个字搜索试试:

好,filter的方法今天就讲到这里。

DELETE方法

下面开始讲讲删和改:

删的代码如下:

@api_view(["DELETE"])
def book_delete(request):
    id = request.data.get('id')
    models.Book.objects.filter(id=id).delete()

    return JsonResponse({'status': '删除成功'})

是不是非常简单,企业中前后端配合的工作,前端一般会把要删的那本书的id传回来,这里我也选用id,然后用到是DELETE的请求。理论上来说,这里要添加一个验证,验证这个id是否存在,否的话直接返回,是的话在执行删除,但是这里因为是学习展示,大家可以自己想想这个逻辑怎么设计,可以在评论区里展示出来,我每一条都会看的。

然后将接口添加到urls里面,对应增加apifox的接口,

这里删除id=3的书,也就是史记,删除后我们查询一遍看看,

我们发现成功删除了!那么这里如果有人没有删除掉,检查你的输入字段是不是写成book_id了,我们的输入和检索都是id,因为我们没有验证判断,所以不会提示其他信息。

UPDATE方法

那么下一步就是最后一个接口了,改,代码如下:

@api_view(["PUT"])
def book_edit(request):
    id = request.data.get('id')
    book_name = request.data.get('book_name')
    book_author = request.data.get('book_author')
    book_type = request.data.get('book_type')
    book_SSIN = request.data.get('book_SSIN')
    
    models.Book.objects.filter(id=id).update(book_name=book_name,book_author=book_author,
                                             book_type=book_type,book_SSIN=book_SSIN)
    
    return JsonResponse({'status': '信息修改成功!'})

注意,请求采用了PUT,因为企业的改一般是用PUT请求这里要同时有多个字段!核心是id,前端返回要改的数据id,后面的那四个数据是要改成的内容!

然后就是调用models的方法,filter用id找到要改的那条数据,update就可以把想更新的字段全部更新。我们配置路径再添加apifox的接口,

用了PUT请求以后,我们修改id为1的书的信息,然后运行

成功以后查询一下数据:

 

非常完美!至此增删改查四个接口均完成,完成基本业务需求,为操作到这里的你献上掌声!学习笔记3到此结束,喜欢的有收获的动动你发财的小手点点赞和关注!这是我更新的动力!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值