您的位置:首页 > 编程语言 > Go语言

基于Django框架开发Restful api

2020-04-25 18:57 751 查看

在上篇文章中,我们讲解了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!'})
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐