首页 > 其他分享 >Django REST framework创建api

Django REST framework创建api

时间:2023-05-09 16:35:37浏览次数:56  
标签:api py REST framework API url 我们 tutorial

我们将创建一个简单的允许管理员用户查看和编辑系统中的用户和组的API。

项目设置

创建一个名为 tutorial 的新django项目,然后启动一个名为 quickstart 的新app。

# 创建项目目录
mkdir tutorial
cd tutorial

# 创建一个virtualenv来隔离我们本地的包依赖关系
virtualenv env
source env/bin/activate  # 在Windows下使用 `env\Scripts\activate`

# 在创建的虚拟环境中安装 Django 和 Django REST framework
pip install django
pip install djangorestframework

# 创建一个新项目和一个单个应用
django-admin.py startproject tutorial .  # 注意结尾的'.'符号
cd tutorial
django-admin.py startapp quickstart
cd ..

现在第一次同步你的数据库:

python manage.py migrate

我们还要创建一个名为 admin 的初始用户,密码为 password123。我们稍后将在该示例中验证该用户。

python manage.py createsuperuser

等你建立好一个数据库和初始用户,并准备好开始。打开应用程序的目录,我们就要开始编码了...

Serializers

首先我们要定义一些序列化程序。我们创建一个名为 tutorial/quickstart/serializers.py的文件,来用作我们的数据表示。

from django.contrib.auth.models import User, Group
from rest_framework import serializers


class UserSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = User
        fields = ('url', 'username', 'email', 'groups')


class GroupSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Group
        fields = ('url', 'name')

请注意,在这个例子中我们用到了超链接关系,使用 HyperlinkedModelSerializer。你还可以使用主键和各种其他关系,但超链接是好的RESTful设计。

Views

好了,我们接下来再写一些视图。打开 tutorial/quickstart/views.py 文件开始写代码了。

from django.contrib.auth.models import User, Group
from rest_framework import viewsets
from tutorial.quickstart.serializers import UserSerializer, GroupSerializer


class UserViewSet(viewsets.ModelViewSet):
    """
    允许用户查看或编辑的API路径。
    """
    queryset = User.objects.all().order_by('-date_joined')
    serializer_class = UserSerializer


class GroupViewSet(viewsets.ModelViewSet):
    """
    允许组查看或编辑的API路径。
    """
    queryset = Group.objects.all()
    serializer_class = GroupSerializer

不再写多个视图,我们将所有常见行为分组写到叫 ViewSets 的类中。

如果我们需要,我们可以轻松地将这些细节分解为单个视图,但是使用viewsets可以使视图逻辑组织良好,并且非常简洁。

URLs

好的,现在我们在tutorial/urls.py中开始写连接API的URLs。

from django.conf.urls import url, include
from rest_framework import routers
from tutorial.quickstart import views

router = routers.DefaultRouter()
router.register(r'users', views.UserViewSet)
router.register(r'groups', views.GroupViewSet)

# 使用自动URL路由连接我们的API。
# 另外,我们还包括支持浏览器浏览API的登录URL。
urlpatterns = [
    url(r'^', include(router.urls)),
    url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]

因为我们使用的是viewsets而不是views,所以我们可以通过简单地使用路由器类注册视图来自动生成API的URL conf。

再次,如果我们需要对API URL进行更多的控制,我们可以简单地将其拉出来使用常规基于类的视图,并明确地编写URL conf。

最后,我们将包括用于支持浏览器浏览的API的默认登录和注销视图。这是可选的,但如果您的API需要身份验证,并且你想要使用支持浏览器浏览的API,那么它们很有用。

Settings

我们也想设置一些全局设置。我们想打开分页,我们希望我们的API只能由管理员使用。设置模块都在 tutorial/settings.py 中。

INSTALLED_APPS = (
    ...
    'rest_framework',
)

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.IsAdminUser',
    ],
    'PAGE_SIZE': 10
}

好了,我们完成了。


测试我们的API

我们现在可以测试我们构建的API。我们从命令行启动服务器。

python manage.py runserver

我们现在可以从命令行访问我们的API,使用诸如 curl ...

bash: curl -H 'Accept: application/json; indent=4' -u admin:password123 http://127.0.0.1:8000/users/
{
    "count": 2,
    "next": null,
    "previous": null,
    "results": [
        {
            "email": "[email protected]",
            "groups": [],
            "url": "http://127.0.0.1:8000/users/1/",
            "username": "admin"
        },
        {
            "email": "[email protected]",
            "groups": [                ],
            "url": "http://127.0.0.1:8000/users/2/",
            "username": "tom"
        }
    ]
}

或者使用 httpie,命令行工具...

bash: http -a admin:password123 http://127.0.0.1:8000/users/

HTTP/1.1 200 OK
...
{
    "count": 2,
    "next": null,
    "previous": null,
    "results": [
        {
            "email": "[email protected]",
            "groups": [],
            "url": "http://localhost:8000/users/1/",
            "username": "paul"
        },
        {
            "email": "[email protected]",
            "groups": [                ],
            "url": "http://127.0.0.1:8000/users/2/",
            "username": "tom"
        }
    ]
}

或直接通过浏览器,转到URL http://127.0.0.1:8000/users/...

Quick start image

如果您正在使用浏览器,请确保使用右上角进行登录。

非常棒!就是这么简单!

标签:api,py,REST,framework,API,url,我们,tutorial
From: https://www.cnblogs.com/weifeng1463/p/17385473.html

相关文章

  • php获取1688阿里巴巴关键字搜索新品数据API接口、获取上新关键词推荐、获取宝贝详情数
    ​ php的主要优势以及特点: 便于学习和使用:PHP是一门非常容易学习和使用的语言,其语法和结构都非常简单。具有广泛的应用范围:PHP可以用于开发各种类型的Web应用,如博客系统、内容管理系统、电子商务网站、社交网络等。巨大的社区支持:有一个庞大的PHP社区,提供了大量的......
  • fastapi篇(三)
    pydantic在之前python进阶主题文章中,针对这个三方模块有过简单的介绍,主要用于数据校验,在fastapi中,正式发挥了他这一长处frompydanticimportBaseModel,ValidationErrorclassCreateRequest(BaseModel):name:strage:intmotto:[email protected]("/dict")......
  • fastapi篇(二)
    尝试创建一个新的web服务1、接口展示importuvicornfromfastapiimportFastAPIfromfastapi.staticfilesimportStaticFilesapp=FastAPI()app.mount('/static',StaticFiles(directory='static'))@app.get("/dict")defget_dict():retur......
  • 《Linux高性能服务器编程》学习记录(二)linux网络编程基础API
    Linux网络API主要有三种:socket地址API。socket最开始的含义是一个IP地址和端口对(ip,port)。它唯一地表示了使用TCP通信的一端,称其为socket地址。socket基础API。socket的主要API都定义在sys/socket.h头文件中,包括创建socket、命名socket、监听socket、接受连接、发起连接、读写......
  • 1688阿里巴巴中国站图片识别商品API接口、搜图链接、收藏加购接口
    ​API(ApplicationProgrammingInterface)是现代移动应用程序开发和互联网服务有机结合的产物。API的应用使得应用程序之间的通信变得更加轻松、快捷,尤其对于业务复杂而庞大的企业系统,API让开发者能够从中提取必要的功能进行二次开发,有效地加快了应用程序开发的速度。接下来小编......
  • 使用Openapi Generator生成TS相关代码
    OpenapiGenerator是SwaggerCodegen的分支,但功能更加强大1.安装JDK【略】2.下载jar包wgethttps://repo1.maven.org/maven2/org/openapitools/openapi-generator-cli/6.5.0/openapi-generator-cli-6.5.0.jar-Oopenapi-generator-cli.jar或者Invoke-WebRequest-OutFileo......
  • Go源码阅读——github.com/medcl/esm —— esapi.go
    esm(AnElasticsearchMigrationTool)—— esapi.go https://github.com/medcl/esmrelease:8.7.1通过阅读好的源代码,细致思考,理性分析并借鉴优秀实践经验,提高zuoyang的编程水平,所谓"他山之石,可以攻玉" 该是如此吧。 /*Copyright2016Medcl(mATmedcl.net)Licen......
  • API文档工具
    SpringBoot实战电商项目mall(50k+star)地址:https://github.com/macrozheng/mallSwaggerSwagger是一款非常流行的API文档工具,它能帮助你简化API文档的开发,极大提高开发效率,之前在mall项目中就是使用的它。  我们一般将Swagger和SpringBoot结合使用,使用的是Springfox给我们提......
  • Docker CLI docker compose restart常用命令
    Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化。Docker是内核虚拟化,不使用Hypervisor是不完全虚拟化,依赖内核的特性实现资源隔离。本文主要介绍DockerCLI中d......
  • ES6字符串API
    ES6字符串API以下均为字符串的实例(原型)方法includes判断字符串中是否包含指定的子字符串startsWith判断字符串中是否以指定的字符串开始endsWith判断字符串中是否以指定的字符串结尾repeat将字符串重复指定的次数,然后返回一个新字符串。consttext="成哥是......