Django REST Framework——2. DRF的安装和基本使用方法

在学习Django REST Framework(DRF)之前,你必须先学会django,本文不会对django相关的内容做太多解释。

一、DRF的基本使用方法

1.1 DRF的安装

  1. 使用pip安装Django REST Framework:

    pip install djangorestframework
    

    DRF依赖django框架,但pip会自动帮我们安装好django。

  2. 使用django-admin startproject 项目名称创建好项目后,向settings.py文件中的INSTALLED_APPS列表中,添加'rest_framework'

    INSTALLED_APPS = [
       	...
        'rest_framework'
    ]
    

1.2 DRF的简单使用

1.2.1 环境搭建

  1. 先创建目录:mkdir tutorial,切换到tutorial目录:cd tutorial
  2. 创建虚拟环境:python3 -m venv env
  3. 激活环境:source env/bin/activate(linux下),windows下:env\Scripts\activate
  4. 安装DRF:pip install djangorestframework
  5. 在当前目录下新建项目:django-admin startproject tutorial .,注意末尾的.
  6. 向settings.py文件中的INSTALLED_APPS列表中,添加'rest_framework'
  7. 新建django app:django-admin startapp quickstart
  8. 执行数据库迁移:python manage.py migrate
  9. 创建一个初始用户,用户名为admin或自定义:python manage.py createsuperuser

1.2.2 开始使用

这里只是简单体验一下流程,注意要编写哪些东西即可,看不懂的地方不用纠结。

  1. 创建普通模型类

    这里我们使用django自带的User和Group模型,不再自己写了。

  2. 创建序列化器

    先创建一个新的模块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']
    
  3. 编写视图
    from django.contrib.auth.models import User, Group
    from rest_framework import viewsets
    from rest_framework import permissions
    from quickstart.serializers import UserSerializer, GroupSerializer
    
    
    class UserViewSet(viewsets.ModelViewSet):
        """查看和编辑用户的API"""
        queryset = User.objects.all().order_by('-date_joined')
        serializer_class = UserSerializer
        permission_classes = [permissions.IsAuthenticated]
    
    
    class GroupViewSet(viewsets.ModelViewSet):
        """查看和编辑用户组的API"""
        queryset = Group.objects.all()
        serializer_class = GroupSerializer
        permission_classes = [permissions.IsAuthenticated]
    

    如果需要可以把上面的操作分解为多个单独的视图函数,但是使用上面这种视图集的形式,可以使代码逻辑更加清晰、简洁。

  4. 添加url

    将视图集注册到routers.DefaultRouter类的实例对象中,就能自动生成API的url配置,不需要像常规视图那样,一个个单独添加到urlpatterns中。

    当然,如果想对API的url进行更多的控制,就可以一个个单独添加。

    from django.urls import include, path
    from rest_framework import routers
    from quickstart import views
    
    router = routers.DefaultRouter()
    router.register(r'users', views.UserViewSet)
    router.register(r'groups', views.GroupViewSet)
    
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('', include(router.urls)),
        # 用于登录和注销的url及视图,这是可选的
        path('api-auth/', include('rest_framework.urls', namespace='rest_framework'))
    ]
    
  5. 分页(可选)

    分页用来控制每页返回的对象数量,要启用分页,请将以下内容添加到项目的settings.py中:

    REST_FRAMEWORK = {
        'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
        'PAGE_SIZE': 10
    }
    
  6. 设置

    参考安装教程中的方法,在settings.py中的INSTALLED_APPS列表中注册'rest_framework'

1.2.3 测试接口

运行django项目,打开http://127.0.0.1:8000/,就可以看到如下页面

在这里插入图片描述

点击users链接或者groups链接,就可以查看和编辑用户、用户组了。

也可以使用curl或者http访问API,admin是用户名,123456是密码:

# curl命令
curl -H 'Accept: application/json; indent=4' -u admin:123456 http://127.0.0.1:8000/users/

{
    "count": 2,
    "next": null,
    "previous": null,
    "results": [
        {
            "email": "admin@example.com",
            "groups": [],
            "url": "http://127.0.0.1:8000/users/1/",
            "username": "admin"
        },
        {
            "email": "tom@example.com",
            "groups": [],
            "url": "http://127.0.0.1:8000/users/2/",
            "username": "tom"
        }
    ]
}


# http命令
http -a admin:123456 http://127.0.0.1:8000/users/

HTTP/1.1 200 OK
...
{
    "count": 2,
    "next": null,
    "previous": null,
    "results": [
        {
            "email": "admin@example.com",
            "groups": [],
            "url": "http://localhost:8000/users/1/",
            "username": "paul"
        },
        {
            "email": "tom@example.com",
            "groups": [],
            "url": "http://127.0.0.1:8000/users/2/",
            "username": "tom"
        }
    ]
}
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

花_城

你的鼓励就是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值