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调用短信猫控件实现发短信功能实例
Jul 04 Python
CentOS 6.X系统下升级Python2.6到Python2.7 的方法
Oct 12 Python
Django自定义manage命令实例代码
Feb 11 Python
详解python:time模块用法
Mar 25 Python
python实现扫描局域网指定网段ip的方法
Apr 16 Python
Django页面数据的缓存与使用的具体方法
Apr 23 Python
解决pycharm运行程序出现卡住scanning files to index索引的问题
Jun 27 Python
解决Django一个表单对应多个按钮的问题
Jul 18 Python
django自带serializers序列化返回指定字段的方法
Aug 21 Python
django2.2安装错误最全的解决方案(小结)
Sep 24 Python
Python动态导入模块:__import__、importlib、动态导入的使用场景实例分析
Mar 30 Python
Django利用AJAX技术实现博文实时搜索
May 06 Python
Python基础之变量的相关知识总结
Jun 23 #Python
浅谈Python数学建模之固定费用问题
浅谈Python数学建模之整数规划
浅谈Python数学建模之数据导入
Jun 23 #Python
python四种出行路线规划的实现
浅谈Python数学建模之线性规划
Jun 23 #Python
教你如何用Python实现人脸识别(含源代码)
You might like
destoon实现调用自增数字从1开始的方法
2014/08/21 PHP
php数组转成json格式的方法
2015/03/09 PHP
php中时间函数date及常用的时间计算
2017/05/12 PHP
PHP根据树的前序遍历和中序遍历构造树并输出后序遍历的方法
2017/11/10 PHP
PHP设计模式(九)外观模式Facade实例详解【结构型】
2020/05/02 PHP
Jquery 表单取值赋值的一些基本操作
2009/10/11 Javascript
js里取容器大小、定位、距离等属性搜集整理
2013/08/19 Javascript
浅谈js中的闭包
2015/03/16 Javascript
JavaScript的Vue.js库入门学习教程
2016/05/23 Javascript
Bootstrap表单布局
2016/07/19 Javascript
JAVA Web实时消息后台服务器推送技术---GoEasy
2016/11/04 Javascript
微信小程序 实战程序简易新闻的制作
2017/01/09 Javascript
Layui Form 自定义验证的实例代码
2019/09/14 Javascript
vue input标签通用指令校验的实现
2019/11/05 Javascript
VUE中setTimeout和setInterval自动销毁案例
2020/09/07 Javascript
如何在面试中手写出javascript节流和防抖函数
2020/10/22 Javascript
Vue实现菜单切换功能
2020/11/08 Javascript
JavaScript手写数组的常用函数总结
2020/11/22 Javascript
Python通过PIL获取图片主要颜色并和颜色库进行对比的方法
2015/03/19 Python
python比较2个xml内容的方法
2015/05/11 Python
Python实现二叉树结构与进行二叉树遍历的方法详解
2016/05/24 Python
Python 正则表达式的高级用法
2016/12/04 Python
django实现登录时候输入密码错误5次锁定用户十分钟
2017/11/05 Python
tensorflow 使用flags定义命令行参数的方法
2018/04/23 Python
Python facenet进行人脸识别测试过程解析
2019/08/16 Python
原生python实现knn分类算法
2019/10/24 Python
Python GUI自动化实现绕过验证码登录
2020/01/10 Python
pytorch对梯度进行可视化进行梯度检查教程
2020/02/04 Python
python对数组进行排序,并输出排序后对应的索引值方式
2020/02/28 Python
HTML5播放实现rtmp流直播
2020/06/16 HTML / CSS
英国豪华家具和家居用品购物网站:Teddy Beau
2020/10/12 全球购物
求职简历中个人的自我评价
2013/12/25 职场文书
欢送退休感言
2014/02/08 职场文书
六个一活动实施方案
2014/03/21 职场文书
导游词之北京明十三陵
2019/10/28 职场文书
十大最强火系宝可梦,喷火龙上榜,第一名有双火属性
2022/03/18 日漫