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!'})

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值