2024-10-03 03:11:02
导读:今天首席CTO笔记来给各位分享关于django怎么调用第三方接口的相关内容,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
如何在Django中使用第三方库DATABASES={
'default':{
'ENGINE':'django.db.backends.sqlite3',#Add'postgresql_psycopg2','mysql','sqlite3'or'oracle'.
'NAME':'demo.db',#Orpathtodatabasefileifusingsqlite3.
#Thefollowingsettingsarenotusedwithsqlite3:
'USER':'',
'PASSWORD':'',
'HOST':'',#Emptyforlocalhostthroughdomainsocketsor'127.0.0.1'forlocalhostthroughTCP.
'PORT':'',#Settoemptystringfordefault.
}
}
INSTALLED_APPS=(
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
#Uncommentthenextlinetoenabletheadmin:
#'django.contrib.admin',
#Uncommentthenextlinetoenableadmindocumentation:
#'django.contrib.admindocs',
'south',
'LearnSouth',
'books',
)
DjangoRESTframework框架之GET,POST,PUT,PATCH,DELETE等API请求接口设计
一、API接口功能需求:设计一些接口URL,让前端/客户请求这个URL去获取数据并显示,更改数据(增删改查),达到前后端分离的效果
二、设计逻辑:通过http协议请求方式GET、POST、PUT、PATCH、DELETE设计符合RESTful规范的api接口也就是URL
三、简易源码:
3.序列化serializers
#导入模型类和rest_framework序列化模块serializers
from.modelsimportArticle
fromrest_frameworkimportserializers
#定义序列化类,使用继承ModelSerializer方法
classArticleSerializer(serializers.ModelSerializer):
classMeta:
model=Article#指定序列化的模型类
fields='_all_'#选取序列化字段,此处可自行选取字段
4.视图函数views
fromdjango.httpimportHttpResponse
fromdjango.views.decorators.csrfimportcsrf_exempt
from.modelsimportArticle
from.serializersimportArticleSerializer
fromrest_framework.renderersimportJSONRenderer
fromrest_framework.parsersimportJSONParser
#调用csrf装饰器csrf_exempt模块,解决跨域访问问题
#JSONRenderer它将Python的dict转换为JSON返回给客户端
#JSONParser负责将请求接收的JSON数据转换为dict
#写法一
#在需要跨域的视图上调用装饰器@csrf_exempt
@csrf_exempt
defarticle_list(request):
ifrequest.method=='GET':
arts=Article.objects.all()#获取模型类数据
ser=ArticleSerializer(instance=arts,many=True)#序列化数据instance
#下一步用rest_framework方法里的JSONRenderer方法渲染数据
json_data=JSONRenderer().render(ser.data)
returnHttpResponse(json_data,content_type='application/json',status=200)
#写法二
classJSONResponse(HttpResponse):
def_init(self,data,**kwargs):
content=JSONRenderer().render(data)
kwargs['content_type']='application/json'
super(JSONResponse,self)._init(content,**kwargs)
#根据id进行增删改操作接口
@csrf_exempt
defarticle_detail(request,id):
try:
art=Article.objects.get(id=id)
exceptArticle.DoesNotExistase:
returnHttpResponse(status=404)
备注:
*写法二中定义JSONResponse类将返回的数据data与content_type返回类型做了封装
*API接口
GET/POST
GET/PUT/PATCH/DELETE
*Postman测试效果图
Python3.7配合Django2.0来调用钉钉(dingding)在线api实时监测员工考勤打卡情况新冠疫情期间,大多数公司为了避免交叉感染都或多或少的采用了远程办公的方式,这显然是一个明智的选择,基本上钉钉(dingding)作为一个远程办公平台来用的话,虽然差强人意,但是奈何市面上没有啥更好的选择,矬子里拔将军,也还是可以凑合用的,不过远程办公有个问题,就是每天需要检查员工的考勤,居家办公虽然灵活,但是大家究竟有没有办公,则是另外一回事,钉钉提供的解决方案就是考勤在线打卡功能,但是检查出勤钉钉在移动端就有点费劲,需要在钉钉app里点击至少5次,还不能实时刷新,pc端的钉钉oa系统做的更烂,还不如移动端来得方便,另外如果你在一家上千人的企业里,这家企业有大大小小几十个部门,你又非常倒霉的担任这家公司的人事主管,每天按部门来出员工考勤报表就不是一件容易事了,所以利用钉钉开放的接口,使用Django自己打造一套实时监控员工考勤的web平台是我们本次的目的。
项目背景是一家普通科技公司,大概有五个部门,每个部门100人左右
首先进入钉钉开放平台:open-dev.dingtalk.com
在企业内部开发中,选择小程序,新建一个小程序应用,这里其实也还有别的选择,比如h5微应用,主要是小程序兼容性更好一点。
填写应用的名称、简介、Logo等基本信息这些按下不表,按照要求填写即可,也不必非得填写真实信息,这里有个坑就是一定不要忘了配置安全域名或者ip,安全域名是当我们的检测平台上线的时候部署的域名,应用可以跟指定的域名进行网络通信,如果不配置的话,请求钉钉接口会报403错误。
另外还有一个坑,也就是钉钉默认开放的接口仅限于基础权限接口
如果需要考勤或者签到接口的话,还得单独点击申请,这就有点让人看不懂了,那么多接口,全都得靠用鼠标点击开通,不开通就用不了,这个用户体验真是让人非常酸爽,产品设计成这样,钉钉的pm难辞其咎。
OK,前置准备工作就已经就绪了,现在我们只要根据官方文档来写接口就可以了,选择服务端api文档:
钉钉考勤打卡的接口说明是这样的:
这里每个接口都需要一个access_token用来鉴权,这个token是用id和秘钥通过接口交换回来的,具体在应用详情里可以获取
这里我们封装成方法
搞定了token,还需要获取您的部门下所有员工的员工id,因为考勤接口参数只能接受员工id,而非部门id
最后请求考勤接口即可
完整的后台Django后台接口
这样,就可以愉快的通过线上平台来实时监测部门员工考勤了,效果是这样的:
django-restful:与前端vue接口对接category与vue接口对接
首先是需要把所有的category的内容取出来
由于前端vue展示category是分级的
一级二级三级这样展示的
所以我们需要把三个内容都拿出来
但是首先需要取出第一级然后第一级镶嵌了第二级,然后第二级镶嵌第三季,就跟上面goods中显示外键的category的内容一样
我们还是需要写serializer
这样就是一级镶嵌二级二级镶嵌三级
但是这里有一个问题不要搞错了这三个类的位置不能弄错了
因为一级是调用二级所以二级一定是先写好了的
所以二级一定在一级上面同理三级要在二级上面
然后就是view
在过滤中加上category_type=1这样就可以直接显示第一大类然后第一大类中有第二小类这样更有层次感如果直接一下子全部取出来就不好分辨了
同时我们还要处理取出某个单一的信息
所以我们继承了mixins.RetrieveModelMixin这个类,这是一个显示详情的类
例如显示某个动物园的某个动物那样
/zoos/id
这样的url
同样这样写了我们就直接只配置category的url就够了
就不用考虑后面的id是否还需要配置一个url这些都不用考虑了,因为我们继承了viewset这个类
这些问题他都帮我们解决了
这样处理我们后端就能看见了
但是这样处理了前端对接时会发现无法显示
因为有一个跨域问题
这个问题前后端都可以独自解决这里学习的是后端,所以讲一下后端的做法
就是修改服务端
在github上搜索django-cors-headers就可以找到这个信息
同样里面介绍如何使用
安装
pipinstalldjango-cors-headers
然后settins中INSTALLED_APPS配置和settings中MIDDLEWARE配置
这里要注意MIDDLEWARE配置中
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
这两个必须放在
'django.middleware.csrf.CsrfViewMiddleware',
这个的前面不然会报错
同时还要配置
CORS_ORIGIN_ALLOW_ALL=True
允许跨域访问它默认是False
这样前端就可以正常显示了
为什么会产生跨域访问
因为vue中api配置的中我们调试数据不可能把所有的host都修改了有一些是线上数据我们调试的是本地的一部分数据所以要重新定一个localhost
修改部分host的链接
这样就导致了跨域本身使用的是一个线上host端口,但是数据中有一部分是请求的是本地host端口导致了跨域访问
django怎么使用网站提供的api借口webservice其实就是webapi,不过为了便于统一使用了通用的数据格式,比如xml。所以你完全可以自己使用一个第三方xml库来自己构建这样的环境,或者使用djangorestframework这样的第三方app来直接帮你快速开发
使用django开发一个比较简单的post接口先把前置条件说一下
1.首先搭建好django环境win+r打开命令提示符pipinstalldjango
3.然后创建一个自己的app
同样在命令提示符进入刚创建的工程所在路径输入pythonmanage.pystartappxxx(这个指你要创建的app名字),创新编辑器可以看到
4.正式开始开发一个post请求
首先设置好参数在seetings.py文件里如图修改
views.py
最后在templates文件夹下创建一个html文件简单地写一下前端
我这里直接贴自己写的login.html
code部分算是完成看一下效果
还可以进入fiddler查看验证,为了比较好查到我们先打开fiddler后输入用户名密码后fiddler上removeallsession
可以得到这么一条数据包
username,password的值也和我们输入的一致
到此完成一个简单的post请求开发
结语:以上就是首席CTO笔记为大家整理的关于django怎么调用第三方接口的全部内容了,感谢您花时间阅读本站内容,希望对您有所帮助,更多关于django怎么调用第三方接口的相关内容别忘了在本站进行查找喔。