热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

DjangoRESTFramework教程(一分钟入门)

引言使用DjangoRestFramework之前我们要先知道,它是什么,能干什么用?引用官方一句话:DjangoREST框架是用于构建WebAPI的功能强大且灵活的工具包。那为什

  引言

  使用Django Rest Framework之前我们要先知道,它是什么,能干什么用?

  引用官方一句话:Django REST框架是用于构建Web API的功能强大且灵活的工具包。

  那为什么要使用Rest Framework?

  Django REST Framework可以在Django的基础上迅速实现API,并且自身还带有WEB的测试页面,可以方便的测试自己的API。

  Web应用模式

  我们开发django项目时,经常会接触的接口这个东西,那么django-web开发接口是怎样呢?  先了解一下web前后端开发模式《django前后分离与不分离》,这篇文章是我发布在CSDN上的一篇简单叙述django开发模式。

总体上就是:

web应用模式分两种:

             1. 前后端不分离

        在前后端不分离的引用模式中,前端页面看到的效果都是由后端控制的,由后端页面渲染或者重定向,也就是后端需要控制前端的展示,前端与后端的耦合度很高,这种模式比较适合纯网页应用,但是后端对接APP时,App可能并不需要后端返回一个HTML网页,二仅仅是数据本身,所以后端原本返回网页的接口不在适用前端APP应用,为了对接APP后端嗨需再开发一套接口。

        这个可以看我之前写的DJango博客就可以知道,每次返回时都是使用render 或者redirect来返回的,需要带上HTML页面和参数

             2. 前后端分离

          在前后端分离的应用模式中,后端仅返回前端所需要的数据,不再渲染HTML页面,不再控制前端的效果,只要前端用户看到什么效果,从后端请求的数据如何加载到前端中,都由前端自己决定,网页有网页自己的处理方式,APP有APP的处理方式,但无论哪种前端所需要的数据基本相同,后端仅需开发一套逻辑对外提供数据即可,在前后端分离的应用模式中,前端与后端的耦合度相对较低

          在前后端分离的应用模式中,我们通常将后端开发的每一视图都成为一个接口,或者API,前端通过访问接口来对数据进行增删改查

如果项目的需求是后一种情况的话,那么就可以用到Django Rest Framework了。

感兴趣的可以参考官方资料:https://www.django-rest-framework.org/,如果看不懂英文的伙伴,可以参考rest的中文文档:http://www.iamnancy.top/djangorestframework/Home/

  Django REST Framework项目

1.打开pycharm编辑器,新建项目,选择如下:

Django REST Framework教程(一分钟入门)

 这里虚拟环境是django_rest,如果看不懂,可以参考我前面写的虚拟环境使用的文章。

2.建好之后的项目结构如下:

Django REST Framework教程(一分钟入门)

 在创建的虚拟环境中安装Django REST framework:

Django REST Framework教程(一分钟入门)

  开发步骤

  上面已经安装好环境和包,现在就开始开发了。

1.首先配置setting文件,加入rest_framework应用。

Django REST Framework教程(一分钟入门)

2.全局设置,分页和API使用权限问题,指定管理员使用:

# 设置权限策略:
REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.IsAdminUser',
    ],
    'PAGE_SIZE': 10
}

3.数据迁移

Django REST Framework教程(一分钟入门)

4.创建管理员账号:

Django REST Framework教程(一分钟入门)

5. 创建数据序列化,主要来展示数据:

在api应用下面新建serializers.py文件

Django REST Framework教程(一分钟入门)

代码:

from django.contrib.auth.models import User, Group
from rest_framework import serializers


class UserSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = User
        fields = ('url', 'username', 'email', 'groups')


class GroupSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Group
        fields = ('url', 'name')

 说明:serializers用户定义API表现形式,比如返回哪些字段,什么格式等,这里是序列化django自带的User和Group。

6.创建视图函数:

from django.contrib.auth.models import User, Group
from rest_framework import viewsets
from tutorial.quickstart.serializers import UserSerializer, GroupSerializer


class UserViewSet(viewsets.ModelViewSet):
    """
    允许用户查看或编辑的API路径。
    """
    queryset = User.objects.all().order_by('-date_joined')
    serializer_class = UserSerializer


class GroupViewSet(viewsets.ModelViewSet):
    """
    允许组查看或编辑的API路径。
    """
    queryset = Group.objects.all()
    serializer_class = GroupSerializer

 

7.在django_restAPI目录下url.py中,添加api的路由配置:

from django.conf.urls import url, include
from rest_framework import routers
from tutorial.quickstart import views

router = routers.DefaultRouter()
router.register(r'users', views.UserViewSet)
router.register(r'groups', views.GroupViewSet)

# 使用自动URL路由连接我们的API。
# 另外,我们还包括支持浏览器浏览API的登录URL。
urlpatterns = [
    url(r'^', include(router.urls)),
    url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]

 

8.到此所有东西都已经写完,然后我们运行runserver命令:

Django REST Framework教程(一分钟入门)

 

 接口返回403,提示没有权限,我们登陆一下试试:

Django REST Framework教程(一分钟入门)

 

 返回了两个url,一个是添加用户组,一个是添加用户。可能有些人有疑问,为啥是两个? 因为前面序列化数据的时候,数据展示形式写了两个,我们注释一个,再运行试试:

Django REST Framework教程(一分钟入门)

 

查看界面:

 Django REST Framework教程(一分钟入门)

点击添加用户链接,添加用户

 

 Django REST Framework教程(一分钟入门)

 

 

 

这种是通过接口形式将用户组和用户展示出来,我们可以登录后台查看:

Django REST Framework教程(一分钟入门)

 所以,rest呈现给我们是API,以调接口形式去操作数据库,而admin后台管理是页面的形式操作和展示数据。

细心的人可以发现,为啥status是红色的叉,是因为序列化的时候没有将状态字段显示,现在我将它放出来:

Django REST Framework教程(一分钟入门)

再运行程序,添加用户后查看:

Django REST Framework教程(一分钟入门)

 

 

 进入后端管理页面查看:

Django REST Framework教程(一分钟入门)

 是不是就开启了,如果不放心的同学,可以去数据库查看一下:

Django REST Framework教程(一分钟入门)

 

到此,django_rest_framework入门教程已经讲完,不管以后是否开发API,是否用到,对于学习django新手来说,了解一下设计模式和思想也是不错的。

  如果对python测试开发相关技术感兴趣的伙伴,欢迎加入测试开发学习交流QQ群:696400122,不积跬步,无以至千里。




推荐阅读
  • vue使用
    关键词: ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • MongoDB用户验证auth的权限设置及角色说明
    本文介绍了MongoDB用户验证auth的权限设置,包括readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase、cluster相关的权限以及root权限等角色的说明和使用方法。 ... [详细]
  • 欢乐的票圈重构之旅——RecyclerView的头尾布局增加
    项目重构的Git地址:https:github.comrazerdpFriendCircletreemain-dev项目同步更新的文集:http:www.jianshu.comno ... [详细]
  • 本文介绍了如何使用PHP向系统日历中添加事件的方法,通过使用PHP技术可以实现自动添加事件的功能,从而实现全局通知系统和迅速记录工具的自动化。同时还提到了系统exchange自带的日历具有同步感的特点,以及使用web技术实现自动添加事件的优势。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • Oracle Database 10g许可授予信息及高级功能详解
    本文介绍了Oracle Database 10g许可授予信息及其中的高级功能,包括数据库优化数据包、SQL访问指导、SQL优化指导、SQL优化集和重组对象。同时提供了详细说明,指导用户在Oracle Database 10g中如何使用这些功能。 ... [详细]
  • 本文介绍了C++中省略号类型和参数个数不确定函数参数的使用方法,并提供了一个范例。通过宏定义的方式,可以方便地处理不定参数的情况。文章中给出了具体的代码实现,并对代码进行了解释和说明。这对于需要处理不定参数的情况的程序员来说,是一个很有用的参考资料。 ... [详细]
  • Python项目实战10.2:MySQL读写分离性能优化
    本文介绍了在Python项目实战中进行MySQL读写分离的性能优化,包括主从同步的配置和Django实现,以及在两台centos 7系统上安装和配置MySQL的步骤。同时还介绍了创建从数据库的用户和权限的方法。摘要长度为176字。 ... [详细]
author-avatar
deng_xiaomi
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有