前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Django REST framework初次使用

Django REST framework初次使用

作者头像
用户4945346
发布2020-06-16 10:15:49
7170
发布2020-06-16 10:15:49
举报
文章被收录于专栏:pythonista的日常

我们将使用 django-rest 创建一个简单的API,以允许管理员用户查看和编辑系统中的user和group。

创建一个项目

创建一个名为tutorial的Django项目,然后启动一个名为quickstart的新应用程序,在你的电脑找到一个合适的位置执行这些命令。

代码语言:javascript
复制
mkdir tutorial
cd tutorial

# Create a virtual environment to isolate our package dependencies locally
python3 -m venv env
source env/bin/activate  # On Windows use `env\Scripts\activate`

# Install Django and Django REST framework into the virtual environment
pip install django
pip install djangorestframework

# Set up a new project with a single application
django-admin startproject tutorial .  # Note the trailing '.' character
cd tutorial
django-admin startapp quickstart
cd ..

项目目录结构是这样的

代码语言:javascript
复制
$ pwd
<some path>/tutorial
$ find .
.
./manage.py
./tutorial
./tutorial/__init__.py
./tutorial/quickstart
./tutorial/quickstart/__init__.py
./tutorial/quickstart/admin.py
./tutorial/quickstart/apps.py
./tutorial/quickstart/migrations
./tutorial/quickstart/migrations/__init__.py
./tutorial/quickstart/models.py
./tutorial/quickstart/tests.py
./tutorial/quickstart/views.py
./tutorial/settings.py
./tutorial/urls.py
./tutorial/wsgi.py

应用程序是在项目目录中创建的,这可能看起来很不寻常。使用项目的名称空间可以避免与外部模块的名称冲突(这超出了快速入门的范围)。

现在先同步你的数据库:

代码语言:javascript
复制
python manage.py migrate

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

代码语言:javascript
复制
python manage.py createsuperuser --email admin@example.com --username admin

一旦你建立了一个数据库,并创建了初始用户,准备开始,打开应用程序的目录。

Serializers

首先,我们将定义一些序列化器。让我们创建一个名为tutorial/quickstart/serializer .py的新模块,用于数据表示。serializers主要是验证前端传过来的数据是否正确,符合后端接口api接口的要求。开发中,不要相信前端传过来的任何数值,都要做字段的类型和是否合法校验。

代码语言:javascript
复制
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,开始输入。

代码语言:javascript
复制
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 endpoint that allows users to be viewed or edited.
    """
    queryset = User.objects.all().order_by('-date_joined')
    serializer_class = UserSerializer


class GroupViewSet(viewsets.ModelViewSet):
    """
    API endpoint that allows groups to be viewed or edited.
    """
    queryset = Group.objects.all()
    serializer_class = GroupSerializer

我们不是编写多个视图,而是将所有常见的行为分组到称为viewset的类中。

如果需要的话,我们可以很容易地将它们分解成单独的视图,但是使用viewset可以使视图逻辑组织良好,并且非常简洁。

Urls

下面,我们来连接API url。在tutorial/urls.py

代码语言:javascript
复制
from django.urls import include, path
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)

# Wire up our API using automatic URL routing.
# Additionally, we include login URLs for the browsable API.
urlpatterns = [
    path('', include(router.urls)),
    path('api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]

因为我们使用的是viewset而不是视图,所以我们可以为我们的API自动生成URL conf,只需将viewset注册到router类即可。

同样,如果我们需要对API URL有更多的控制,我们可以简单地使用常规的基于类的视图,并显式地编写URL conf。

最后,我们在browsable API中包含了默认的login和logout视图。这是可选的,但是如果您的API需要身份验证,并且希望使用browsable API,那么这是非常有用的。

Pagination

分页允许您控制每个页面返回多少对象。要启用它,请将以下行添加到tutorial/settings.py中

代码语言:javascript
复制
REST_FRAMEWORK = {
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
    'PAGE_SIZE': 10
}

Settings

在INSTALLED_APPS中添加'rest_framework'。设置模块将在tutorial/settings.py中

代码语言:javascript
复制
INSTALLED_APPS = [
    ...
    'rest_framework',]

到这里,我们的接口代码部分就编写完成了,我们可以测试写的接口是否符合前端要求了。

代码语言:javascript
复制
python manage.py runserver

使用浏览器访问 【http://127.0.0.1:8000/users/】 ,用户名和密码是你之前创建的 admin password123 。

看到下面这个效果:

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-12-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 pythonista的日常 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档