Django REST framework【学习内容】

快速入门

我们将创建一个简单的允许管理员用户查看和编辑系统中的用户和组的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 serializersclass UserSerializer(serializers.HyperlinkedModelSerializer):class Meta:model = Userfields = ('url', 'username', 'email', 'groups')class GroupSerializer(serializers.HyperlinkedModelSerializer):class Meta:model = Groupfields = ('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, GroupSerializerclass UserViewSet(viewsets.ModelViewSet):"""允许用户查看或编辑的API路径。"""queryset = User.objects.all().order_by('-date_joined')serializer_class = UserSerializerclass 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 viewsrouter = 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": "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"}]
}

或者使用 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": "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"}]
}

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

 

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/456259.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DotNetCore跨平台~发布脚本PowerShell的设计

回到目录 这几天对PS情有独忠,被它的强大功能所希引,它可以快速部署,快速发布,将一些连带的动作一次的完成,挺方便,类似于早期的bat文件,也像linux平台的bash脚本,但功能上&#xff…

解决: 'Cannot call `.is_valid()` as no `data=` keyword argument was ' AssertionError: Cannot call `

#注册 def add_person(request):p_name request.POST.get("p_name")p_password request.POST.get("p_password")person_data {"p_name": p_name,"p_password": p_password,}print(person_data)serializer PersonSerializer(person…

软件与程序

一、Java的起源 最初是为家用电器设计的,因为其特点适合于internet, 于是通过internet成为一种计算语言,一个平台,一个网络计算的架构。 二、Java平台分类 ①JavaSE适用于普通PC及笔记本电脑,为其他JAVA程序的开发和运…

Django使用n内置模块发送HTML格式的邮件

def send(request):# subject "小伙子很帅"# message "不禁夸啊"# send_mail(subject,message,"18332191389163.com",["18332191389163.com"])# return HttpResponse("ok")from django.core.mail import EmailMultiAltern…

EDM营销之如何使邮件列表更加有效

营销转化往往是营销人员专攻的必修课,大数据时代,只有真实有效的活跃用户数据,才能进一步促进转化。但仍然有想走捷径的企业会选择通过购买来获取用户数据,不仅数据质量不高,还会降低自身信誉等级。本次Focussend从购买…

spring用的很开心的标签(随时增加)

1Scheduled定时任务标签,cron用表达式,或者其他几种方式,方便不能说。使用再方法智商,不能设置范围域。 2PropertySource定义在整个class文件上,整个class中可以直接用表达式获取properties的内容。 3Value 定义在变量…

Flask-DebugToolbar的配置

该扩展为 Flask 应用程序添加了一个包含有用的调试信息的工具栏。 安装 简单地使用 pip 来安装: $ pip install flask-debugtoolbar用法 设置调试工具栏是简单的: from flask import Flask from flask_debugtoolbar import DebugToolbarExtensionapp Flask(__name__)# the…

微信第三方登录

微信第三方登录: 公众平台以access_token为接口调用凭据,来调用接口,所有接口的调用需要先获取access_token; 网页授权获取用户基本信息:通过该接口,可以获取用户的基本信息(获取用户的OpenID是…

MVC 中Simditor上传本地图片

1.引用样式和js文件 <link href"~/Content/scripts/plugins/simditor/css/simditor.css" rel"stylesheet" /><script src"~/Content/scripts/plugins/simditor/js/simditor.js"></script> 2.初始化Simditor var editor null;…

在pycharm中自定义模板代码,快速输出固定代码块

pycharm中有时会经常输出固定一段代码,为避免每次重复输入,可以自定义一段模板代码,请看以下图教程: 1. 点击 file 里面的 setting 2. 在搜索框输入live,就会显示出Live Templates, 点击后边的加号, 点击 Live Template 3. 选择设置的语言, 点击下图的Define, 设置要设置…

优质手机APP开发公司的特点

最近自媒体平台封号特严重&#xff0c;获得上亿投资的大号都被封了&#xff0c;或许做自己的APP会是一个好选择。想在众多的app中脱颖而出、希望手机APP获得成功&#xff0c;则必须聘请专业手机APP开发公司。您必须明智地选择公司&#xff0c;因为您的业务的成败取决于您的选择…

Django中的认证与权限 源码剖析

rest_framework/request.py中部分认证和权限代码 def _authenticate(self):"""Attempt to authenticate the request using each authentication instancein turn."""for authenticator in self.authenticators:try:user_auth_tuple authentica…

IQueryable和IEnumerable区别

IQueryable 和IEnumerable总结 1&#xff0c;IEnumerable<T> result (from t in context.Table order by t.Id select c).AsEnumerable().Take(3) 如果返回的是IEnumerable<T>类型的是预先把数据都加载在内存中在取出前三条数据 2&#xff0c;IQueryable<T&g…

xz压缩和解压缩

xz和gzip&#xff0c; bzip2用法是一样的。默认系统是没有安装这个压缩工具的&#xff0c;安装命令为&#xff1a;yum install -y xz语法&#xff1a;xz [-dz] filename-d&#xff1a;解压缩-z&#xff1a;压缩压缩时&#xff0c;可以加“-z”也可以不加&#xff0c;都可以压缩…

celery 学习笔记定时任务和异步任务

1、Celery加入异步和定时任务 Celery除了可以异步执行任务之外&#xff0c;还可以定时执行任务。在实例代码的基础上写个测试方法&#xff1a; import datetime import timefrom celery import shared_task from celery.schedules import crontab from celery.task import pe…

FBV(function base views) 顾名思义基于函数的视图类 CBV(class base views)基于类的视图类

一. 概念 FBV&#xff08;function base views&#xff09; 顾名思义基于函数的视图类 CBV&#xff08;class base views&#xff09;基于类的视图类 至于区别呢? 我觉得只是写法上的不一样, 实现的结果都是一样的, 我比较喜欢用CBV模式, 因为在Django中内部帮我做了请求方式…

rpm查询

rpm -q 的用法&#xff1a;1、 rpm -qa 可以查看所有已经安装过的rpm包2、rpm -qf 文件名绝对路径&#xff0c;可以查看该文件由哪个包安装的3、 rpm -ql 包名&#xff0c;可以查看该包安装哪些文件4、 rpm -qi 包名&#xff0c;可以查看该包的详细信息查询一个包是否安装命令&…

IntelliJ idea学习资源

工作需要, 最近得从Eclipse转战到Idea, 找了些不错的学习资料: 1, 从eclipse上迁移过来的用户说明: https://www.jetbrains.com/help/idea/2016.3/eclipse.html 2, 极客学院的idea使用入门教程: http://wiki.jikexueyuan.com/project/intellij-idea-tutorial/project-compositi…

linux下的安装:openssl

openssl简介 openssl是一个功能丰富且自包含的开源安全工具箱。它提供的主要功能有&#xff1a;SSL协议实现(包括SSLv2、SSLv3和TLSv1)、大量软算法(对称/非对称/摘要)、大数运算、非对称算法密钥生成、ASN.1编解码库、证书请求(PKCS10)编解码、数字证书编解码、CRL编解码、OC…

使用WinIO库实现保护模式下的IO和内存读写

问题已解决&#xff1a; 原因是函数的调用方式与WinIO中不一致&#xff0c;使用的时候漏掉了__stdcall。 函数原定义为&#xff1a; 在实际的GPIO读写中遇到以下问题&#xff1a; SetPortVal可正常写入&#xff0c;但是GetPortVal无法读取&#xff0c;程序崩溃&#xff0c;问题…