美文网首页Django apiPython
Django rest_framework 编写 API

Django rest_framework 编写 API

作者: SingleDiego | 来源:发表于2016-12-09 15:45 被阅读475次

    要使用 ** rest_framework ** 首先要安装相关的库:

    pip install djangorestframework
    

    在这个例子中,我们创建一个书目的 API,首先创建一个 Django 项目,项目中创建一个名为:library 的 app,文件目录如下:

    1.编辑 setting



    编辑 setting.py 的 INSTALLED_APPS 部分,添加 library 和 rest_framework:

    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'library',
        'rest_framework', # 要使用rest_framework需要在这里添加上
    ]
    

    如果你的 setting.py 里面没找到 REST_FRAMEWORK,加上以下部分:

    REST_FRAMEWORK = {
        'DEFAULT_AUTHENTICATION_CLASSES': (
            # 'rest_framework.authentication.SessionAuthentication',
            # 'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
            ),
        'DEFAULT_PERMISSION_CLASSES': (
            # 'rest_framework.permissions.IsAuthenticated',
            ),
    }
    

    2.编辑 model 和 admin



    编辑 model.py 如下:

    from django.db import models
    
    # Create your models here.
    
    class Book(models.Model):
        title = models.CharField(null=True, blank=True, max_length=50)
        author = models.CharField(null=True, blank=True, max_length=50)
        summary = models.TextField(null=True, blank=True)
    
        def __str__(self):
            return self.title
    

    记得执行 makemigrations 和 migrate 两个命名。

    然后编辑 admin.py 如下:

    from django.contrib import admin
    from library.models import Book  
    
    admin.site.register(Book)  
    

    创建超级用户后,在后台添加相关的书目信息:

    3.创建 API



    我们在 library 文件夹内新建一个文件 api,py,编辑该文件:

    from library.models import Book
    
    # 序列化器,把数据包装成类似字典的格式
    from rest_framework import serializers
    
    # 这两个模块把序列化后的数据包装成 api
    from rest_framework.response import Response
    from rest_framework.decorators import api_view
    
    # 创建一个 Book 的序列化器
    class BookSerializer(serializers.ModelSerializer):
        class Meta:
            model = Book  # 序列化的对象
            fields = '__all__'  # 序列化的属性
            # fields = ('title', 'author')  # 如果只需要序列化某几个属性可以用元组
    
    
    @api_view(['GET'])  # 装饰器,使得 book 函数具有 api_view 的相关方法 
    def book(request):
        book_list = Book.objects.all() # Book 的全部数据
        serializer = BookSerializer(book_list, many=True) # 序列化 Book 的数据
        return Response(serializer.data)
    

    4.设置 URL



    编辑 url.py:

    from django.conf.urls import url
    from django.contrib import admin
    from library.api import book
    
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^api/book', book),
    ]
    

    打开:http://127.0.0.1:8000/api/book ,可以看到 API 创建完成:

    如果要返回 json,可以用:http://127.0.0.1:8000/api/book?format=json

    相关文章

      网友评论

      • 空转风:返回的json中文乱码请问如何解决?就是加了?format=json这个

      本文标题:Django rest_framework 编写 API

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