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 相关文章推荐
Pyramid添加Middleware的方法实例
Nov 27 Python
用Python计算三角函数之atan()方法的使用
May 15 Python
Python检测字符串中是否包含某字符集合中的字符
May 21 Python
Python下Fabric的简单部署方法
Jul 14 Python
python函数的5种参数详解
Feb 24 Python
Python实用技巧之利用元组代替字典并为元组元素命名
Jul 11 Python
python学生信息管理系统(初级版)
Oct 17 Python
对numpy中的where方法嵌套使用详解
Oct 31 Python
python发qq消息轰炸虐狗好友思路详解(完整代码)
Feb 15 Python
解决Python spyder显示不全df列和行的问题
Apr 20 Python
matplotlib 生成的图像中无法显示中文字符的解决方法
Jun 10 Python
Python使用requests模块爬取百度翻译
Aug 25 Python
Python基础之变量的相关知识总结
Jun 23 #Python
浅谈Python数学建模之固定费用问题
浅谈Python数学建模之整数规划
浅谈Python数学建模之数据导入
Jun 23 #Python
python四种出行路线规划的实现
浅谈Python数学建模之线性规划
Jun 23 #Python
教你如何用Python实现人脸识别(含源代码)
You might like
第十一节--重载
2006/11/16 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(五)
2014/06/23 PHP
PHP使用mkdir创建多级目录的方法
2015/12/22 PHP
ThinkPHP3.2.3框架实现执行原生SQL语句的方法示例
2019/04/03 PHP
php实现根据身份证获取精准年龄
2020/02/26 PHP
使用Microsoft Ajax Minifier减小JavaScript文件大小的方法
2010/04/01 Javascript
javascript 单例/单体模式(Singleton)
2011/04/07 Javascript
使用js Math.random()函数生成n到m间的随机数字
2014/10/09 Javascript
JavaScript使用concat连接数组的方法
2015/04/06 Javascript
input点击后placeholder中的提示消息消失
2016/01/15 Javascript
JavaScript实现页面跳转的方式汇总
2016/05/16 Javascript
javascript 分号总结及详细介绍
2016/09/24 Javascript
JavaScript获取服务器时间的方法详解
2016/12/11 Javascript
Sequelize中用group by进行分组聚合查询
2016/12/12 Javascript
浅谈js中的变量名和函数名重名
2017/02/13 Javascript
Vue2.x中的父子组件相互通信的实现方法
2017/05/02 Javascript
使用JavaScript解析URL的方法示例
2019/03/01 Javascript
python通过pil为png图片填充上背景颜色的方法
2015/03/17 Python
python转换字符串为摩尔斯电码的方法
2015/07/06 Python
用Python实现斐波那契(Fibonacci)函数
2016/03/25 Python
浅谈编码,解码,乱码的问题
2016/12/30 Python
详解Python中for循环是如何工作的
2017/06/30 Python
Python实现的密码强度检测器示例
2017/08/23 Python
python-opencv在有噪音的情况下提取图像的轮廓实例
2017/08/30 Python
Python:Scrapy框架中Item Pipeline组件使用详解
2017/12/27 Python
python使用numpy实现直方图反向投影示例
2020/01/17 Python
Python中包的用法及安装
2020/02/11 Python
Python MySQL 日期时间格式化作为参数的操作
2020/03/02 Python
python获取响应某个字段值的3种实现方法
2020/04/30 Python
使用CSS3制作响应式导航菜单的方法
2015/07/12 HTML / CSS
应届生学校辅导员求职信
2013/11/07 职场文书
小区停车场管理制度
2014/01/27 职场文书
学籍证明模板
2014/11/21 职场文书
2015大学生求职信范文
2015/03/20 职场文书
运动会通讯稿50字
2015/07/20 职场文书
基于Python实现股票收益率分析
2022/04/02 Python