为什么前后端分离
满足多端适配
后端只需要提供接口,前端不管是pc还是app都可以调用数据
前后端职责不清晰
末班语言到底是前端写还是后端写
前后端耦合度高
解耦之后,不会依赖后端是什么语言开发
REST风格
目前主流web服务交互方案
REST 表属性状态转义
SOAP 简单对象访问协议
XML-RPC 基于XML远程过程调用
XML-RPC
第一代web服务交互方案,是通过XML将调用函数封装,并使用HTTP协议作为传送机制,这个标准慢慢被SOAP取代
SOAP
则是以本身所定义的操作集,来访问网络上的资源,不只限于HTTP协议的传输,包括TCP协议,UDP协议都可以传输。
REST
相比SOAP更加简洁,性能和开发效率也有突出的优势,越来越多的web服务开始采用REST风格设计和实现。
理解REST
什么是URI,URL
URI 统一资源标志符。URL 统一资源定位符。
URL可以说是URI的子集,通过定位的方式实现的URI
Alex的住址协议://地球/中国/屌丝省/屌丝市/寡妇村/250号街道/250号/Alex
统一资源接口
根据HTTP请求方式的不同(get/post),对资源进行不同的操作,这个就是是统一资源接口
post 新增数据
get 查询数据
delete 删除
.. ..
资源的表述
通过HTTP内容协商,客户端可以通过Accept头请求一种特定格式的表述,服务端则通过Content-Type告诉客户端资源的表述形式
这些资源的表述呈现在页面上,就是我们说的资源状态
状态转移
服务端通过超链接告诉客户端当前状态有哪些后续状态可以进入。
这些类似"下一页"之类的链接起的就是这种推进状态的作用——指引你如何从当前状态进入下一个可能的状态。
总结
可以得知REST风格的特点如下:
1,在web中,只要有被引用的必要都叫资源。
2,每个URI代表一个资源,独一无二的。
3,客户端通过HTTP的方法,对服务器端资源进行操作;
4,客户端和服务器之间,传递这种资源的某种表现层
5,通过超链接的指引,实现"表现层状态转移"。
RESTful规范
一个架构符合REST的约束条件和原则,我们就称它为RESTful架构。
一种软件的架构风格,设计风格,为客户端和服务端的交互提供一组设计原则和约束条件。
1,面向资源
每个URL代表一种资源,URL中尽量不要用动词,要用名词。
2,根据method不同,进行不同的操作
GET
POST
PUT
DELETE
PATCH
3,在URL中体现版本
https://www.bootcss.com/v1/mycss
https://v1.bootcss.com/mycss
4,在URL中体现是否是API
https://www.bootcss.com/api/mycss
https://api.bootcss.com/mycss
5,在URL中体现过滤条件(分页)
https://www.bootcss.com/v1/mycss?page=3
6,尽量使用HTTPS
https://www.bootcss.com/v1/mycss
7,响应时设置状态码
1** 信息,服务器收到请求,需要请求者继续执行操作
2** 成功,操作被成功接收并处理
3** 重定向,需要进一步的操作以完成请求
4** 客户端错误,请求包含语法错误或无法完成请求
5** 服务器错误,服务器在处理请求的过程中发生了错误
8,返回值
GET请求 返回查到所有或单条数据
POST请求 返回新增的数据
PUT请求 返回更新数据
PATCH请求 局部更新 返回更新整条数据
DELETE请求 返回值为空
9,返回错误信息
返回值携带错误信息
10,Hypermedia API
如果遇到需要跳转的情况 携带调转接口的URL
ret = {
code: 1000,
data:{
id:1,
name:'小强',
depart_id:http://www.luffycity.com/api/v1/depart/8/
}
}
DRF框架准备
django restframework 框架
mysql
新建库
mysql> create database restframework charset utf8mb4;
Query OK, 1 row affected (0.00 sec)
配置xadmin
安装
pip3 install https://codeload.github.com/sshwsfc/xadmin/zip/django2 -i https://pypi.tuna.tsinghua.edu.cn/simple
注册xadmin
settings.py
INSTALLED_APPS = [
...
'xadmin',
'crispy_forms',
'reversion',
...
]
# 修改使用中文界面
LANGUAGE_CODE = 'zh-Hans'
#LANGUAGE_CODE = 'en-us'
# 修改时区
TIME_ZONE = 'Asia/Shanghai'
#TIME_ZONE = 'UTC'
xadmin数据库迁移
python3 manage.py makemigrations
python3 manage.py migrate
新增xadmin路由
新增总路由
# from django.contrib import admin
# from django.urls import path,include
#
# from django.urls import re_path
# from django.conf import settings
# from django.views.static import serve
import xadmin
xadmin.autodiscover()
# version模块自动注册需要版本控制的 Model
from xadmin.plugins import xversion
xversion.register_models()
#用xadmin,就不用admin要注释,
urlpatterns = [
# #path('admin/', admin.site.urls),
# re_path(r'media/(?P<path>.*)', serve, {"document_root": settings.MEDIA_ROOT}),
# path('', include("home.urls")),
path(r'xadmin/', xadmin.site.urls),
]
创建xadmin超级用户
$ python3 manage.py createsuperuser
用户名 (leave blank to use 'wangjunxiang'): root
电子邮件地址: root@root.com
Password: 123123
Password (again): 123123
密码长度太短。密码必须包含至少 8 个字符。
这个密码太常见了。
密码只包含数字。
Bypass password validation and create user anyway? [y/N]: y
Superuser created successfully.
配置xadminx.py
新建apps/自定义项目app名/adminx.py
- 注意:配置文件一定叫 adminx.py
import xadmin
from xadmin import views
class BaseSetting(object):
"""xadmin的基本配置"""
enable_themes = True # 开启主题切换功能
use_bootswatch = True
xadmin.site.register(views.BaseAdminView, BaseSetting)
class GlobalSettings(object):
"""xadmin的全局配置"""
site_title = "luffy" # 设置站点标题
site_footer = "luffy" # 设置站点的页脚
menu_style = "accordion" # 设置菜单折叠
xadmin.site.register(views.CommAdminView, GlobalSettings)
# 导入表
from .models import 表1,表2,表3
class 表1_ModelAdmin(object):
list_display=["表字段1","表字段2","表字段3"]
xadmin.site.register(表1, 表1_ModelAdmin)
class 表2_ModelAdmin(object):
list_display=["表字段1",]
xadmin.site.register(表2, 表2_ModelAdmin)
class 表3_ModelAdmin(object):
list_display=["表字段1",]
xadmin.site.register(表3, 表3_ModelAdmin)
设置访问白名单
settings.py中设置为 '*'
ALLOWED_HOSTS = ['*']
浙公网安备 33010602011771号