python django中restful框架的使用
在使用django进行前后台分离开发时通常会搭配django-rest-framework框架创建RESTful风格的接口API。框架介绍及版本要求可参考官方地址:https://www.django-rest-framework.org

本文以创建man包含name、sex字段的API为实例学习django-rest-framework框架的使用。
主要包含下面5个步骤:
- 创建Django项目
- 创建ORM模型
- 加载Django REST Framework
- 序列化模型
- 创建加载数据的view和url
1.创建Django项目
创建django_rest
django-admin startproject django_rest
进入django_rest,创建虚拟环境env
virtualenv env
激活虚拟环境,并安装django
source ./env/bin/activate
安装 django
pip install django
创建rest_app
python manage.py startapp rest_app
注册app,将app添加到INSTALLED_APPS
#setting.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_app'
]
创建后台admin账户用于管理
$ python manage.py createsuperuser
Username (leave blank to use 'root'):admin
Email address:
Password:
Password (again):
Superuser created successfully.
2.创建ORM模型
数据库我们使用默认sqlite3 即可,如需要变更可在setting.py中databases配置。
修改我们/django_rest/models.py添加我们man的模型
#models.py
from django.db import models
# Create your models here.
class Man(models.Model):
name = models.CharField(max_length=64)
sex = models.CharField(max_length=64)
def __str__(self):
return self.name
做数据库迁移
python manage.py makemigrations
python manage.py migrate

将Man这个model注册到我们的后台,以便可以通过django的后台做增删查改,编写admin.py如下
#admin.py
from django.contrib import admin
from .models import Man
# Register your models here.
admin.site.register(Man) # 注册Man到后台
启动django服务
python manage.py runserver
访问 http://127.0.0.1:8000/admin/可以看到登录界面,输入密码登录

可以看到我们的rest_app下的模型man对象mans

我们添加一个那个男人lgd.ame

3. 加载Django REST Framework
安装工具包
pip install djangorestframework
注册rest_framework
#setting.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_app'
'rest_framework' #注册
]
4.序列化模型
序列化器会把我们的模型数据转化(序列化)为json格式,这样就能够被请求了。同样当有josn数据提交过来的时候,序列化器会将json数据转换为模型供咋们使用。
我们在rest_app下创建文件serializer.py
我们要做三件事:
- 导入Man模型
- 导入序REST Framework序列化器
- 创建新的类将模型和序列化器链接起来
from rest_framework import serializers
from .models import Man
class Manserializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Man
fields = ('name','sex')
5.创建加载数据的view和url
我们需要把序列化后的数据返回给浏览器,所以要做一下步骤:
- 通过不通的Man查询数据库
- 将查询后的数据传递给序列化器,通过序列化器转化为json
我们在rest_app/views.py编写我们的视图,ModelViewSet由rest_framework提供,包含了get、post方法
# views.py
from rest_framework import viewsets
from .serializers import ManSerializer
from .models import Man
class ManViewSet(viewsets.ModelViewSet):
queryset = Man.objects.all().order_by('name') #查询结果给queryset
serializer_class = ManSerializer #对结果进序列化
在django_rest目录下urls.py添加api路由
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('rest_app.urls')),
]
在rest_app目录下创建urls.py添加视图路由,通过rest_framework中router确保我们的请求到正确的动态资源。
from django.urls import include, path
from rest_framework import routers
from . import views
router = routers.DefaultRouter()
router.register(r'man', views.ManViewSet) #路由到ManViewSet视图
# Wire up our API using automatic URL routing.
# Additionally, we include login URLs for the browsable API.
urlpatterns = [
path('', include(router.urls)), #使用router路由
path('api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]
最后我们来启动服务,访问http://127.0.0.1:8000/ 可以在浏览器查看到我们api信息
python manage.py runserver

访问http://127.0.0.1:8000/man/ 来查看man资源

通过id来访问api资源http://127.0.0.1:8000/man/1/

这样我们一个基础restful风格的API创建完成了。感觉关键点还是理解ModelViewSet和内置router不读源码很难知其所以然。
文章有不足的地方欢迎在评论区指出。
欢迎收藏、点赞、提问。关注顶级饮水机管理员,除了管烧热水,有时还做点别的。
python django中restful框架的使用的更多相关文章
- 写写Django中DRF框架概述以及序列化器对象serializer的构造方法以及使用
写写Django中DRF框架概述以及序列化器对象serializer的构造方法以及使用 一.了解什么是DRF DRF: Django REST framework Django REST framew ...
- Python Django中QQ邮箱授权码问题
Python Django中QQ邮箱授权码问题 系统及软件版本如下: Ubuntu Kylin 16.04 Python 3.5.1 Django 1.9.7 PyCharm Community Ed ...
- RSA算法在Python Django中的简单应用
说明 RSA算法是当今使用最广泛,安全度最高的加密算法. • RSA算法的安全性理论基础 [引]根据百科介绍,对极大整数做因数分解的难度决定了RSA算法的可靠性.换言之,对一极大整数做因数分解愈困难, ...
- 测试开发之Django——No4.Django中前端框架的配置与添加
我们在开发一个web项目的时候,虽然我们不是专业开发,但是我们也想要做出来一个美美的前端页面. 这种时候,百度上铺天盖地的前端框架就是我们的最好选择了. 当然,在网上直接下载的框架,我们是不能直接用的 ...
- Python Django 中的STATIC_URL 设置和使用解析
使用Django静态设置时,遇到很多问题,经过艰苦的Baidu, stack overflow, Django原档阅读,终于把静态图片给搞出来了.特记录下来. 关键的概念:Django中,静态资源的存 ...
- python Django中的cookie和session
目录 Cookie 1.1获取Cookie 1.2设置Cookie Session 1.数据库Session 2.缓存Session 3.文件Session 4.缓存+数据库Session Cooki ...
- python框架Django中MTV框架之VIew(业务控制器)
MTV框架之VIew(业务控制器) 关注公众号"轻松学编程"了解更多. 1.什么是视图 视图层=路由表(urls.py)+视图函数(views.py) 其角色相当于MVC中的Con ...
- python框架Django中MTV框架之Template(模板/界面)
MTV框架之Template(模板/界面) 关注公众号"轻松学编程"了解更多. 1.模板目录位置 应用下 不需要注册 无法跨应用地进行复用 工程下 需要注册 settings.py ...
- python django中使用sqlite3数据库 存储二进制数据ByteArray
在python中使用sqlite3数据库存储二进制流数据ByteArray,在django使用sqlite3数据库时,有时候也要注意最好使用二进制流ByteArray插入字符串. 使用ByteArra ...
随机推荐
- CCNA 第一章 网络互联
1: 网络互联基础 互联网络定义:使用路由器将多个网络连接起来,并配置IP或者IPV6协议的逻辑网络编址方案,便组成了互联网络. 导致LAN(局域网)拥塞的常见原因: (1):广播域或者冲突域中的主机 ...
- 网络层协议及ARP攻击
一:网络层介绍及ICMP协议 1,网络层 网络层位于OSI参考模型的第三层,位于传输层和数据链路层之间.向传输层提供最基本的端到端的数据传送服务.定义了基于IP协议的逻辑地址,连接不同媒介类型,选择数 ...
- PHPcms v9.6.0 文件上传漏洞
title: PHPcms v9.6.0 文件上传漏洞 date: 2021-4-5 tags: 渗透测试,CVE漏洞复现,文件上传 categories: 渗透测试 CVE漏洞复现 文件上传 PHP ...
- [刷题] PTA 6-11 求自定类型元素序列的中位数 (25分)
采用希尔排序 1 #include <stdio.h> 2 3 #define MAXN 10 4 typedef float ElementType; 5 6 ElementType M ...
- 【转载】fedora22和win10之间的文件共享互访
fedora22和win10之间的文件共享互访 钢铁侠与孔子 关注 2016.06.04 14:10* 字数 1327 阅读 2170评论 0喜欢 1 一,相关知识了解(本文执行环境为fedora22 ...
- 查阅日志文件:有时候报错信息只是给出了问题的表面现象,要想更深入的了解问题,必须查看相应的日志文件,而日志文件又分为系统日志文件(/var/log)和应用的日志文件,结合这两个日志文件,一般就能定位问题所在。
作为一名合格的 Linux 运维工程师,一定要有一套清晰.明确的解决故障思路,当问题出现时,才能迅速定位.解决问题,这里给出一个处理问题的一般思路: 重视报错提示信息:每个错误的出现,都是给出错误提示 ...
- 调试备忘录-SWD协议解析
目录--点击可快速直达 目录 写在前面 1 SWD协议简介 2 SWD物理层协议解析 2.1 SWD通信时序分析 2.2 SWD 寄存器简介 2.2.1 DP寄存器 2.2.2 AP寄存器 ...
- 在fragment的onViewCreated里observe livedata的变化的原因
Fragment.onViewCreated()是在Fragment.onCreateView()函数之后调用的,调用到它时 表明fragment视图层级结构已创建完毕.在onViewCreated( ...
- Linux-SSH介绍与认证方式
Linux SSH 前言: 在实际的生产环境中,运维人员经常要使用本地的计算机对远程主机进行控制工作,TCP/IP协议提供了两种协议来完成这样的操作,分别为Telnet协议和SSH协议. 由于Teln ...
- IOS 小组件(7):小组件点击交互
引言 前面我们似乎掌握了实现一个小组件所需要的一切技能,默认情况下桌面点击小组件,也正常跳转到了App中.接下来我们一起来看看,小组件是怎么做到点击跳转到App的. 点击交互方式 点击Widget ...