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实现将汉字转换成汉语拼音的库
May 05 Python
基于python的七种经典排序算法(推荐)
Dec 08 Python
python实现写数字文件名的递增保存文件方法
Oct 25 Python
Python编程图形库之Pillow使用方法讲解
Dec 28 Python
pandas DataFrame 删除重复的行的实现方法
Jan 29 Python
Flask教程之重定向与错误处理实例分析
Aug 01 Python
python opencv将表格图片按照表格框线分割和识别
Oct 30 Python
django ListView的使用 ListView中获取url中的参数值方式
Mar 27 Python
django 解决扩展自带User表遇到的问题
May 14 Python
Python新手学习装饰器
Jun 04 Python
Python中qutip用法示例详解
Oct 02 Python
Pycharm 如何一键加引号的方法步骤
Feb 05 Python
Python基础之变量的相关知识总结
Jun 23 #Python
浅谈Python数学建模之固定费用问题
浅谈Python数学建模之整数规划
浅谈Python数学建模之数据导入
Jun 23 #Python
python四种出行路线规划的实现
浅谈Python数学建模之线性规划
Jun 23 #Python
教你如何用Python实现人脸识别(含源代码)
You might like
SONY ICF-SW7600的电路分析
2021/03/02 无线电
php异常:Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE  eval()'d code error
2011/05/19 PHP
四个常见html网页乱码问题及解决办法
2015/09/08 PHP
php判断是否为ajax请求的方法
2016/11/29 PHP
从javascript语言本身谈项目实战
2006/12/27 Javascript
jquery ajax 登录验证实现代码
2009/09/23 Javascript
jquery mobile页面跳转后样式丢失js失效的解决方法
2014/09/06 Javascript
js实现iframe跨页面调用函数的方法
2014/12/13 Javascript
js实现图片和链接文字同步切换特效的方法
2015/02/20 Javascript
html、css和jquery相结合实现简单的进度条效果实例代码
2016/10/24 Javascript
JavaScript 动态三角函数实例详解
2017/01/08 Javascript
div实现自适应高度的textarea实现angular双向绑定
2017/01/08 Javascript
JS实现京东首页之页面顶部、Logo和搜索框功能
2017/01/12 Javascript
javascript容错处理代码(屏蔽js错误)
2017/01/20 Javascript
JavaScript使用Ajax上传文件的示例代码
2017/08/10 Javascript
详解微信小程序调用支付接口支付
2019/04/28 Javascript
vue通过v-html指令渲染的富文本无法修改样式的解决方案
2020/05/20 Javascript
Vue $attrs & inheritAttr实现button禁用效果案例
2020/12/07 Vue.js
python两种遍历字典(dict)的方法比较
2014/05/29 Python
python基础教程之面向对象的一些概念
2014/08/29 Python
Python结巴中文分词工具使用过程中遇到的问题及解决方法
2017/04/15 Python
Python中循环后使用list.append()数据被覆盖问题的解决
2018/07/01 Python
python实现飞机大战游戏
2020/10/26 Python
python进程和线程用法知识点总结
2019/05/28 Python
Appium+python自动化之连接模拟器并启动淘宝APP(超详解)
2019/06/17 Python
python错误调试及单元文档测试过程解析
2019/12/19 Python
python GUI库图形界面开发之PyQt5布局控件QVBoxLayout详细使用方法与实例
2020/03/06 Python
记一次Django响应超慢的解决过程
2020/09/17 Python
python tkinter实现连连看游戏
2020/11/16 Python
详解CSS3选择器的使用方法汇总
2015/11/24 HTML / CSS
英国最大的美妆产品在线零售商之一:Beauty Bay
2017/09/29 全球购物
美国机场停车位预订:About Airport Parking
2018/03/26 全球购物
毕业生自荐信范文
2015/03/05 职场文书
高中同学会致辞
2015/08/01 职场文书
物业保洁员管理制度
2015/08/05 职场文书
如何在centos上使用yum安装rabbitmq-server
2021/03/31 Servers