网站首页 > 技术文章 正文
前面我基本都是用原生的Django来搭建的WEB后台,Django是Python的一个开源Web应用框架,基于MVC模型【Model(模型)+View(视图)+ Controller(控制器)】的设计模式,具有开发快捷高效、部署方便、可重用性高、支持多种数据库引擎、可扩展性强及维护成本低等特点,深受广大开发者的喜爱。通过Django我们只需要很少的代码就可以轻松地完成一个网站所需要的大部分Web服务功能。但是Django很多功能实现都需要我们自己开发,不仅麻烦 而且效率不高,今天我们要分享的是Django REST framework,基于Django二次开发的一个用于构建Web API 的强大而又灵活的工具,可以大大提高REST API的开发效率。
创建项目
新建一个文件夹,在文件夹中打开cmd命令,然后通过命令:django-admin startproject projectName创建项目,然后就可以在新建的文件夹中看到文件名为projectName的文件了,这个就是Django生成的基本框架。通过命令python manage.py startapp appName来创建应用,这里我们创建了项目为blog,应用为user,db.sqlite3是数据迁移后生成的数据库文件。
引入RESTframework
首先我们需要先安装RESTframework,直接执行命令:pip install djangorestframework即可安装RESTframework模块,然后在项目的settings.py中的INSTALLED_APPS列表中添加'rest_framework',这样在项目中就可以使用RESTframework了。
RESTframework支持 APIView、 解析器、 序列化、 视图类(mixin)、 认证、 权限、 限流、过滤、 分页、 响应、 url注册等许多功能,核心功能就是Serializer序列化器和视图。通过Serializer序列化器可以大大的简化数据库操作,具体的可以参看Django实战003:为什么使用Serializer序列化器。而视图则在Django的基础上进行了增强,RESTframework 提供了、 APIView 、GenericAPIView 、mixin类、通用视图类、ViewSet视图集等多种视图功能。
创建模型类
这里我定义了一个用户信息和一个关联账户信息,null=True空值将会被存储为NULL,默认为False, blank=True,字段允许为空,默认False,verbose_name时django自带后台用来显示的标题,这里我们可以当成注释。
注意,外键ForeignKey关联账户要放在前面,否则无法识别到
创建序列化器
接下来我们就来创建Serializer序列化器,在应用下创建 serializers.py文件,引入serializers:from rest_framework import serializers并导入我们的模型类,具体形式已经在下图描述的很清楚了,完成之后记得迁移模型,同步至数据库。
python manage.py makemigrations python manage.py migrate
配置Url路由
为了更好的管理路由,我将各应用中的路由单独存储,并在项目中引用include('user.urls')应用中的路由,这是Django中的写法,其实RESTframework也为我们提供了功能更加丰富的路由配置。Django2.0以后引入了path
#项目中的urls from django.contrib import admin from django.urls import path from django.conf.urls import include, url urlpatterns = [ url(r'', include('user.urls')), path('admin/', admin.site.urls), ] #应用中的urls from django.urls import path from user import views urlpatterns = [ path('test/', views.userinfo.as_view()) ]
定义视图
写个最简单的视图,返回用户信息中的所有的数据,通过get方法就可以直接获取到用户的所有数据,包括起外键关联的数据。
from rest_framework.views import APIView from rest_framework.response import Response from user.serializer import * from user.models import * # Create your views here. class userinfo(APIView): def get(self,request): user = User.objects.all() serializer = UserSerializer(user, many=True) return Response(serializer.data)
查看结果
现在我们启动下服务,看下该路由下获取到的数据到底是什么形式的,这里我们可以看到给前台返回的数据是个列表元素,用户信息以字典的形式嵌套在里面,而外键关联的数据同样以字典的形式内嵌在用户信息中,前台只要依次遍历就可以获取到对应的数据了。在前台输入http://localhost:8000/test/就可以访问到我们的视图内容了,显示了请求状态(HTTP 200 OK),请求方式(GET)、请求路由(/test/)、请求内容格式(application/json)以及请求的数据(data)。前台拿到这个api就可以通过ajax(这里我一般用axios)发送请求来获取我们接口给出的数据了。
欢迎关注本人的公众号:编程手札,文章也会在公众号更新
猜你喜欢
- 2024-10-17 简书看到的技术文档,非常详细解释了axios技术,值得收藏
- 2024-10-17 全面分析前端的网络请求方式 前端网络请求框架
- 2024-10-17 一步一步学测试平台开发-Vue restful请求
- 2024-10-17 前端面试29:什么是fetch?fetch与20年前的ajax有什么不同?
- 2024-10-17 手把手教你全面分析前端如何网络请求方式
- 2024-10-17 实战:整合VueJS、Axios和Jacksons实现JAVA EE 下的数据持久化
- 2024-10-17 前端基础面试:axios的特点和基本使用方法以及拦截器的使用方法
- 2024-10-17 在React项目中使用Axios react-intl
- 2024-10-17 前端金三银四面试必备八股文——JavaScript
- 2024-10-17 Axios是什么?用在什么场景?如何使用?
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)