IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Django REST framework-RESTful API(一) -> 正文阅读

[Python知识库]Django REST framework-RESTful API(一)

一、前后端分离

  • 开发模式

在web有两种开发模式:前后端不分离,前后端分离

  • 前后端不分离

耦合度比较高

  • 前后端分离

返回的数据Json数据或者xml,后端提供接口、提供数据,前端调用接口、展示数据,耦合度比较低

  • 前后端分离有什么优势

耦合度的问题,多端使用,解决职责不清晰的一个问题,解决开发效率,提高前端程序员的能力,解决服务器压力

  • 缺点

前端程序员学习的东西,增加后端程序员需要一个详细文档,SE0

前后端不分离

前后端分离?

?

在前后端不分离模式中,前端页面看到的效果都是由后端控制,由后端渲染页面或重定向,也就是后端需要控制前端的展示,前端与后端的耦合度很高。这种应用模式比较适合纯网页应用。但是当后端对接App时,App可能并不需要后端返回一个HTML网页,而仅仅是数据本身,所以后端原本返回网页的接口不再适用于前端App应用,为了对接App后端还需再开发一套接口。在前后端分离的应用模式中,后端仅返回前端所需的数据,不再渲染HTML页面,不再控制前端的效果。至于前端用户看到什么效果,从后端请求的数据如何加载到前端中,都由前端自己决定,网页有网页的处理方式,App有App的处理方式,但无论哪种前端,所需的数据基本相同,后端仅需开发一套逻辑对外提供数据即可。
在前后端分离的应用模式中,前端与后端的耦合度相对较低。
在前后端分离的应用模式中,我们通常将后端开发的每个视图都称为一个接口,或者API,前端通过访问接口来对数据进行增删改查。

前后端分离规范

RESTful API设计规范

域名

应该尽量将API部署在专用域名之下https: //api.xxx.com/

如果确定API很简单,不会有进一步扩展,可以考虑放在主域名下。https:/ / xxx.com/api/

协议

推荐用HTTPS

版本

应该将API的版本号放入URL

https://xxx.com/ api/v1.0/{"name" : " laowang"}

https://xxx.com/api/v2.0/{" name" : " laowang","age":12}

路径

推荐用名词+复数。利用的HTTP方法可以分离网址中的资源名称的操作。

https: / /xxx.com/api/v2.0/apples/

https://xxx.com/api/v2.0/students/

GET????????/products:将返回所有产品清单

POST????????/products:将产品新建到集合

GET????????/products/4:将获取产品4

PATCH????????/products/4:将更新产品4(部分属性更新)

PUT????????/products/4:将更新产品4(全部属性更新)

HTTP请求方法

HTTP动词

  • 对数据的元操作CRUD

create????????read????????update????????delete

  • 请求方法

GET---->获取资源????????POST---->新增资源????????PUT---->更新资源

PATCH---->部分更新????????DELETE--—>删除资源

过滤信息

https://xxx.com/api/v2.0/students/1/?page=2

状态码

错误处理

{
?error: "无权限操作"
?}

移动端要求这样格式

{

"code" : 1

"msg" : "xxxxx"

"data":{}

}

返回数据都是JSON

二、用Django实现RESTful api

Django REST framework =====》DRF

Django REST framework是一个建立在Django基础之上的Web 应用开发框架,可以快速的开发REST API接口应用。在REST framework中,提供了序列化器Serialzier的定义,可以帮助我们简化序列化与反序列化的过程,不仅如此,还提供丰富的类视图、扩展类、视图集来简化视图的编写工作。REST framework还提供了认证、权限、限流、过滤、分页、接口文档等功能支持。REST framework提供了一个API 的Web可视化界面来方便查看测试接口。Django REST framework核心思想: 大量缩减编写api接口的代码。

??1、REST接口开发的核心任务

在开发REST API接口时,视图中做的最主要的三件事:

将请求的数据(如JSON格式)转换为模型类对象,操作数据库,将模型类对象转换为响应的数据(如JSON格式)

2、序列化,反序列化

序列化 Serialization :

将程序中的一个数据结构类型转换为其他格式(字典、JSON、XML等),例如将Django中的模型类对象转换为JSON字符串,这个转换过程我们称为序列化。 (利用序列化生成Json数据)

反序列化:

将其他格式(字典、JSON、XML等)转换为程序中的数据,例如将JSON字符串转换为Django中的模型类对象。

把模型数据转成可传输的数据叫序列化。

把可传输的数据转成模型数据叫反序列化。

  • 安装

pip install djangorestframework

?序列化

# app01/views.py

from django.shortcuts import render
from django.http import JsonResponse
from rest_framework import viewsets
from .serializers import Studentserializer,Groupserializer
from .models import Student,Group
# Create your views here.
def index(request):
    ctx = {
        "code": 1,
        "msg": "ok",
        "data": {"users": [
            {
                "name": "lily1",
                "age": 18,
            },
            {
                "name": "lily2",
                "age": 20,
            },
            {
                "name": "lily3",
                "age": 5,
            },
        ]
        }
    }
    return JsonResponse(ctx)

# 对数据库的增删改查全部包含在viewsets里面这个类里面了
class StudentViewset(viewsets. ModelViewSet):
    queryset = Student.objects.all()
    seria1izer_class = Studentserializer
class Groupviewset(viewsets.ModelViewSet) :
    queryset = Group.objects.all()  # 要序列化的数据
    serializer_class = Groupserializer  #要实哪个序列化类
# my_drf/urls.py
from django.contrib import admin
from django.urls import path,include
from app01 import views
from rest_framework.routers import DefaultRouter
router=DefaultRouter()
router.register(r'students',views.StudentViewset)
router.register(r'group',views.Groupviewset)

'''
http://127.0.0.1:8002/api/students/
http://127.0.0.1:8002/api/students/1/
'''

urlpatterns = [
    path("admin/", admin.site.urls),
    path("api/users/", views.index),
    path("api/", include(router.urls)),
]

Django REST framework

# settings.py
INSTALLED_APPS = [
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
    'app01.apps.App01Config',
    'rest_framework',    # 在setting.py 的app中注册
]

在数据库中建立一个模型类(建表)

# app01/models.py中写表模型
from django.db import models


# Create your models here.
class Group(models.Model):
    name = models.CharField(verbose_name="名字", max_length=100)


class Student(models.Model):
    name = models.CharField(verbose_name="名字", max_length=100)
    age = models.IntegerField(verbose_name="年龄")
    group = models.ForeignKey(to=Group, on_delete=models.CASCADE)

?自定义序列化

# app01/serializers.py新建一个序列化类
from .models import Student,Group
from rest_framework import serializers
class Studentserializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        # 在下面写入想要序列化的字段名称
        mode1 = Student
        fields = ("id","name","age","group")
class Groupserializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Group
        fields = ("id","name")

在app01文件夹中新建一个urls.py

from django.contrib import admin
from django.urls import path,include
from app01 import views
from rest_framework.routers import DefaultRouter

urlpatterns=[
    path('admin/',admin.site.urls),
    path('api/app01',include('app01.urls'))
]

python manage.py migrate?

python manage.py runserver 8002

python manage.py makemigrations

python manage.py migrate

http://127.0.0.1:8002/api/?

?http://127.0.0.1:8002/api/students/

http://127.0.0.1:8002/api/group/?

来源:

手把手带你入门Django REST framework--Python视频教程-后端开发-CSDN程序员研修院

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-09-24 20:53:29  更:2022-09-24 20:56:52 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 18:58:34-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码