基于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/<int:id>',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!'})
- 基于 Django 框架 Web 开发
- 玩聚网目前也是基于Python的Django框架开发
- 基于Django框架的敏捷Web开发
- 玩聚网目前也是基于Python的Django框架开发
- 基于 Django 框架的敏捷 Web 开发
- 玩聚网目前也是基于Python的Django框架开发
- 基于dubbo的分布式项目框架搭建 开发工具idea (springboot+dubbo+zookeeper+redis+rabbitmq+基于Swagger2的restful api) --(三)
- 基于dubbo的分布式项目框架搭建 开发工具idea (springboot+dubbo+zookeeper+redis+rabbitmq+基于Swagger2的restful api) --(四)
- 基于Django框架的博客开发(一)
- 基于dubbo的分布式项目框架搭建 开发工具idea (springboot+dubbo+zookeeper+redis+rabbitmq+基于Swagger2的restful api) --(五)
- 基于 Django 框架的敏捷 Web 开发
- 新手开发基于Django框架的python web(二)
- 基于Django框架的博客开发(二)-搭建基本开发环境
- 基于dubbo的分布式项目框架搭建 开发工具idea (springboot+dubbo+zookeeper+redis+rabbitmq+基于Swagger2的restful api) --(二)
- 【day 17】python编程:从入门到实践学习笔记-基于Django框架的Web开发-设计样式和部署(一)
- Windows上通过virtualenv创建python 开发虚拟环境 并搭建框架django (python版本基于Anaconda3)
- 玩聚网目前也是基于Python的Django框架开发
- Python Web接口开发学习笔记(基于Django框架)(一)
- 基于dubbo的分布式项目框架搭建 开发工具idea (springboot+dubbo+zookeeper+redis+rabbitmq+基于Swagger2的restful api) --(一)
- 【Python】djangorestframework 基于django框架的接口开发