django_restfreamwork 1 基础

Posted on 2020-08-21 19:00  王石头py  阅读(196)  评论(0)    收藏  举报

为什么前后端分离

满足多端适配
后端只需要提供接口,前端不管是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 = ['*']