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)

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

时间: 2024-11-04 19:48:30

django 前后端分离,后端接口实现的相关文章

webpack 前后端分离开发接口调试解决方案,proxyTable解决方案

如果你有单独的后端开发服务器 API,并且希望在同域名下发送 API 请求 ,那么代理某些 URL 会很有用. dev-server 使用了非常强大的 http-proxy-middleware 包.更多高级用法,请查阅其文档. 在 localhost:3000 上有后端服务的话,你可以这样启用代理: proxy: { "/api": "http://localhost:3000" } 请求到 /api/users 现在会被代理到请求 http://localhos

vue的初识与简单使用---前后端分离通过接口调取数据

vue的安装 #### 1.环境搭建 ''' - 安装node ``` 官网下载安装包,傻瓜式安装:https://nodejs.org/zh-cn/ ``` - 安装cnpm ``` npm install -g cnpm --registry=https://registry.npm.taobao.org ``` - 安装脚手架 ``` cnpm install -g @vue/cli ``` - 清空缓存处理 ``` npm cache clean --force ``` #### 2.项

前后端分离之——接口数据返回---标准格式

开发中,如果前端和后端,在没有统一返回数据格式,我们来看一下会发生什么: 后台开发人员A,在接口返回时,习惯返回一个返回码code=0000,然后返回数据: 后台开发人员B,在接口返回时,习惯直接返回一个boolean类型的success=true,然后返回数据: 后台开发人员C,在接口返回时,习惯在接口失败时返回码为code=0000. 可以看到,上面的三个开发人员,都没有大问题,没有谁对谁错,只要给前端接口文档,前端都是可以接上接口的.但是,在项目功能越来越多,接口数量持续增长时,对开发人员

前后端分离-后端大字典

注意小细节 公用接口取消使用登录认证和权限认证 Django缓存 签发token user密码密文上传数据库 正则 手机号码正则 接口 原文地址:https://www.cnblogs.com/zx125/p/11974277.html

SpringBootSecurity学习(13)前后端分离版之JWT

JWT 使用 前面简单介绍了把默认的页面登录改为前后端分离的接口异步登录的方法,可以帮我们实现基本的前后端分离登录功能.但是这种基本的登录和前面的页面登录还有一个一样的地方,就是使用session和cookie来维护登录状态,这种方法的问题在于,扩展性不好.单机当然没有问题,如果是服务器集群,或者是跨域的服务导向架构,就要求 session 数据共享,每台服务器都能够读取 session. 一种解决方案是 session 数据持久化,写入redis或别的持久层.各种服务收到请求后,都向持久层请求

2018 Vue+Django API前后端分离开发电商新技术跨域项目实战

课程目标帮助大家快速入门Django REST framework这一个API框架. 帮助大家详细了解Django REST framework中序列化.视图.路由等模块的使用. 帮助大家使用Django REST framework快速开发一套可用的API服务,并且自动生成API文档.适用人群Python开发工程师,后端开发工程师课程简介目前前后端分离的架构设计越来越流行,前后端通过API来实现数据通信.那如何快速开发一套符合RESTful风格的API呢?Django REST framewo

从零开始搭建django前后端分离项目 系列一(技术选型)

前言 最近公司要求基于公司的hadoop平台做一个关于电信移动网络的数据分析平台,整个项目需求大体分为四大功能模块:数据挖掘分析.报表数据查询.GIS地理化展示.任务监控管理.由于页面功能较复杂,所以采用前后端分离方式开发.前端采用webpack+vue+vue-router+axios技术栈,后端用django进行开发.从搭建到上线,整个项目前前后后花了差不多一个月时间,中途也遇到一些问题,不过还好都解决了.由于是个人项目,所以我打算把源码贡献出来大家一起讨论学习. 源代码 https://g

django的crsf机制防御详解及在前后端分离中post数据到django-vue

django的crsf机制防御详解及在前后端分离中post数据到django 更新于: 2018-07-28 |  分类于 django CSRF(Cross Site Request Forgery) 跨站点伪造请求 某个用户已经登陆了你的网站,另外有一个恶意的网站有一个指向你网站的链接,那么当用户点击这个链接时,就会请求你的网站,但是你的网站以为是用户发来的请求,这时恶意网站就得逞了. django的应对措施 用户在post请求时,发送给用户一个token,然后在django内部实现了一个校

前后端分离,如何防止接口被其他人调用或恶意重发

前后端分离,如何防止接口被其他人调用或恶意重发? 首先,http协议的无状态特性决定了是无法彻底避免第三方调用你的后台服务.我们可以通过crsf.接口调用频率.用户行为分析(来源等)等各个方面来增加第三方调用的难度,也可以通过添加一个中间层比如node.js来实现:1. 非法访问通常使用认证来解决,方法很多session,token,oauth第三方框架等等. (1)常规的方法:用户登陆后生成token,返回客户端,然后服务器使用AOP拦截controller方法,校验token的有效性,每次t