065.Python框架Django-DRF
一 WEB应用模式
在开发Web应用中,有两种应用模式:
1.1 前后端不分离
1.2 前后端分离
二 API接口
为了在团队内部形成共识、防止个人习惯差异引起的混乱,我们需要找到一种大家都觉得很好的接口实现规范,而且这种规范能够让后端写的接口,用途一目了然,减少双方之间的合作成本。
目前市面上大部分公司开发人员使用的接口服务架构主要有:restful、rpc。
2.1 rpc
rpc: 翻译成中文:远程过程调用[远程服务调用].
post请求
action=get_all_student¶ms=301&sex=1
接口多了,对应函数名和参数就多了,前端在请求api接口时,就会比较难找.容易出现重复的接口
2.2 restful
restful: 翻译成中文: 资源状态转换.
把后端所有的数据/文件都看成资源.那么接口请求数据,本质上来说就是对资源的操作了.
web项目中操作资源,无非就是增删查改.所以要求在地址栏中声明要操作的资源是什么,然后通过http请求动词来说明对资源进行哪一种操作.
- POST http://www.luffy.com/api/students/ 添加学生数据
- GET http://www.luffy.com/api/students/ 获取所有学生
- DELETE http://www.luffy.com/api/students/<pk> 删除1个学生
2.3 RESTful API规范
REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征)性状态转移。 它首次出现在2000年Roy Fielding的博士论文中。
RESTful是一种定义Web API接口的设计风格,尤其适用于前后端分离的应用模式中。
这种风格的理念认为后端开发任务就是提供数据的,对外提供的是数据资源的访问接口,所以在定义接口时,客户端访问的URL路径就表示这种要操作的数据资源。而对于数据资源分别使用POST、DELETE、GET、UPDATE等请求动作来表达对数据的增删查改。
事实上,我们可以使用任何一个框架都可以实现符合restful规范的API接口。
2.4 序列化
api接口开发,最核心最常见的一个过程就是序列化,所谓序列化就是把数据转换格式。
序列化可以分两个阶段:
1 序列化
把我们识别的数据转换成指定的格式提供给别人。
例如:我们在django中获取到的数据默认是模型对象,但是模型对象数据无法直接提供给前端或别的平台使用,所以我们需要把数据进行序列化,变成字符串或者json数据,提供给别人。
2 反序列化
把别人提供的数据转换/还原成我们需要的格式。
例如:前端js提供过来的json数据,对于python而言就是字符串,我们需要进行反序列化换成模型类对象,这样我们才能把数据保存到数据库中。
2.4 Django Rest_Framework
核心思想: 缩减编写api接口的代码
- Django REST framework是一个建立在Django基础之上的Web 应用开发框架,可以快速的开发REST API接口应用。
- 在REST framework中,提供了序列化器Serializer的定义,可以帮助我们简化序列化与反序列化的过程,不仅如此,还提供丰富的类视图、扩展类、视图集来简化视图的编写工作。
- REST framework提供了认证、权限、限流、过滤、分页、接口文档等功能支持。
- REST framework提供了一个API 的Web可视化界面来方便查看测试接口。
特点:
- 提供了定义序列化器Serializer的方法,可以快速根据 Django ORM 或者其它库自动序列化/反序列化;
- 提供了丰富的类视图、Mixin扩展类,简化视图的编写;
- 丰富的定制层级:
- 函数视图、类视图、视图集合到自动生成 API,满足各种需要;
- 多种身份认证和权限认证方式的支持;
- 内置了限流系统;
- 直观的 API web 界面;
- 可扩展性,插件丰富
三 API借口初步尝试
3.1 环境安装与配置
在使用 Python
开发的过程中,工程一多,难免会碰到不同的工程依赖不同版本的库的问题;亦或者是在开发过程中不想让物理环境里充斥各种各样的库,引发未来的依赖灾难。此时,我们需要对于不同的工程使用不同的虚拟环境来保持开发环境以及宿主环境的清洁。
virtualenv是
一个可以帮助我们管理不同 Python
环境,可以在系统中建立多个不同并且相互不干扰的虚拟环境。
在虚拟环境安装drf,许碧环境安装参考https://www.cnblogs.com/zyxnhr/p/12686908.html
root@darren-virtual-machine:~# mkdir /root/PycharmProjects/drfdemo/
root@darren-virtual-machine:~# cd /root/PycharmProjects/drfdemo/
root@darren-virtual-machine:~# mkvirtualenv drfdemo -p python3
(drfdemo) root@darren-virtual-machine:~# pip3 install django
(drfdemo) root@darren-virtual-machine:~# pip3 install djangorestframework
(drfdemo) root@darren-virtual-machine:~# pip3 install pymysql
3.2 创建一个django项目
(drfdemo) root@darren-virtual-machine:~/PycharmProjects/drfdemo# pip3 lis
Package Version
------------------- -------
asgiref 3.2.7
Django 3.0.5
djangorestframework 3.11.0
pip 20.0.2
PyMySQL 0.9.3
pytz 2019.3
setuptools 46.1.3
sqlparse 0.3.1
wheel 0.34.2
(drfdemo) root@darren-virtual-machine:~/PycharmProjects/drfdemo# django-admin startproject drf_demo
(drfdemo) root@darren-virtual-machine:~/PycharmProjects/drfdemo# tree drf_demo
drf_demo/
├── drf_demo
│ ├── asgi.py
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── manage.py
使用Pycharm配置虚拟环境解释器
先打开这个项目
选择show all
弹窗+选择添加
根据自己的虚拟化环境,选择需要的解释器
确定之后
点击OK
即使用虚拟环境的python3.6
添加rest framework应用,并创建注册app
(drfdemo) root@darren-virtual-machine:~/PycharmProjects/drfdemo# cd drf_demo/
(drfdemo) root@darren-virtual-machine:~/PycharmProjects/drfdemo/drf_demo# python3 manage.py startapp students
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'students.apps.StudentsConfig'
]
3.3 简单配置
接下来就可以使用DRF提供的功能进行api接口开发了。在项目中如果使用rest_framework框架实现API接口,主要有以下三个步骤:
将请求的数据(如JSON格式)转换为模型类对象
操作数据库
将模型类对象转换为响应的数据(如JSON格式)
配置模型类
from django.db import models # Create your models here.
class Student(models.Model):
# 模型字段
name = models.CharField(max_length=100, verbose_name="姓名")
sex = models.BooleanField(default=1, verbose_name="性别")
age = models.IntegerField(verbose_name="年龄")
class_null = models.CharField(max_length=5, verbose_name="班级编号")
description = models.TextField(max_length=1000, verbose_name="个性签名")
#配置数据库的显示名称
class Meta:
db_table = "tb_student"
verbose_name = "学生"
verbose_name_plural = verbose_name
数据库操作
创建数据库,注册并执行迁移数据库命令
mysql> create database drf default charset=utf8;
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'drf',
'HOST': '127.0.0.1',
'PORT': 3306,
'USER': 'root',
'PASSWORD': '123456',
}
}
__init__.py
import pymysql
pymysql.install_as_MySQLdb()
修改注释
(drfdemo) root@darren-virtual-machine:~/PycharmProjects/drfdemo/drf_demo# vim /root/Envs/drfdemo/lib/python3.6/site-packages/django/db/backends/mysql/base.py
#if version < (1, 3, 13):
# raise ImproperlyConfigured('mysqlclient 1.3.13 or newer is required; you have %s.' % Database.__version__)
(drfdemo) root@darren-virtual-machine:~/PycharmProjects/drfdemo/drf_demo# python3 manage.py makemigrations
(drfdemo) root@darren-virtual-machine:~/PycharmProjects/drfdemo/drf_demo# python3 manage.py migrate
查看数据库
mysql> use drf;
mysql> show tables;
在syudents应用目录中新建serializers.py用于保存该应用的序列化器。
(drfdemo) root@darren-virtual-machine:~/PycharmProjects/drfdemo/drf_demo# vim students/serializers.py
创建一个StudentModelSerializer用于序列化与反序列化。
from rest_framework import serializers
from students.models import Student # 创建序列化器类,回头会在视图中被调用
class StudentModelSerializer(serializers.ModelSerializer):
class Meta:
model = Student
fields = "__all__"
# fields = ("id", "name") # 也可指定字段
model 指明该序列化器处理的数据字段从模型类Student参考生成
fields 指明该序列化器包含模型类中的哪些字段,'all'指明包含所有字段
编辑视图类
from django.shortcuts import render # Create your views here.
from rest_framework.viewsets import ModelViewSet
from students.models import Student
from students.serializers import StudentModelSerializer class StuentAPIView(ModelViewSet):
queryset = Student.objects.all()
serializer_class = StudentModelSerializer
queryset 指明该视图集在查询数据时使用的查询集
serializer_class 指明该视图在进行序列化或反序列化时使用的序列化器
定义路由
(drfdemo) root@darren-virtual-machine:~/PycharmProjects/drfdemo/drf_demo# vim students/urls.py
from rest_framework.routers import DefaultRouter
from students import views
urlpatterns = [] # 路由列表
router = DefaultRouter() # 可以处理视图的路由器
router.register('student', views.StuentAPIView) # url进行注册
urlpatterns += router.urls # 将路由器中的所有路由信息追加到django的路由列表中
配置路由分发
from django.contrib import admin
from django.urls import path,include urlpatterns = [
path('admin/', admin.site.urls),
path('student/',include("students.urls"))
]
3.4 运行测试
启动访问http://127.0.0.1:8000/student/student/
POST提交
数据库查看
mysql> select * from tb_student;
json格式数据提交
POST提交
mysql> select * from tb_student;
在开始刷新,导致多插入了数据
使用请求修改pk=2和pk=3的数据
访问http://127.0.0.1:8000/student/student/2/
PUT提交,查看数据库
mysql> select * from tb_student;
同样修改pk=3
访问http://127.0.0.1:8000/student/student/3/
PUT调教查看数据库
删除
访问http://127.0.0.1:8000/student/student/4/
点击删除并确定,查看数据库
后不跟pk值,就是获取所有
访问http://127.0.0.1:8000/student/student/
使用postman调试,得到get数据
使用POST提交数据
点击send发送.检查数据
同样也可以get put等请求操作数据
参考:https://www.cnblogs.com/Michael--chen/p/11222143.html
065.Python框架Django-DRF的更多相关文章
- python框架Django简介与安装
Django简介 关注公众号"轻松学编程"了解更多. 发布于2005年,最负盛名且成熟的Python网络框架 最初用来制作在线新闻的Web站点 开源Web框架,遵守BSD协议 BS ...
- 067.Python框架Django之DRF视图类
一 关于视图类的一下概念 drf除了在数据序列化部分简写代码以外,还在视图中提供了简写操作.所以在django原有的django.views.View类基础上,drf封装了多个子类出来提供给我们使用. ...
- 068.Python框架Django之DRF视图集使用
一 视图集与路由的使用 使用视图集ViewSet,可以将一系列逻辑相关的动作放到一个类中: list() 提供一组数据 retrieve() 提供单个数据 create() 创建数据 update() ...
- 编程 - Python - 框架 - Django
一.Django简介 百度百科:一个开放源代码的Web框架,由Python语言编写...... 重点:一个大而全的框架,啥都替你考虑好了. 1. web框架介绍 具体介绍Django之前,必须先介绍W ...
- python框架-Django安装使用
1.安装pip sudo apt-get install python-pip 遇到问题需要更新下语言包 sudo apt-get update 检查pip是否安装成功 pip -V 查看已安装包 p ...
- python框架Django中MTV框架之VIew(业务控制器)
MTV框架之VIew(业务控制器) 关注公众号"轻松学编程"了解更多. 1.什么是视图 视图层=路由表(urls.py)+视图函数(views.py) 其角色相当于MVC中的Con ...
- python框架Django中MTV框架之Template(模板/界面)
MTV框架之Template(模板/界面) 关注公众号"轻松学编程"了解更多. 1.模板目录位置 应用下 不需要注册 无法跨应用地进行复用 工程下 需要注册 settings.py ...
- python框架Django中MTV之Model(数据模型)
MTV框架之Model(数据模型) 关注公众号"轻松学编程"了解更多. 1.连接MySQL数据库 项目中的settings.py设置范例 # 配置数据库 DATABASES = { ...
- python框架Django中的MTV架构
MTV架构 关注公众号"轻松学编程"了解更多. 通过V对M和T进行连接,用户通过T(界面)对服务器进行访问(发送请求),T把请求传给V(调度),V调用M(数据模型)获取数据,把 ...
随机推荐
- maven setting.xml 阿里云镜像 没有一句废话
<?xml version="1.0" encoding="UTF-8"?> <!-- Licensed to the Apache Soft ...
- OO第三单元个人总结
OO第三单元个人总结 JML理论与基础与应用工具链 JML是什么? Java建模语言(JML)是一种行为接口规范语言,可用于指定Java模块的行为 .它结合了Eiffel的契约设计方法 和Larch ...
- Leedcode算法专题训练(数学)
204. 计数质数 难度简单523 统计所有小于非负整数 n 的质数的数量. class Solution { public int countPrimes(int n) { boolean[] is ...
- java中的|=符号
今天看mybaits源码的时候,发现了这个特殊的符号用法,|=. for (ParameterMapping pm : boundSql.getParameterMappings()) { Strin ...
- JDBC_06_处理查询结果集
JDBC处理查询结果集 * ResultSet resultSet=null 结果集对象 * executeQuery(select) 执行SQL查询语句需要的使用executeQuery方法 * i ...
- Django 模型(Model)
1. 模型简介 ORM 简介 使用 Mysql 数据库的环境配置 2. 定义模型 1)定义属性 2)字段类型 3)字段选项 4)关系 5)元选项 6)范例 3. 模型成员&管理器 1)类属性 ...
- 使用docker快速安装软件
安装mysql mkdir /opt/mysql /opt/mysql/etc /opt/mysql/data docker run -itd --name mariadb -e MYSQL_ROOT ...
- kubeadm安装kubernetes1.18.5
前言 尝试安装helm3,kubernetes1.18,istio1.6是否支持现有集群平滑迁移 版本 Centos7.6 升级内核4.x kubernetes:v1.18.5 helm:v3.2.4 ...
- 使用 mvn install 命令将本地jar包注册到本地maven仓库
前提: 要安装maven并配置环境变量. windows 系统环境变量配置 新建环境变量:MAVEN_HOME 值为:maven的解压包路径或安装路径. 在path 环境变量中添加:%MAVEN ...
- 病毒木马查杀实战第009篇:QQ盗号木马之手动查杀
前言 之前在<病毒木马查杀第002篇:熊猫烧香之手动查杀>中,我在不借助任何工具的情况下,基本实现了对于"熊猫烧香"病毒的查杀.但是毕竟"熊猫烧香" ...