vue框架前后端分离项目之区间过滤、搜索及支付宝支付功能等相关内容-130
# 方式一:自己写过滤类,配置到视图类的
filter_backends = [自己写的过滤类]
# 方式二:借助django—fileter
# 1 写一个类:
from . import models
from django_filters import filters
class CourseFilterSet(FilterSet):
# 区间过滤:field_name关联的Model字段;lookup_expr设置规则;gt是大于,gte是大于等于;
min_price = filters.NumberFilter(field_name='price', lookup_expr='gte')
max_price = filters.NumberFilter(field_name='price', lookup_expr='lte')
class Meta:
model = models.Course
# 如果过滤条件仅仅就是Model已有的字段,方式一更好
# 但是方式二可以自定义过滤字段
fields = ['course_category','min_price', 'max_price']
# 2 配置到视图类上
filter_backends = [DjangoFilterBackend]
filter_class = CourseFilterSet
2 搜索功能
1 搜索的后端接口
-课程标题(要有搜的关键字)
-课程简介(要有搜的关键字)
-专业的搜索引擎(ES:专注于大数据量的搜索)
2 这次咱们写的就是去数据库查
from rest_framework.filters import SearchFilter
class CourserSearchView(GenericViewSet,ListModelMixin):
queryset = Course.objects.filter(is_delete=False, is_show=True).order_by('-orders')
serializer_class =CourseSerializer
# 内置搜索
filter_backends = [SearchFilter]
search_fields = ['name', 'brief']
pagination_class = BasicPagination
3 支付宝支付
1 使用在线支付功能
-支付宝支付(讲它)
-微信支付
-银联支付(用的比较少)
2 使用支付宝支付
-商户号(营业执照)----》沙箱环境(测试)
-appkey: 测试的key
-secretkey:
3 对称加密和非对称加密
-对称加密:加密密码和解密密码是一个
-非对称加密:公钥和私钥
-公钥加密(即便截获到加密内容和公钥,只要没有私钥,也解不出来)
-私钥解密
4 商家号(营业执照申请),沙箱环境测试
用户名:babdgw8208@sandbox.com
密码:111111
用户号:测试账号
沙箱版的支付宝
用户名:bfxtlv8393@sandbox.com
密码:111111
支付密码:111111
5 生成公钥,私钥
-借助于支付宝提供的工具:https://opendocs.alipay.com/open/291/105971#LDsXr
-用这个工具生成公钥和私钥
-把公钥配置在支付宝的网站上----》生成一个支付宝公钥
6 前端点击立即支付,发送请求
-post请求,数据库写入操作
-生成一个订单(订单表插入数据,订单状态为待支付)
-生成支付链接,返回给前端
-前端拿到支付链接,跳转到支付页面(支付宝页面)
-用户扫描付款(输入用户名密码付款)
-支付宝收到付款成功,get回调咱们的系统
-支付宝还会发送post回调,咱们系统接收到以后,修改订单状态
7 流程:
-1 生成私钥和公钥
-2 把公钥配置在沙箱环境
-3 复制出支付宝公钥,粘贴在项目中
-4 复制出私钥粘贴在项目中
-5 视图类
class PayView(APIView):
def post(self,request,*args,**kwargs):
subject = "充气娃娃"
# 电脑网站支付,需要跳转到https://openapi.alipay.com/gateway.do? + order_string
order_string = alipay.api_alipay_trade_page_pay(
out_trade_no="20161112",
total_amount=1000,
subject=subject,
return_url="https://www.baidu.com",
notify_url="https://example.com/notify" # 可选, 不填则使用默认notify url
)
print(order_string)
pay_url=gateway+ '?' + order_string
print(pay_url)
return Response({'pay_url':pay_url})
-6 前端发送post请求,测试生成的支付链接,完成支付