码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-10-29 11:44:48      阅读:84      评论:0      收藏:0      [点我收藏+]

标签:意思   phone   分离   get   span   北京   过滤   方法   nbsp   

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

前后端分离方式后台主要给前端提供接口,前端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 前后端分离,后端接口实现

标签:意思   phone   分离   get   span   北京   过滤   方法   nbsp   

原文地址:https://www.cnblogs.com/xiaokuangnvhai/p/11757527.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!