在上篇文章中,我们讲解了restful api的主要概念,让大家有初步的了解。这一篇中,我们将通过python的Django框架,来学习开发restful 架构的接口。

一. 开发环境

开发语言:Python 3.6

IDE :Pycharm

框架:Django 2.2.12

测试工具:Postman

二.开发准备

django开发restful api有两种方式,一种基于视图函数,另一种为类视图的方式。在使用上更加推荐类视图的方式,这样可以使代码层次更加简洁明了。

首先,我们先在pycharm创建一个django的项目,命名为myapi。

运行下面命令,生成新的app,名称为sys_manage,用于测试restful api的功能。运行完成后,可看到新生成的app。

python manage.py startapp sys_manage

在setting文件的INSTALLED_APPS中,增加该app名称

修改sys_manage/models.py文件,增加UserInfo模型,该表用于存储测试的对象信息

运行下面名称,生成对应的数据库表结构

python manage.py makemigrations sys_manage

python manage.py migrate sys_manage

到此,我们的准备工作完成,可以开始进行restful api的开发。

三. restful api开发

上篇有讲到,restful 的每个url代表一个资源,这里由于我们是本地操作,所以web域名用django默认的http://127.0.0.1:8000,完整的url为http://127.0.0.1:8000/api/users ,用来表示用户资源,通过对该url执行http请求(GET、POST、PUT和DELETE),验证我们的restful 功能。

首先,我们在sys_manage/views文件中,创建对应的类视图,名称为User

from django.views.generic import View

from sys_manage.models import UserInfo

from django.views.decorators.csrf import csrf_exempt

from django.http import JsonResponse

class User(View):

pass

在msapi/urls.py文件中,增加对该类视图的路由

from django.contrib import admin

from django.urls import path

from sys_manage import views

urlpatterns = [

path('api/users/',views.User.as_view()),

path('api/users/',views.User.as_view()),

]

GET请求

接下来,我们先来写一个对应get请求方法,在get请求包含获取所有用户信息与获取指定用户信息两种,分别对应的url如下

htttp://127.0.0.1:8000/api/users # 获取所有用户信息

http://127.0.0.1:8000/api/users/id # 获取指定ID的用户信息

我们会在函数中判断是否传了id值以及查询条件,来返回对应的数据,代码如下:

class User(View):

def get(self, request,id=0):

search_dict={}

#获取GET传值参数

name=request.GET.get('name')

age=request.GET.get('age')

department=request.GET.get('dep')

#如果存在参数,则添加到搜索条件

if id:

search_dict['id']=id

if name:

search_dict['name']=name

if age:

search_dict['age']=age

if department:

search_dict['department']=department

#根据搜索条件查询结果

users=UserInfo.objects.filter(**search_dict).all()

userinfo=[]

for u in users:

udata={

'id':u.id,

'name':u.name,

'age':u.age,

'departemnt':u.department

}

userinfo.append(udata)

#返回用户信息列表

return JsonResponse({'code':0,'message':'Success!','data':userinfo})

由于数据库目前没有数据,我们可以先在数据库插入几条数据,然后启动项目,通过postman测试get方法

也可以根据id号,获取单个用户信息,如下:

或者,通过参数条件查询

POST请求

下面,我们再写一个处理POST请求的代码,用于生成用户对象,代码如下:

def post(self, request):

data=json.loads(request.body)

name=data.get('name')

age=data.get('age')

departemnt=data.get('dep')

udata={

'name':name,

'age':age,

'department':departemnt

}

user=UserInfo(**udata)

user.save()

return JsonResponse({'code':0,'message':'Success!'})

在POST请求中,会遇到跨域的问题,可以加一个dispatch函数,否则测试时会有403禁止访问的报错。

@csrf_exempt

def dispatch(self,*args, **kwargs):

return super(User,self).dispatch(*args,**kwargs)

我们测试下POST请求,新建一个用户对象,名字为Jim,请求返回成功信息。

再通过GET方法,看一下新用户是否已创建。在标红处可以看到,用户已经创建完成。

除了GET和POST外,还有PUT和DELETE方法,代表更新信息与删除,代码如下 。

大家可以根据代码,自己测试一下。

def put(self, request,id):

update_dict={}

name=request.GET.get('name')

age=request.GET.get('age')

department=request.GET.get('dep')

if name:

update_dict['name']=name

if age:

update_dict['age']=age

if department:

update_dict['department']=department

UserInfo.objects.filter(id=id).update(**update_dict)

return JsonResponse({'code':0,'message':'Success!'})

def delete(self, request,id):

UserInfo.objects.filter(id=id).delete()

return JsonResponse({'code':0,'message':'Success!'})

python django开发api_基于Django框架开发Restful api相关推荐

  1. 基于JFinal框架开发的企业办公系统-JFinalOA v1.1源码

    简介: JFinalOA 是基于 JFinal 框架开发的企业办公系统. 使用框架介绍: JFinal 4.6+enjoy模版引擎 Shiro控制权限 flowable流程引擎 BootStrap M ...

  2. 基于WADE框架开发流程

    基于WADE框架开发流程 步骤一:创建导航栏按钮 在Sidebar.html中,按需求增加下列代码: <li class="open hover workModel"> ...

  3. php源码 拼车网顺风车_基于ThinkPHP框架开发的在线微信拼车系统完整PHP源码+支付微信支付...

    源码介绍 基于ThinkPHP框架开发的在线微信拼车系统主要是基于微信的在线拼车系统,也是一款不错的微信号管理系统,该微信拼车系统主要是基于ThinkPHP3.2.3框架开发,主要功能有发布租车信息. ...

  4. 微信会员php源码,基于ThinkPHP框架开发的在线微信拼车系统完整PHP源码-深蓝源码会员专享...

    源码介绍 基于ThinkPHP框架开发的在线微信拼车系统主要是/基于微信的在线拼车系统,也是/一款不错的微信号管理系统,该微信拼车系统主要是/基于ThinkPHP3.2.3框架开发,主要功能有发布租车 ...

  5. 基于springboot框架开发的作业提交与批改系统

    此系统是基于springboot框架开发的作业提交与批改系统,系统项目是maven项目,项目层次分离,易于二次开发和学习, 系统功能 分为教师,学生两类用户,每一角色具有不同的功能权限. 教师功能权限 ...

  6. 【代码审计-JAVA】基于javaweb框架开发的

    前言: 介绍: 博主:网络安全领域狂热爱好者(承诺在CSDN永久无偿分享文章). 殊荣:CSDN网络安全领域优质创作者,2022年双十一业务安全保卫战-某厂第一名,某厂特邀数字业务安全研究员,edus ...

  7. 基于SSM框架开发的图书管理系统

    基于SSM框架开发的图书管理系统 项目需求 数据库设计 图书管理数据库代码 建立一个普通的JavaWeb项目 首先创建动态web项目 导入spring+MyBatis+SpringMVC的jar包文件 ...

  8. 基于ThinkPHP框架开发的漂亮的家装修公司网站PHP源码

    源码介绍 基于ThinkPHP框架开发的仿生活家装修公司网站是一款采用ThinkPHP3.2.3内核开发的一款装饰公司网站PHP源码,整个界面主要仿照生活家装饰公司的风格,网站界面大气,直接安装使用即 ...

  9. CH55X 基于Arduino框架开发程序上传相关注意事项

    CH55X 基于Arduino框架开发程序上传相关注意事项

最新文章

  1. Percona XtraBackup备份到恢复记录
  2. R语言可视化包ggplot2绘制排序条形图实战:按照分类因子排序、按照数值排序
  3. Centos 7下mysql的安装与配置
  4. linux find命令中-print0和xargs中-0的用法
  5. python002 一 eg: Python 入门技巧__环境搭建__git使用、git本地操作、 自建gitlab服务器
  6. 【Matlab 图像】同时显示两个视频
  7. 介绍Windows Azure移动服务:用于您连接的客户端应用程序的后端
  8. security 底层原理_spring security 实现remeber me(免登陆功能)的原理
  9. c++ double 只输出五位_C/C++编程笔记:C语言入门知识点(一),请收藏C语言最全笔记...
  10. androidpn php,服务器推送消息到Android终端方法
  11. 时间序列模型之——prophet
  12. 二维数组各行求和_JS数组reduce()方法详解及高级技巧
  13. HTML网页设计结课作业——11张精美网页 html+css+javascript+bootstarp
  14. aect17定义_美AECT日前发布新的教育技术定义
  15. sqoop import 数据同步到hive的用法
  16. 【百度地图】折线图平面图
  17. 水利水电课程指导之建筑制图基础_第三章
  18. 程序员必知,招聘黑话大全!
  19. 初学Bootstrap,制作响应式布局
  20. 177本名著浓缩成了177句话!经典收藏!太有道理了!

热门文章

  1. quartus仿真18:仿真简单D触发器和JK触发器输出的波形
  2. AD放置过孔按TAB键使过孔大小为设置值0.6/0.3
  3. 五分钟快速过完Verilog HDL基本概念(2)
  4. 201521123106《java程序设计》第三周学习总结
  5. iOS 浅谈:深.浅拷贝与copy.strong
  6. 电影'社交网络'获金球奖最佳影片,最佳编剧,最佳导演,最佳配乐奖
  7. 编程之美——3.1字符串移位包含问题
  8. JQuery操作cookie插件
  9. 发一个招聘软件开发人员的帖子
  10. [转载] Spring的数据库操作---- Spring框架对JDBC的整合---- spring集成jdbc概述