美文网首页
Python Web框架 Django - 前后分离、restf

Python Web框架 Django - 前后分离、restf

作者: 莫名ypc | 来源:发表于2018-12-06 17:18 被阅读0次

REST是所有Web应用都应该遵守的架构设计指导原则。

Representational State Transfer,翻译是”表现层状态转化”。

REST核心: 资源, 状态转移, 统一接口

资源: 是REST最明显的特征,是指对某类信息实体的抽象,资源是服务器上一个可命名的抽象概念,资源是以名词为核心来组织的,首先关注的是名词。

状态转移: 是指客户端痛服务端进行交互的过程中,客户端能够通过对资源的表述,实现操作资源的目的

统一接口: REST要求,必须通过统一的接口来对资源执行各种操作。对于每个资源只能执行一组有限的操作。 比如,客户端通过HTTP的4个请求方式(POST, GET, PUT, PATCH)来操作资源,也就意味着不管你的url是什么,不管请求的资源是什么但操作的资源接口都是统一的。

  • GET用来获取资源,
  • POST用来新建资源(也可以用于更新资源),
  • PUT(PATCH)用来更新资源,
  • DELETE用来删除资源。

get/post/put/patch/delete
post:创建
put:修改(修改全部属性)
patch:修改(修改部分属性)
delete:删除

django使用restful

安装

pip install djangorestframework==3.4.6

pip install django-filter  # Filtering support

settings.py文件中配置

INSTALLED_APPS = [
    ...

    'rest_framework',
]

在app的urls.py文件中配置路由

from django.conf.urls import url

from rest_framework.routers import SimpleRouter
from article import views

# 生成路由对象
router = SimpleRouter()
# 路由管理资源art
# http://127.0.0.1:8080/api/article/art/
router.register('art', views.ArticleView)

urlpatterns = [

]
# router.urls生成资源对应的路由地址
urlpatterns += router.urls

在视图views中定义类

from django.shortcuts import render

from rest_framework import mixins, viewsets
from article.article_serializer import ArticleSerializer
from article.models import Article


class ArticleView(viewsets.GenericViewSet,
                  mixins.ListModelMixin,
                  mixins.DestroyModelMixin,
                  mixins.CreateModelMixin,
                  mixins.UpdateModelMixin,
                  mixins.RetrieveModelMixin):
    # 查询返回的数据
    queryset = Article.objects.all()
    # 序列化返回的文章数据
    serializer_class = ArticleSerializer

自定义序列化类

from rest_framework import serializers

from article.models import Article


class ArticleSerializer(serializers.ModelSerializer):

    class Meta:
        # 序列化的模型
        model = Article
        # 需要序列化的字段
        fields = ['title', 'desc', 'content']

html页面内容

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
</head>
<body>
    {% csrf_token %}
    <div id="content">

    </div>

    <script>
        $.ajax({
            url: '/api/article/art/',
            type: 'get',
            dataType: 'json',
            success: function (data) {
                {#console.log(data)#}
                for(var i=0; i < data.length; i++){
                    s = '标题:    ' + data[i].title + '描述:    '
                        + data[i].desc + '内容:    ' + data[i].content
                        + '<button onclick="del_art(' + data[i].id + ')" >删除</button> <br>';
                    $('#content').append(s)
                }
            },
            error: function (data) {
                alert('失败')
            }
        });



        function del_art(id) {

            var csrf = $('input[name="csrfmiddlewaretoken"]').val()

            $.ajax({
                url: '/api/article/art/' + id + '/',
                type: 'DELETE',
                headers: {'X-CSRFToken': csrf},
                dataType: 'json',
                success: function (data) {
                    location.href='/api/article/list/'
                },
                error: function (data) {
                    alert('失败')
                }
            })
        }

    </script>
</body>
</html>

相关文章

网友评论

      本文标题:Python Web框架 Django - 前后分离、restf

      本文链接:https://www.haomeiwen.com/subject/vpjncqtx.html