Python django中如何使用restful框架


Posted in Python onJune 23, 2021

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

Python django中如何使用restful框架

本文以创建man包含namesex字段的API为实例学习django-rest-framework框架的使用。

主要包含下面5个步骤:

1.创建Django项目

2.创建ORM模型

3.加载Django REST Framework

4.序列化模型

5.创建加载数据的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

Python django中如何使用restful框架

将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/可以看到登录界面,输入密码登录

Python django中如何使用restful框架

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

Python django中如何使用restful框架

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

Python django中如何使用restful框架

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

我们要做三件事:

1.导入Man模型

2.导入序REST Framework序列化器

3.创建新的类将模型和序列化器链接起来

from rest_framework import serializers

from .models import Man

class Manserializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Man
        fields = ('name','sex')

5.创建加载数据的view和url

我们需要把序列化后的数据返回给浏览器,所以要做一下步骤:

1.通过不通的Man查询数据库

2.将查询后的数据传递给序列化器,通过序列化器转化为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

Python django中如何使用restful框架

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

Python django中如何使用restful框架

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

Python django中如何使用restful框架

这样我们一个基础restful风格的API创建完成了。感觉关键点还是理解ModelViewSet和内置router不读源码很难知其所以然。

到此这篇关于Python django中如何使用restful框架的文章就介绍到这了,更多相关restful框架的使用内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python单元测试unittest实例详解
May 11 Python
Python3实现并发检验代理池地址的方法
Sep 18 Python
Python读取视频的两种方法(imageio和cv2)
Apr 15 Python
详解python函数的闭包问题(内部函数与外部函数详述)
May 17 Python
简单了解python 生成器 列表推导式 生成器表达式
Aug 22 Python
Python 爬取必应壁纸的实例讲解
Feb 24 Python
django修改models重建数据库的操作
Mar 31 Python
jupyter notebook实现显示行号
Apr 13 Python
python删除文件、清空目录的实现方法
Sep 23 Python
分布式全文检索引擎ElasticSearch原理及使用实例
Nov 14 Python
OpenCV-Python实现轮廓拟合
Jun 08 Python
浅谈Python中对象是如何被调用的
Apr 06 Python
Python基础之变量的相关知识总结
Jun 23 #Python
浅谈Python数学建模之固定费用问题
浅谈Python数学建模之整数规划
浅谈Python数学建模之数据导入
Jun 23 #Python
python四种出行路线规划的实现
浅谈Python数学建模之线性规划
Jun 23 #Python
教你如何用Python实现人脸识别(含源代码)
You might like
php二分法在IP地址查询中的应用
2008/08/12 PHP
AJAX的跨域访问-两种有效的解决方法介绍
2013/06/22 PHP
详解PHP中的PDO类
2015/07/06 PHP
Yii2使用自带的UploadedFile实现的文件上传
2016/06/20 PHP
php判断数组是否为空的实例方法
2020/05/10 PHP
如何做到打开一个页面,过几分钟自动转到另一页面
2007/04/20 Javascript
用函数式编程技术编写优美的 JavaScript_ibm
2008/05/16 Javascript
基于jQuery的表格操作插件
2010/04/22 Javascript
理解Javascript_15_作用域分配与变量访问规则,再送个闭包
2010/10/20 Javascript
让网页跳转到指定位置的jquery代码非书签
2013/09/06 Javascript
实践中学习AngularJS表单
2016/03/21 Javascript
js实现div模拟模态对话框展现URL内容
2016/05/27 Javascript
javascript js 操作数组 增删改查的简单实现
2016/06/20 Javascript
学习vue.js条件渲染
2016/12/03 Javascript
EasyUi 打开对话框后控件赋值及赋值后不显示的问题解决办法
2017/01/19 Javascript
浅谈regExp的test方法取得的值变化的原因及处理方法
2017/03/01 Javascript
jQuery实现定时隐藏对话框的方法分析
2018/02/12 jQuery
使用vue-route 的 beforeEach 实现导航守卫(路由跳转前验证登录)功能
2018/03/22 Javascript
AngularJS日期格式化常见操作实例分析
2018/05/17 Javascript
解决vue props传Array/Object类型值,子组件报错的情况
2020/11/07 Javascript
[47:52]完美世界DOTA2联赛PWL S2 PXG vs InkIce 第二场 11.26
2020/11/30 DOTA
Python学习之asyncore模块用法实例教程
2014/09/29 Python
使用beaker让Facebook的Bottle框架支持session功能
2015/04/23 Python
Python程序员面试题 你必须提前准备!
2018/01/16 Python
Python numpy 点数组去重的实例
2018/04/18 Python
Django ORM filter() 的运用详解
2020/05/14 Python
django下创建多个app并设置urls方法
2020/08/02 Python
英国买鞋网站:Charles Clinkard
2019/11/14 全球购物
为什么在使用动态 SQL 语句时必须为低层数据库对象授予权限
2012/12/13 面试题
C#如何调用Windows程序打开一个文档
2014/12/26 面试题
妇科医生自荐信
2013/11/05 职场文书
求职自荐信范文格式
2013/11/29 职场文书
企业形象策划方案
2014/05/29 职场文书
高一地理教学工作总结
2015/08/12 职场文书
高中班主任工作总结(范文)
2019/08/20 职场文书
Python Matplotlib绘制条形图的全过程
2021/10/24 Python