django 前后端分离,后端接口实现

Posted xiaokuangnvhai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django 前后端分离,后端接口实现相关的知识,希望对你有一定的参考价值。

博客篇我们使用的是前后端不分离的方式进行实现,前后端不分离实现方式,主要用于小型的项目,且一个人就可以搞定所有,但是中大型的应用还是用的前后端分离的方式进行的

前后端分离方式后台主要给前端提供接口,前端JS调用后台的接口,根据接口定义的传参进行传参,得到返回值,然后展现在页面上,或者对数据进行了操作,把操作后的数据传给后端,后端进行数据的更新等

 

下面的例子我们主要从基本的增删改查进行设计后台接口部分

 

一、准备工作

1、modles.py文件中,创建student表,用于进行增删改查

class  Student(models.Model):
    name = models.CharField(verbose_name=名称,max_length=10)
    phone = models.CharField(max_length=11,unique=True,verbose_name=手机号)
    money = models.FloatField(verbose_name=金额,default=0,null=True)
    addr = models.CharField(verbose_name=地址, default=北京, max_length=20)
    work_addr = models.CharField(verbose_name=地址, default=北京, max_length=20)
    create_time = models.DateTimeField(verbose_name=创建时间, auto_now_add=True)  # auto_now_add的意思,插入数据的时候,自动取当前时间
    update_time = models.DateTimeField(verbose_name=修改时间, auto_now=True)

    class Meta:
        verbose_name = 学生表
        verbose_name_plural = verbose_name
        db_table = student

    def __str__(self):
        return self.name
python manage.py makemigrations   创建表结构

python manage.py migrate 创建数据库表

2、view.py文件中引用form表单进行验证

from .models import Student
from django.forms import ModelForm  #引用表单模块

class StudentForm(ModelForm):
    class Meta:
        model = Student
        fields = __all__ #代表所有的字段

3、定义接口类,主要用于写增删改查接口对应的方法

class StudentView(View):

4、urls.py文件,增加接口请求名称

urlpatterns = [

   #这种方式,需要在连接后面加?,比如url?id=1 
    path(stu3, views2.StudentView.as_view() ), 
   
    #这种方式,无需在连接后面加?,比如 url/3
    #path(‘stu3/<int:id>‘,views2.StudentView.as_view()),
]

二、查询方法

其中支持模糊查询及过滤查询,方法如下:

    search_field=[name,phone,addr,work_addr] #存储搜索的字段,全局变量
    filter_field=[name,phone,id] #存储过滤字段,全局变量

    def get(self,request):
        limit = request.GET.get(limit,20) #每页个数,无传值默认每页20
        page = request.GET.get(page,1) #页码,无传值,默认1
        search=request.GET.get(search) #获取请求中的查询条件
        filter_dict={} #定义空字典,存储过滤字段及值

        #过滤
        for field in self.filter_field:  #遍历过滤list
            value=request.GET.get(field) 
            if value:  #当请求中有该字段且该字段不为空
                filter_dict[field]=value   #把该字段及值写入过滤字典中

        #查询
        q_result=Q() 
        for field in self.search_field: #变量搜索list
            if search:
               d={%s__contains%field:search}
               q_result=Q(**d)|q_result


        all_students = Student.objects.filter(**filter_dict).filter(q_result).values() #优先过滤
#all_students = Student.objects.filter(q_result).values().filter(**filter_dict) #优先模糊查询 page_obj
= Paginator(all_students,limit) stus = list(page_obj.get_page(page)) data = {"error_code":0,"msg":"操作成功","data":stus,"count":page_obj.count} return JsonResponse(data,json_dumps_params={"ensure_ascii":False},encoder=NbJSONEncoder)

 

以上是关于django 前后端分离,后端接口实现的主要内容,如果未能解决你的问题,请参考以下文章

深入浅出:了解前后端分离优势前后端接口联调以及优化问题

微信小程序前后端分离怎么实现

前后端分离怎么获取后台接口数据

瞧瞧人家用SpringBoot写的后端API接口,那叫一个优雅

基于Mock.js的前后端分离思考与实践

如何设计拖拽排序的后端接口