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 ...
随机推荐
- What are CBR, VBV and CPB?
转自:https://codesequoia.wordpress.com/2010/04/19/what-are-cbr-vbv-and-cpb/ It's common mistake to to ...
- OO第一单元总结——表达式求导
第一次作业 (1) UML结构图 (2)结构分析 Polynomial 类是对输入的字符串进行预处理,其中包括判断格式是否合法,运算符简化,分割成项等方法. Polynomial处理后得到的每一个项的 ...
- 在ActiveMQ中使用SingleConnectionFactory遇到的坑
我们在生产环境使用了ActiveMQ作为消息中间件,消息中间件连接到数据库对消息进行持久化. 最近发生了一个奇怪的事情,消费者端的生产日志总是报如下错误: The JMS connection has ...
- C#是怎么跑起来的
解释流程前,需要了解一些基本的概念. 基本概念解释: CPU :中央处理器,计算机的大脑,内部由数百万至数亿个晶体管组成,是解释和运行最终转换成机器语言(二进制代码)的地方.机器语言是通过CPU内存的 ...
- 2.HTML案例二 头条页面
4 HTML案例-头条页面 4.1 案例效果 4.2 案例分析 4.2.1 div布局的进阶 想要将div布局成案例效果,首先需要对多个div进行区分,再分别设置每一个div自身的效果. 1)div的 ...
- CSS中常用的函数
一.CSS函数的用法 设置css的属性值时可以使用css函数,如果color:rgba(20,30,50,0.5),css中有很多这样的函数. 二.常用的CSS函数 a.calc()函数 这个函数 ...
- 转圈 箭头 ⟳ 10227 27F3 刷新 HTML常用的特殊符号总结
HTML常用的特殊符号总结 2014年9月12日 57621次浏览 html中经常会用到一些特殊符号,例如箭头,雪花,心形等等,这些符号就不用css样式或者图片来写了,直接用html特殊符号可以实现. ...
- 与find不同,locate并不是实时查找。你需要更新数据库,以获得最新的文件索引信息。updatedb
find是实时查找,如果需要更快的查询,可试试locate:locate会为文件系统建立索引数据库,如果有文件更新,需要定期执行更新命令来更新索引库: $locate string 寻找包含有stri ...
- Mysql数据库-多实例主从复制-主从故障详解
一.mysql结构 1.实例 1.什么是单实例 一个进程 + 多个线程 + 一个预分配的内存空间 2.多实例 多个进程 + 多个线程 + 多个预分配的内存空间 ](http://shelldon.51 ...
- 10.6 ip:网络配置工具
ip命令是iproute软件包中的一个强大的网络配置工具,用于显示或管理Linux系统的路由.网络设备.策略路由和隧道. ip [option] [object] [command] ip [选项 ...