赞
踩
在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 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/students/
http://127.0.0.1:8002/api/group/
来源:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。