【创建简单的API】

1. cmd.exe

>django-admin startproject django_rest
>cd django_rest
\django_rest>python3 manage.py startapp api

2. setting.py 加应用

# Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'api',
] …

# 在文件末尾添加
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': ('rest_framework.permissions.IsAdminUser',),
'PAGE_SIZE': 10
}

3. 数据库迁移

① models.py 拷贝

② guest工程__init__.py  拷贝

③ setting.py 的数据库配置

python3 manage.py makemigrations api

python3 manage.py migrate

4. 创建超级管理员账号

cmd.exe

\django_rest>python3 manage.py createsuperuser
Username (leave blank to use 'fnngj'): admin_rest
Email address: admin@mail.com
Password:admin123456
Password (again):admin123456
Superuser created successfully

5. 序列化

创建数据序列化, 创建.../api/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, 你可以使用主键或者其他关系, 但使用
HyperlinkedModelSerializer 是一个好的 RESTful 设计 6. 创建视图 .../api/views.py 7. URLs
打开.../django_rest/urls.py 文件, 添加路径的路由 8. 启动服务
...\django_rest>python3 manage.py runserver
Performing system checks...
System check identified no issues (0 silenced).
November 21, 2016 - 21:50:18
Django version 1.10.3, using settings 'django_rest.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
通过浏览器打开: http://127.0.0.1:8000/,
【添加接口】

1. 点击页面右上角“Log in” 登录系统, 账号为刚刚创建的超级管理员帐号登录 



点击: http://127.0.0.1:8000/groups/ 链接, 添加用户组。 图 13.4。 添加“test” 组和“developer” 组。
点击: http://127.0.0.1:8000/users/链接, 添加用户。 图 13.5。 添加用户“tom” 和“jack” 。
2. 练习写测试接口
test.py
import unittest
import requests class UserTest(unittest.TestCase):
'''用户查询测试''' def setUp(self):
self.base_url = 'http://127.0.0.1:8000/users' def test_user1(self):
'''test user 1'''
r = requests.get(self.base_url + '/1/',auth=('admin_rest','admin123456'))
result = r.json()
self.assertEqual(result['username'],'admin')
self.assertEqual(result['email'],'admin@mail.com') def test_user2(self):
'''test user 2'''
r = requests.get(self.base_url + '/2/',auth=('admin_rest','admin123456'))
result = r.json()
self.assertEqual(result['username'],'admin_rest')
self.assertEqual(result['email'],'admin_rest@mail.com') def test_user3(self):
r = requests.get(self.base_url + '/3/',auth=('admin_rest','admin123456'))
result = r.json()
self.assertEqual(result['username'],'jack')
self.assertEqual(result['email'],'jack@mail.com') class GroupsTest(unittest.TestCase):
'''用户组查询测试'''
def setUp(self):
self.base_url = 'http://127.0.0.1:8000/groups' def test_groups1(self):
r = requests.get(self.base_url + '/1/',auth=('admin_rest','admin123456'))
result = r.json()
self.assertEqual(result['name'],'test') def test_groups2(self):
r = requests.get(self.base_url + '/2/',auth=('admin_rest','admin123456'))
result = r.json()
self.assertEqual(result['name'],'developer') if __name__ == '__main__':
unittest.main() 3. models.py 复制 guest项目的
4. 数据迁移,参考上方对应的
5. 添加发布会数据序列化, 打开.../api/serializers.py 文件, 添加
……
from api.models import Event, Guest
……
class EventSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Event
fields = ('url','name','address','start_time','limit','status')
class GuestSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Guest
fields = ('url','realname','phone','email','sign','event')

6. 打开.../api/views.py 视图文件, 定义发布会视图类。
from api.serializers import EventSerializer,GuestSerializer
from api.models import Event,Guest # ViewSets define the view behavior.
class EventViewSet(viewsets.ModelViewSet):
'''
API endpoint that allows events to be viewd or edited.
'''
queryset = Event.objects.all()
serialize_class = EventSerializer class GuestViewSet(viewsets.ModelViewSet):
'''
API endpoint that allows guests to be viewed or edited
'''
queryset = Guest.objects.all()
serializer_class = GuestSerializer 7. 打开.../django_rest/urls.py 文件, 添加 URL 配置 ……
#Routers provide an easy way of automatically determining the URL conf.
……
router.register(r'event', views.EventViewSet)
router.register(r'guest', views.GuestViewSet)
…… 启动项目, 使用浏览器打开: http://127.0.0.1:8000/

【代码】
环境开户接口
api/serializers.py
from django.contrib.auth.models import User,Group
from rest_framework import serializers
from api.models import Event,Guest class UserSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = User
fields = ('url','username','email','groups') class GroupSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Group
fields = ('url','name') class GuestSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Event
fields = ('url','name','address','start_time','limit','status') class EventSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Guest
fields = ('url','realname','phone','email','sign','event')

url.py
from django.conf.urls import url,include
from django.contrib import admin
from rest_framework import routers
from api import views #Routers provide an easy way of automatically determining the URL conf.
router = routers.DefaultRouter()
router.register(r'users',views.UserViewSet)
router.register(r'groups',views.GroupViewSet) router.register(r'event',views.EventViewSet)
router.register(r'guest',views.GuestViewSet) # Wire up our API using automatic URL routing.
# Additionally,we include login URLs for the browsable API.
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^',include(router.urls)),
url(r'^api-auth/',include('rest_framework.urls',namespace='rest_framework')), ]
#【备注】因为我们使用的是 viewset, 所以我们可以使用 routers 类自动生成 URL conf
tests.py

import unittest
import requests class UserTest(unittest.TestCase):
'''用户查询测试''' def setUp(self):
self.base_url = 'http://127.0.0.1:8000/users' def test_user1(self):
'''test user 1'''
r = requests.get(self.base_url + '/1/',auth=('admin_rest','admin123456'))
result = r.json()
self.assertEqual(result['username'],'admin')
self.assertEqual(result['email'],'admin@mail.com') def test_user2(self):
'''test user 2'''
r = requests.get(self.base_url + '/2/',auth=('admin_rest','admin123456'))
result = r.json()
self.assertEqual(result['username'],'admin_rest')
self.assertEqual(result['email'],'admin_rest@mail.com') def test_user3(self):
r = requests.get(self.base_url + '/3/',auth=('admin_rest','admin123456'))
result = r.json()
self.assertEqual(result['username'],'jack')
self.assertEqual(result['email'],'jack@mail.com') class GroupsTest(unittest.TestCase):
'''用户组查询测试'''
def setUp(self):
self.base_url = 'http://127.0.0.1:8000/groups' def test_groups1(self):
r = requests.get(self.base_url + '/1/',auth=('admin_rest','admin123456'))
result = r.json()
self.assertEqual(result['name'],'test') def test_groups2(self):
r = requests.get(self.base_url + '/2/',auth=('admin_rest','admin123456'))
result = r.json()
self.assertEqual(result['name'],'developer') if __name__ == '__main__':
unittest.main()




 

【Django】Django-REST-Framework的更多相关文章

  1. 【笔记】Django的视图

    [笔记]Django的视图 Python Django  Django的View(视图) 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 响应 ...

  2. 【框架】Django入门学习笔记

    教程 Demo 教材2 教材3 [转] Django处理请求的工作机制 记住: 1.用manage.py runserver 启动Django服务器时就载入了在同一目录下的settings.py.该文 ...

  3. 【笔记】Django的ORM之多对多表的增和删

    [笔记]Django的ORM之多对多表的增和删 Django ORM 多对多  一 昨日补充:外键关联 外键在ORM中的关联方式: 与数据表相关的类都放到models.py文件中 class Book ...

  4. 【笔记】Django的ORM之删和改

    [笔记]Django的ORM之删和改 Django ORM 数据库  一 删除操作 1.视图层 <table border="1"> <thead> < ...

  5. 【笔记】Django基础(一)

    ---恢复内容开始--- [笔记]Django基础(一) oldboy Django  一 关于Python框架的本质 1. HTTP协议消息的格式: 请求(request) 请求方法 路径 HTTP ...

  6. 论文阅读(Xiang Bai——【TIP2014】A Unified Framework for Multi-Oriented Text Detection and Recognition)

    Xiang Bai--[TIP2014]A Unified Framework for Multi-Oriented Text Detection and Recognition 目录 作者和相关链接 ...

  7. 【1】Django概述

    道生一,一生二,二生三,三生万物 无名天地之始,有名万物之母 ——老子 python程序web项目开发,是非常重要的一部分,Python为基础的web项目开发的框架有很多,django无疑是最强大we ...

  8. 【转】Django中使用POST方法获取POST数据

    1.获取POST中表单键值数据 如果要在django的POST方法中获取表单数据,则在客户端使用JavaScript发送POST数据前,定义post请求头中的请求数据类型: xmlhttp.setRe ...

  9. 【解决方案】django初始化执行python manage.py migrate命令后,除default数据库之外的其他数据库中的表没有创建出来

    [问题原因]:django工程中存在多个应用,每个应用都指定了对应的数据库.执行python manage.py migrate命令时没有指定数据库,将只初始化默认的default数据库. [解决方案 ...

  10. 【python】-- Django Form

    Django  Form Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容(自定义样式) 一.F ...

随机推荐

  1. Android4.0 主线程不能访问网络异常解决办法

    从两个方面说下这个问题: 1. 不让访问网络的原因 2. 解决该问题的办法 不让访问网络的原因: 由于对于网络状况的不可预见性,很有可能在网络访问的时候造成阻塞,那么这样一来我们的主线程UI线程 就会 ...

  2. linux的错误码error

    在程序出错时,我们通过全局变量错误号errno和perror函数能够很快的定位到错误原因. Linux错误代码及其含义 C Name Value Description 含义Success 0 Suc ...

  3. Oracle12.2中新增的分区功能

    Oracle 12.2已经发布一段时间,公网上也可以下载试用.针对12.2,partitioning(分区)也有了不少增强. 自动列表分区 多字段列表分区 只读分区 分区维护时允许过滤 在线转换非分区 ...

  4. 每日linux命令学习-xargs命令

    xargs命令 xargs是给命令传递参数的一个过滤器,也是组合多个命令的一个工具.它把一个数据流分割为一些足够小的块,以方便过滤器和命令进行处理.通常情况下,xargs从管道或者stdin中读取数据 ...

  5. Spring/SpringMVC/MyBatis(持久层、业务层、控制层思路小结)

    准备工作: ## 7 导入省市区数据到数据库中 1. 从FTP下载SQL脚本文件 2. 把脚本文件移动到易于描述绝对路径的位置 3. 进入MySQL控制台 4. 使用`xxx_xxx`数据库 5. 运 ...

  6. linux下启动多个php,分别监听不同的端口。

    在工作中,我们可能会遇到,服务器集群的搭建. 这个时候,我们不可能,每一台服务器都是lnmp的环境,我们会把nmp分别放在不同的服务器上,不同的服务器负责不同的功能.比如我们下面要说的php 加入ng ...

  7. NGINX转发代理情况下,获取客户单真实IP

    编译时加上http_realip_module 模块 realip模块生效的前提是:直接连接nginx的ip是在set_real_ip_from中指定的. 原机配置: set_real_ip_from ...

  8. 2016 icpc ECfinal && codeforcesgym101194

    一不小心惨变旅游队,不过上海的风景不错 顺带找其他队交流一下集训经验...或许可以成为选拔和集训16级的依据 A.直接模3就可以了,2^(3*n)%7=1 C.Mr. Panda and Strips ...

  9. springmvc StringHttpMessageConverter 中文乱码的几种解决办法(亲测)

    昨天,将一个原来使用JSR 311作为restful实现的测试系统改成了使用spring mvc,最后测试的时候发现输出的json字符串为乱码,从日志可以看出使用的是StringHttpMessage ...

  10. 关于actor模型

    actor model是1973年就提出的一个分布式并发编程模型,在erlang语言中得到广泛支持和应用.目前Java中也出现了很多支持actor模型的库:akka.killim.jetlang等等, ...