python+django上传图片到微信

python+django上传图片到微信

此功能是先把网络图片上传到七牛云服务器,再获取图片路径,上传到微信。
上传微信需要公众号的token和cookie也就是说,需要有公众号登录来获取这两个值。
首先我这个代码是在项目中使用的,没有例子,太麻烦了。

  # 图片路径上传微信测试使用
  new_url = 'http://img.xunmang.com/144121axjRLKq6uAKQDWC8hMmfk3.jpg'
  # 公众号的token
  account_token = ''
  # 公众号的cookie
  account_cookie = ''

注意cookie需要进行解析,导入json,用json.loads(cookie)进行解析。(从网页拿的不需要解析,我这个是从数据库取出的格式不一样,所以需要解析)
例如:

 def request_header(self, cookie, token):
        cookies = ''
        # 解析cookie
        cookie = json.loads(cookie)
        for c in cookie:
            name = c.get('name', None)
            value = c.get('value', None)
            if (name and value) is None:
                continue
            cookies = cookies + str(c["name"]) + '=' + str(c["value"]) + ';'
        # 设置请求头
        # print('正在设置请求头')
        referer = f'https://mp.weixin.qq.com/cgi-bin/appmsg?t=media/appmsg_edit_v2&action=edit&isNew=1&type=10&lang=zh_CN&token=${token};'
        header = {
            "Content-Type": "application/x-www-form-urlencoded",
            'dateType': 'form-url-encoded',
            'Referer': referer,
            'cookie': cookies
        }
        # print('设置请求头完毕')
        return header

这里不进解析了cookie还设置了请求微信的request请求头,referer是必须的,里面就吧公众号的token带入就行了。在请求头再带入解析好的cookies其他都是固定写法,最后返回设置好的请求头。
接下来就直接请求微信接口就好了,这个上传方法是post请求

    def request_interface(self, new_url, token, header):
        timeout = (10, 20)  # 请求request过期时间
        # 请求微信上传接口
        url = f'https://mp.weixin.qq.com/cgi-bin/uploadimg2cdn?token={token}&lang=zh_CN'
        body = {
            'imgurl': new_url,
            't': 'ajax-editor-upload-img'
        }
        try:
            # print('上传中.........')
            res = requests.post(url, headers=header, data=body, timeout=timeout)
            data = res.json()
            # print('上传成功')
        except(RequestException,):
            raise exceptions.APIException('请求超时!')
        return data

把刚才设置好的图片路径,公众号的token,请求头,带入方法
这个timeout是请求过期时间,url就是微信上传图片的接口,因为是post请求所以会有body主体
使用requests库的post方法请求,把参数带入,requests.post(请求的接口, headers=请求头, data=参数主体, timeout=过期时间)
body中的’t’: 'ajax-editor-upload-img’是固定写法,请求完毕后返回的结果需要解析,直接吧返回结果转成json
进行返回就行了

   if 'url' in data.keys():
       # 向数据库添加新数据
       self.add_data(data['url'])

返回的结果被转成json后,就可以判断了,如果上传成功微信会返回给你新的url,这样就可以判断返回结果中的key包不包括url。如果包括就进行存值,如果不存在就不存。
不存在url就肯定是错误信息,就可以判断是否上传失败。

 # 判断微信错误
    def error_of_judgment(self, data):
  		info = ''
        # 微信返回来的错误信息
        if 'err_msg' in data.keys():
       			info = f'fail,{data['err_msg']}'
        # 微信返回错误代码
        if data['errcode'] != 0:
           info = f'fail,{data['errcode']}'
        return info

调用顺序肯定是先判断是否有错在进行判断是否成功,我这上传的图片是从服务器上拿下来的图片,而不是本地上传,因为微信这种上传接口有两个,一个是本地上传微信,另一个是网络图片上传微信,而我写的就是第二种,网络图片上传。
东西很简单,代码也很容易。这只是单纯的上传不存在任何逻辑。可以根据需求加入你的项目。

微信小程序是一种基于微信平台开发的应用程序,可以在微信中直接使用Python是一种高级编程语言,常用于Web开发、数据分析、人工智能等领域。MySQL是一种关系型数据库管理系统,常用于Web应用程序的数据存储。Django是一种基于Python的Web框架,可以快速开发高质量的Web应用程序。 如果你想使用Python、MySQL和Django来开发微信小程序,可以按照以下步骤进行: 1.安装Python和MySQL,并配置好环境变量。 2.安装Django和相关的第三方库,例如django-rest-framework、django-cors-headers等。 3.创建一个Django项目,并设置好数据库连接信息。 4.编写Django视图函数,用于处理微信小程序发送的请求,并返回相应的数据。 5.在微信小程序中使用wx.request()函数向Django后端发送请求,并处理返回的数据。 6.在微信小程序中使用wx.navigateTo()函数实现页面跳转。 下面是一个简单的示例,演示如何使用Python、MySQL和Django来开发微信小程序: 1.创建一个Django项目,并设置好数据库连接信息。 ```python # settings.py DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'mydatabase', 'USER': 'mydatabaseuser', 'PASSWORD': 'mypassword', 'HOST': 'localhost', 'PORT': '3306', } } ``` 2.编写Django视图函数,用于处理微信小程序发送的请求,并返回相应的数据。 ```python # views.py from django.http import JsonResponse def get_goods(request): # 从数据库中获取商品信息 goods = Goods.objects.all() # 将商品信息转换为JSON格式,并返回给微信小程序 return JsonResponse({'goods': list(goods.values())}) ``` 3.在微信小程序中使用wx.request()函数向Django后端发送请求,并处理返回的数据。 ```javascript // index.js wx.request({ url: 'http://localhost:8000/get_goods/', success: function(res) { console.log(res.data.goods); // 处理返回的商品信息 } }); ``` 4.在微信小程序中使用wx.navigateTo()函数实现页面跳转。 ```javascript // index.js wx.navigateTo({ url: '/pages/goods_detail/goods_detail?id=' + goods_id }); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值