摘自 金角大王  https://www.cnblogs.com/alex3714/articles/7131523.html

Django rest framework介绍

Django REST framework is a powerful and flexible toolkit for building Web APIs.

Some reasons you might want to use REST framework:

安装

Requirements

REST framework requires the following:

  • Python (2.7, 3.2, 3.3, 3.4, 3.5, 3.6)
  • Django (1.8, 1.9, 1.10, 1.11)

The following packages are optional:

Installation

Install using pip, including any optional packages you want...

1
2
3
pip install djangorestframework
pip install markdown       # Markdown support for the browsable API.
pip install django-filter  # Filtering support

...or clone the project from github.

1
git clone git@github.com:encode/django-rest-framework.git

Add 'rest_framework' to your INSTALLED_APPS setting.

1
2
3
4
INSTALLED_APPS = (
    ...
    'rest_framework',
)

If you're intending to use the browsable API you'll probably also want to add REST framework's login and logout views. Add the following to your root urls.py file.

1
2
3
4
urlpatterns = [
    ...
    url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]

Note that the URL path can be whatever you want, but you must include 'rest_framework.urls' with the 'rest_framework'namespace. You may leave out the namespace in Django 1.9+, and REST framework will set it for you.

快速上手实例

Let's take a look at a quick example of using REST framework to build a simple model-backed API.

We'll create a read-write API for accessing information on the users of our project.

Any global settings for a REST framework API are kept in a single configuration dictionary named REST_FRAMEWORK. Start off by adding the following to your settings.py module:

1
2
3
4
5
6
7
REST_FRAMEWORK = {
    # Use Django's standard `django.contrib.auth` permissions,
    # or allow read-only access for unauthenticated users.
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly'
    ]
}

Don't forget to make sure you've also added rest_framework to your INSTALLED_APPS.

We're ready to create our API now. Here's our project's root urls.py module:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
from django.conf.urls import url, include
from django.contrib.auth.models import User
from rest_framework import routers, serializers, viewsets
 
# Serializers define the API representation.
class UserSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = User
        fields = ('url''username''email''is_staff')
 
# ViewSets define the view behavior.
class UserViewSet(viewsets.ModelViewSet):
    queryset = User.objects.all()
    serializer_class = UserSerializer
 
# Routers provide an easy way of automatically determining the URL conf.
router = routers.DefaultRouter()
router.register(r'users', UserViewSet)
 
# Wire up our API using automatic URL routing.
# Additionally, we include login URLs for the browsable API.
urlpatterns = [
    url(r'^', include(router.urls)),
    url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]

You can now open the API in your browser at http://127.0.0.1:8000/, and view your new 'users' API. If you use the login control in the top right corner you'll also be able to add, create and delete users from the system.

Django视图中使用rest

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
from rest_framework import serializers
from assets import models
 
 
 
from django.http import HttpResponse, JsonResponse
from django.views.decorators.csrf import csrf_exempt
from rest_framework.renderers import JSONRenderer
from rest_framework.parsers import JSONParser
from rest_framework.decorators import api_view
 
from rest_framework import status
from rest_framework.response import Response
 
 
class EventLogSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.EventLog
        fields = ('id','user','name''event_type''detail''asset''date''memo')
 
 
 
 
 
@api_view(['GET''POST'])
def eventlog_list(request):
    """
    List all snippets, or create a new snippet.
    """
    if request.method == 'GET':
        eventlogs = models.EventLog.objects.all()
        serializer = EventLogSerializer(eventlogs, many=True)
        return Response(serializer.data)
 
    elif request.method == 'POST':
        print("request",request.data)
        serializer = EventLogSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
 
#@api_view(['GET', 'POST','PUT'])
@csrf_exempt
def eventlog_detail(request, pk):
    """
    Retrieve, update or delete a code eventlog.
    """
    try:
        eventlog_obj = models.EventLog.objects.get(pk=pk)
    except models.EventLog.DoesNotExist:
        return HttpResponse(status=404)
 
    if request.method == 'GET':
        serializer = EventLogSerializer(eventlog_obj)
        return JsonResponse(serializer.data)
 
    elif request.method == 'PUT':
        print(request)
        data = JSONParser().parse(request)
        serializer = EventLogSerializer(eventlog_obj, data=data)
        if serializer.is_valid():
            serializer.save()
            return JsonResponse(serializer.data)
        return JsonResponse(serializer.errors, status=400)
 
    elif request.method == 'DELETE':
        eventlog_obj.delete()
        return HttpResponse(status=204)

  

更多请看 http://www.django-rest-framework.org/

python 之路,Django rest framework 初探的更多相关文章

  1. 自学Python之路-django

    自学Python之路-django 自学Python之路[第一回]:1.11.2 1.3

  2. Python之路-(Django进阶一)

    Django请求生命周期: 首先,客户端发送请求到服务器的urls库,通过匹配url后面的关键字,去找指定app里面的的view. 然后,app通过判断,拿到数据库数据和html模板文件. 最后,将拿 ...

  3. python之路 django基础

    Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能. ...

  4. Python之路-(Django(Cookie、分页))

    Cookie 分页 1.获取Cookie: request.COOKIES['key'] request.get_signed_cookie(key, default=RAISE_ERROR, sal ...

  5. Python之路-(Django进阶二)

    model: 双下划线: # 获取个数 # # models.Tb1.objects.filter(name='seven').count() # 大于,小于 # # models.Tb1.objec ...

  6. python之路-----django 自定义cookie签名

    1.默认自定义cookie 在使用扩展签名时,会根据settings 配置中的  SIGNING_BACKEND 来运行加密方法,默认使用 django.core.signing.TimestampS ...

  7. Python之路-(Django(csrf,中间件,缓存,信号,Model操作,Form操作))

    csrf 中间件 缓存 信号 Model操作 Form操作 csrf: 用 django 有多久,我跟 csrf 这个概念打交道就有久了. 每次初始化一个项目时都能看到 django.middlewa ...

  8. Django REST framework+Vue 打造生鲜超市(一)

    一.项目介绍 1.1.掌握的技术 Vue + Django Rest Framework 前后端分离技术 彻底玩转restful api 开发流程 Django Rest Framework 的功能实 ...

  9. 1- vue django restful framework 打造生鲜超市

    Vue+Django REST framework实战 使用Python3.6与Django2.0.2(Django-rest-framework)以及前端vue开发的前后端分离的商城网站 项目支持支 ...

  10. Python之路【第十七篇】:Django【进阶篇 】

    Python之路[第十七篇]:Django[进阶篇 ]   Model 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接 ...

随机推荐

  1. Maven项目的创建教程

    1.创建Maven项目 首先File->New新建一个Maven项目,选择相应地址保存,点击CREATE完成新建 2.改成Web项目 右键选择Add Framework Support... 再 ...

  2. 跨域解决方案CORS

    这里说的 js 跨域是指通过 js 在不同的域之间进行数据传输或通信,例如通过 ajax 向一个不同的域请求数据,或者通过 js 获取页面中不同域中(iframe)的数据.只要协议.域名.端口有任何一 ...

  3. InnoDB 索引深入剖析

    InnoDB页 将数据划分为若干个页(page),以页作为磁盘和内存之间交互的基本单位,InnoDB中页的大小一般为 16KB.也就是在一般情况下,一次最少从磁盘中读取16KB的内容到内存中,一次最少 ...

  4. Java 遍历方式

    一.遍历方式 迭代器 增强for循环 普通for循环 二.使用 迭代器: public class IteratorMethod { public static void main(String[] ...

  5. ABC291题解(D-G)

    ABC291 D - Flip Cards Solution: 考虑DP,定义状态\(F_{i,0}\)为第\(i\)张卡片正面朝上的方案数,\(F_{i,1}\)为第\(i\)张卡片背面朝上的方案数 ...

  6. Oracle_数据泵

    Oracle数据泵导入.导出数据 expdp导出 运行CMD 登录数据库,输入sqlplus 使用管理员角色登录需要在用户名后加" as sysdba" 例如:sys as sys ...

  7. Spring事务——传播性

    传播性 事务传播行为是为了解决业务层方法之间互相调用的事务问题,当一个事务方法被另一个事务方法调用时,事务该以何种状态存在?例如新方法可能继续在现有事务中运行,也可能开启一个新事务,并在自己的事务中运 ...

  8. 网络抓包 tcpdump 使用指南

    在网络问题的调试中,tcpdump应该说是一个必不可少的工具,和大部分linux下优秀工具一样,它的特点就是简单而强大.它是基于Unix系统的命令行式的数据包嗅探工具,可以抓取流动在网卡上的数据包. ...

  9. 在Blazor中使用Chart.js

    1. 在Blazor中使用Chart.js 首先,从Chart.js官方网站下载Chart.js库文件. 推荐下载这个构建好的版本https://cdnjs.com/libraries/Chart.j ...

  10. Vue3中无法为el-tree-select设置反选问题分析

    好久没有写博客了,刚好上周遇到一个难缠问题,这里记录一下. 环境:Vue3.2.Element Plus 问题:子组件 setting.vue => 弹窗组件 Dialog => 树选择组 ...