python django开发api_基于Django框架开发Restful api
在上篇文章中,我们讲解了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相关推荐
- 基于JFinal框架开发的企业办公系统-JFinalOA v1.1源码
简介: JFinalOA 是基于 JFinal 框架开发的企业办公系统. 使用框架介绍: JFinal 4.6+enjoy模版引擎 Shiro控制权限 flowable流程引擎 BootStrap M ...
- 基于WADE框架开发流程
基于WADE框架开发流程 步骤一:创建导航栏按钮 在Sidebar.html中,按需求增加下列代码: <li class="open hover workModel"> ...
- php源码 拼车网顺风车_基于ThinkPHP框架开发的在线微信拼车系统完整PHP源码+支付微信支付...
源码介绍 基于ThinkPHP框架开发的在线微信拼车系统主要是基于微信的在线拼车系统,也是一款不错的微信号管理系统,该微信拼车系统主要是基于ThinkPHP3.2.3框架开发,主要功能有发布租车信息. ...
- 微信会员php源码,基于ThinkPHP框架开发的在线微信拼车系统完整PHP源码-深蓝源码会员专享...
源码介绍 基于ThinkPHP框架开发的在线微信拼车系统主要是/基于微信的在线拼车系统,也是/一款不错的微信号管理系统,该微信拼车系统主要是/基于ThinkPHP3.2.3框架开发,主要功能有发布租车 ...
- 基于springboot框架开发的作业提交与批改系统
此系统是基于springboot框架开发的作业提交与批改系统,系统项目是maven项目,项目层次分离,易于二次开发和学习, 系统功能 分为教师,学生两类用户,每一角色具有不同的功能权限. 教师功能权限 ...
- 【代码审计-JAVA】基于javaweb框架开发的
前言: 介绍: 博主:网络安全领域狂热爱好者(承诺在CSDN永久无偿分享文章). 殊荣:CSDN网络安全领域优质创作者,2022年双十一业务安全保卫战-某厂第一名,某厂特邀数字业务安全研究员,edus ...
- 基于SSM框架开发的图书管理系统
基于SSM框架开发的图书管理系统 项目需求 数据库设计 图书管理数据库代码 建立一个普通的JavaWeb项目 首先创建动态web项目 导入spring+MyBatis+SpringMVC的jar包文件 ...
- 基于ThinkPHP框架开发的漂亮的家装修公司网站PHP源码
源码介绍 基于ThinkPHP框架开发的仿生活家装修公司网站是一款采用ThinkPHP3.2.3内核开发的一款装饰公司网站PHP源码,整个界面主要仿照生活家装饰公司的风格,网站界面大气,直接安装使用即 ...
- CH55X 基于Arduino框架开发程序上传相关注意事项
CH55X 基于Arduino框架开发程序上传相关注意事项
最新文章
- Percona XtraBackup备份到恢复记录
- R语言可视化包ggplot2绘制排序条形图实战:按照分类因子排序、按照数值排序
- Centos 7下mysql的安装与配置
- linux find命令中-print0和xargs中-0的用法
- python002 一 eg: Python 入门技巧__环境搭建__git使用、git本地操作、 自建gitlab服务器
- 【Matlab 图像】同时显示两个视频
- 介绍Windows Azure移动服务:用于您连接的客户端应用程序的后端
- security 底层原理_spring security 实现remeber me(免登陆功能)的原理
- c++ double 只输出五位_C/C++编程笔记:C语言入门知识点(一),请收藏C语言最全笔记...
- androidpn php,服务器推送消息到Android终端方法
- 时间序列模型之——prophet
- 二维数组各行求和_JS数组reduce()方法详解及高级技巧
- HTML网页设计结课作业——11张精美网页 html+css+javascript+bootstarp
- aect17定义_美AECT日前发布新的教育技术定义
- sqoop import 数据同步到hive的用法
- 【百度地图】折线图平面图
- 水利水电课程指导之建筑制图基础_第三章
- 程序员必知,招聘黑话大全!
- 初学Bootstrap,制作响应式布局
- 177本名著浓缩成了177句话!经典收藏!太有道理了!
热门文章
- quartus仿真18:仿真简单D触发器和JK触发器输出的波形
- AD放置过孔按TAB键使过孔大小为设置值0.6/0.3
- 五分钟快速过完Verilog HDL基本概念(2)
- 201521123106《java程序设计》第三周学习总结
- iOS 浅谈:深.浅拷贝与copy.strong
- 电影'社交网络'获金球奖最佳影片,最佳编剧,最佳导演,最佳配乐奖
- 编程之美——3.1字符串移位包含问题
- JQuery操作cookie插件
- 发一个招聘软件开发人员的帖子
- [转载] Spring的数据库操作---- Spring框架对JDBC的整合---- spring集成jdbc概述