三方平台应用
三方平台应用
一、验证码
1、图片验证码
-
概述
图片验证码是验证码的一种,图片验证码常见的形式有输入图片中字母、数字等 -
作用
图片验证码是嵌入在企业网站、APP等应用中使用的一种验证方式,用户需要识别图片并按要求执行操作,在验证成功后才能使用某项功能。比如客户在某应用中发布文章或评论时,必须先完成图片验证,才可以进行发布操作 。一般用于最多为注册功能 -
模块安装
pip install pillow -
实现
def verifycode(request):
# 引入绘图模块
from PIL import Image, ImageDraw, ImageFont
# 引入随机函数模块
import random
# 定义变量,用于画面的背景色、宽、高
bgcolor = (random.randrange(20, 100), random.randrange(
20, 100), random.randrange(20, 100))
width = 100
height = 50
# 创建画面对象
im = Image.new('RGB', (width, height), bgcolor)
# 创建画笔对象
draw = ImageDraw.Draw(im)
# 调用画笔的point()函数绘制噪点
for i in range(0, 100):
xy = (random.randrange(0, width), random.randrange(0, height))
fill = (random.randrange(0, 255), 255, random.randrange(0, 255))
draw.point(xy, fill=fill)
# 定义验证码的备选值
str = '1234567890QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm'
# 随机选取4个值作为验证码
rand_str = ''
for i in range(0, 4):
rand_str += str[random.randrange(0, len(str))]
# 构造字体对象
font = ImageFont.truetype(r'/home/xlg/PycharmProjects/fonts/ADOBEARABIC-BOLDITALIC.OTF', 40)
# 构造字体颜色
fontcolor1 = (255, random.randrange(0, 255), random.randrange(0, 255))
fontcolor2 = (255, random.randrange(0, 255), random.randrange(0, 255))
fontcolor3 = (255, random.randrange(0, 255), random.randrange(0, 255))
fontcolor4 = (255, random.randrange(0, 255), random.randrange(0, 255))
# 绘制4个字
draw.text((5, 2), rand_str[0], font=font, fill=fontcolor1)
draw.text((25, 2), rand_str[1], font=font, fill=fontcolor2)
draw.text((50, 2), rand_str[2], font=font, fill=fontcolor3)
draw.text((75, 2), rand_str[3], font=font, fill=fontcolor4)
# 释放画笔
del draw
# 存入session,用于做进一步验证
request.session['verify'] = rand_str
# 内存文件操作
import io
buf = io.BytesIO()
# 将图片保存在内存中,文件类型为png
im.save(buf, 'png')
# 将内存中的图片数据返回给客户端,MIME类型为图片png
return HttpResponse(buf.getvalue(), 'image/png')
验证码使用
path(r'^getcode/$',main.verifycode,name='verifycode'),<img src="/getcode/" onclick="this.src='/getcode/?id='+Math.random()">
2、邮箱验证码
-
配置settings
settings.py
EMAIL_HOST = os.environ.get('MAIL_SERVER','smtp.163.com')
EMAIL_HOST_USER = os.environ.get('MAIL_USER','15611833906@163.com')
EMAIL_HOST_PASSWORD = os.environ.get('MAIL_PASSWORD',123456) -
单人邮件
from django.core.mail import send_mailsend_mail( 'Subject here', 'Here is the message.', 'from@example.com', ['to@example.com'], fail_silently=False, )
二、阿里云海量云存储
1、配置步骤
-
登录阿里云
https://www.aliyun.com/search?spm=5176.19720258.J_8058803260.17.c9a82c4aEaGQ5I&scene=all&k=OSS -
输入oss 选择对象存储oss
https://oss.console.aliyun.com/overview -
选择管理控制台
-
选择左侧导航Bucket列表
-
选择创建Bucket->输入名称->选择你所在的区域->点击确定
读写权限如果为默认私有 则url会有过期时间 如果想url永久有效可选择“公共读” “公共读写”
-
创建完成
-
回到概述->选择新手入门
-
文档
https://help.aliyun.com/learn/learningpath/oss.html?spm=5176.8465980.guide.1.4e7014506UkzoA
文件上传
https://help.aliyun.com/document_detail/31886.htm?spm=a2c4g.11186623.0.0.5d352a22Wz8fWx#task-zx1-4p4-tdb
https://help.aliyun.com/document_detail/88426.htm?spm=a2c4g.11186623.0.0.2d562cb7UCrYzI#concept-88426-zh
2、使用
-
安装
通过pip安装
执行命令如下:
pip install oss2 -
验证
验证SDK版本- 在命令行输入python并回车,进入Python环境。
- 执行以下命令检查SDK版本
import oss2
oss2.version
-
yourAccessKeyId与yourAccessKeySecret获取
常用入口->选择AccessKey选择开始使用子用户AccessKey
进入创建用户页面
输入Bucket名称(你在Bucket创建时候的名称)
点击确定
输入验证码
点击左侧导航用户->添加权限
输入oss->进行添加->确定->完成
点击创建新的AccessKey
-
查看Bucket名称
https://oss.console.aliyun.com/bucket -
查看Bucket所在地域对应的Endpoint
-
上传本地文件
SDK位置:新手入门->SDK参考->选择Python->简单上传->上传本地文件https://help.aliyun.com/document_detail/88426.htm?spm=a2c4g.11186623.0.0.2d562cb7UCrYzI#concept-88426-zh
import oss2
import os
# 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
auth = oss2.Auth('yourAccessKeyId', 'yourAccessKeySecret')
# yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
# 填写Bucket名称。
bucket = oss2.Bucket(auth, 'yourEndpoint', 'examplebucket')# 必须以二进制的方式打开文件。 # 填写本地文件的完整路径。如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件。 with open('D:\\localpath\\examplefile.txt', 'rb') as fileobj: # Seek方法用于指定从第1000个字节位置开始读写。上传时会从您指定的第1000个字节位置开始上传,直到文件结束。 fileobj.seek(1000, os.SEEK_SET) # Tell方法用于返回当前位置。 current = fileobj.tell() # 填写Object完整路径。Object完整路径中不能包含Bucket名称。 bucket.put_object('exampleobject.txt', fileobj)
这种上传方式需要将本地文件上传到服务器,然后再将文件上传到云存储(不建议使用这种方式)
-
实例
upload.html
Title
views.py
from django.shortcuts import render,HttpResponse
import os# 完成了简单的上传 def upload(req): import random if req.method == 'POST': f = req.FILES.get('file') import oss2 import os # 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。 auth = oss2.Auth('LTAI5tKvzubUZFUf5E9XvHQP', '1wqHRFJETCQ0w374Hi5Q8w8p0pqVUz') # yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。 # 填写Bucket名称。 bucket = oss2.Bucket(auth, 'oss-cn-beijing.aliyuncs.com', 'luckyxlg') # 必须以二进制的方式打开文件。 # 填写本地文件的完整路径。如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件。 # with open('D:\\localpath\\examplefile.txt', 'rb') as fileobj: # Seek方法用于指定从第1000个字节位置开始读写。上传时会从您指定的第1000个字节位置开始上传,直到文件结束。 # fileobj.seek(1000, os.SEEK_SET) # Tell方法用于返回当前位置。 # current = fileobj.tell() # 填写Object完整路径。Object完整路径中不能包含Bucket名称。 key = f.name print(bucket.put_object(key, f)) # 设置签名url url = bucket.sign_url('GET', key, 10 * 60) print(url) return HttpResponse("上传文件处理完成!") return render(req,'upload.html')
获取文件上传公有的url
https://help.aliyun.com/document_detail/39607.htm?spm=a2c4g.11186623.0.0.564d1e772DpkBP
如果bucket设置为私有 如需访问 则必须设置签名url -
下载
def download(req):
import oss2# 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。 auth = oss2.Auth('LTAI5tKvzubUZFUf5E9XvHQP', '1wqHRFJETCQ0w374Hi5Q8w8p0pqVUz') # Endpoint以杭州为例,其它Region请按实际情况填写。 bucket = oss2.Bucket(auth, 'oss-cn-beijing.aliyuncs.com', 'luckyxlg') # 下载OSS文件到本地文件。如果指定的本地文件存在会覆盖,不存在则新建。 # <yourLocalFile>由本地文件路径加文件名包括后缀组成,例如/users/local/myfile.txt。 # <yourObjectName>表示下载的OSS文件的完整名称,即包含文件后缀在内的完整路径,例如abc/efg/123.jpg。 bucket.get_object_to_file('屏幕快照 2019-08-12 下午8.33.08.png', '/home/xlg/桌面/a.png') return HttpResponse('下载')
三、支付
1、配置步骤
-
打开百度->输入支付宝开放平台->选择
-
点击登录->扫码登录
-
进入管理中心
-
选择开发者中心
-
选择创建应用->网页&移动应用->支付接入
-
输入应用名称->图标->选择网页应用->确认创建
-
选择添加能力
-
新增能力->支付
-
能力列表进行勾选
-
开发信息->接口加密方式->设置
-
点击底部蓝色字->下载支付宝秘钥生成器->下载成功并安装
-
安装完成打开->按图配置->点击生成秘钥->复制公钥
-
回到浏览器进行粘贴->保存设置->点击x关闭
-
开发信息->授权回调地址->设置(设置一个支付成功的回调地址)
-
回到顶部->提交审核
-
等待审核->预计在1天内完成审核
2、沙箱操作
说明:因为个人没有资质使用支付功能 所以可以在沙箱环境进行测试使用
-
回到首页->开发服务->研发服务
-
沙箱应用->RSA2(SHA256)密钥(推荐)->输入支付宝秘钥生成器生成的应用公钥->保存设置
-
下载钱包(仅限Android)
-
沙箱账号(所提供的账号为测试使用账号)
3、SDK
-
访问github.com->搜索Alipay
-
选择fzlee/alipay
-
点击选择中文文档
4、使用
-
安装
pip install python-alipay-sdk --upgrade -
初始化
from alipay import AliPay
def pay(req):
alipay = AliPay(
appid="",
app_notify_url=None, # 默认回调url
app_private_key_string=app_private_key_string,
# 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
alipay_public_key_string=alipay_public_key_string,
sign_type="RSA2" # RSA 或者 RSA2
debug=False # 默认False
)# 如果你是 Python 3的用户,使用默认的字符串即可 subject = "测试订单" # 电脑网站支付,需要跳转到https://openapi.alipay.com/gateway.do? + order_string order_string = alipay.api_alipay_trade_page_pay( out_trade_no="20161112", # 订单ID total_amount=0.01, # 金额 subject=subject, return_url="https://example.com", # 回调URL notify_url="https://example.com/notify" # 可选, 不填则使用默认notify url ) return redirect('https://openapi.alipaydev.com/gateway.do?' + order_string)
注意:
重定向的地址
沙箱环境:https://openapi.alipaydev.com/gateway.do?
正式环境:https://openapi.alipay.com/gateway.do?
在工具生成公钥私钥的时候 需要注意添加如下内容
公钥
-----BEGIN PUBLIC KEY-----
。。。
-----END PUBLIC KEY-----
私钥
-----BEGIN RSA PRIVATE KEY-----
。。。
-----END RSA PRIVATE KEY-----
RSA改为RSA2
本文来自博客园,作者:寻月隐君,转载请注明原文链接:https://www.cnblogs.com/QiaoPengjun/articles/15948959.html