django实用配置2:用户支付测试

引言

        这里做的是想要在django项目中想要使用支付宝加入用户支付功能,但是在接入支付宝开放平台时,由于我们并没有企业资质等,所以需要使用沙箱环境进行测试,下面在查找文档时会做相关解释。

支付介绍

        现在我们在网站中选择支付时,较多使用的都是支付宝支付 / 微信支付 / 银行卡支付 / 各种钱包支付等,最多使用还是支付宝和微信,但是如果在测试中,我们可能还是会选择支付宝较多,这是由于微信需要200/年的认证,毕竟我们只是测试使用,所以这里是使用支付宝开放平台进行测试。

平台准备步骤

第一步

        进入支付宝开放平台:支付宝开放平台icon-default.png?t=N7T8https://open.alipay.com/(在支付宝整合之后支付功能已经到了蚂蚁金服,所以准确来说应该是进入蚂蚁金服开放平台,但是从老平台也可以找到文档等)

        蚂蚁金服网址:蚂蚁金服开放平台icon-default.png?t=N7T8https://ds.alipay.com/fd-irng3zgw/index.html(其实最终跳转都是一样的)

第二步

        在进入开放平台后,下拉然后点击网页/移动应用开发其实也就是网页开发配置:支付宝开放平台icon-default.png?t=N7T8https://open.alipay.com/module/webApp


第三步

        继续下来,找到开发支持——开放API,点击进去后便是文档中心:小程序文档 - 支付宝文档中心支付宝文档中心icon-default.png?t=N7T8https://opendocs.alipay.com/open/00a0ut

第四步

        在左侧导航栏找到支付产品——电脑网站支付——然后下边的便可以进行了解具体功能以及如何搭建。

        但是在这里如果按照它的步骤先创建应用,然后配置密钥等,后面是需要验证企业执照的,由于我们还没有企业执照,所以这里找到沙箱环境接入进行测试。

        先在左侧的导航栏中找到支付产品——电脑网站支付——接入指南——基础功能——电脑网站支付快速接入,然后在右侧的导航栏便可以看到沙箱环境接入,其实进入电脑网站支付快速接入文档后一直下翻也就可以找到。

        点击沙箱环境接入后可以看到沙箱环境的简要介绍

        点击沙箱环境链接便可以进入沙箱环境介绍与使用:小程序文档 - 支付宝文档中心支付宝文档中心icon-default.png?t=N7T8https://opendocs.alipay.com/common/02kkv7        简言之沙箱环境其实就是给开发者测试功能使用的,支付宝给出的沙箱环境介绍:

        沙箱环境是支付宝开放平台为开发者提供的安全低门槛的测试环境,开发者在沙箱环境中调用接口无需具备所需的商业资质,无需绑定和开通产品,同时不会对生产环境中的数据造成任何影响。合理使用沙箱环境,可以让研发流程与商业流程并行,降低联调资损风险,加速项目的交付。     

        下方图片也指出了使用为什么建议开发者沙箱环境

        如果之前没有使用过支付宝开放平台,需要在下方的前提条件中进行配置等工作。

第五步

        在配置完成之后我们便可以进入我们的沙箱环境中进行查看,点击左上角回到首页——右上角控制台。

        下拉到最后,找到沙箱,点击进去,注意如果没有自动创建沙箱环境就应该是没有配置好,应该会有提示,一步一步来就好。

        然后便会看到为我们自动创建的沙箱环境

      

接入python步骤 

第一步:下载包

        在这里需要注意,由于目前为止,SDK文档中还是只有Java的接入教程,所以我们需要python第三方接入包,也就是进入pypi:PyPI · The Python Package Index中搜索网上的支付宝接入包与教程。

        在pypi中搜索:alipay-sdk-python 后回车找到我们需要的包

        点击进去后复制包下载命令到我们的项目终端 

        下载完成 

 第二步:查看包文档homepage

        在pypi包的页面中找到homepage也就是包的首页查看文档配置等

        然后我们便进入了它的GitHub项目地址(如果无法进入自行查找科学上网),在下方可以看到文档说明,点入中文文档进行查看。

第三步:根据文档进行配置 

        点击准备之后便进入了配置教程

1,安装

        刚才我们已经安装过了,所以这一步可以忽略

2,生成密钥文件

        这里所谓的生成密钥文件其实也就是加密和解密,这里略讲一下加密方式。

        加密方式种族要分为两种:对称加密(加密解密密码一致)和非对称加密(加密解密密码不一致)。

  • 对称加密:在对称加密中,相同的密钥(也称为秘密密钥)用于加密和解密数据。这意味着发送方和接收方必须共享相同的密钥。常见的对称加密算法包括AES(高级加密标准)和DES(数据加密标准)。对称加密速度通常很快,但存在一个关键问题,即如何在安全地传输密钥的过程中保持安全性。
  • 非对称加密:在非对称加密中,有一对密钥,一个是公钥,另一个是私钥。公钥用于加密数据,而私钥用于解密数据。与对称加密不同,这意味着发送方可以使用接收方的公钥加密消息,但只有接收方拥有与之关联的私钥才能解密它。这种方法解决了密钥传输的问题,因为公钥可以公开分享,而私钥必须保持安全。常见的非对称加密算法包括RSA和ECC。

        而这里所谓的生成密钥文件也就是使用算法生成加密。而由于我们现在只是使用沙箱环境进行测试,所以不需要自行生成密钥文件,沙箱环境已经为我们的账号配置好了密钥文件。

        进入沙箱环境,可以看到我们可以使用系统默认密钥或自定义密钥,这里建议使用系统默认密钥即可。

        点击查看,即可查看相关公钥与私钥的信息。最下方还有支付宝的应用公钥,这是我们待会需要使用的。

 3,配置密钥文件

        再次回到使用教程,点击初始化

        发现初始化中需要提供我们应用的私钥和alipay的公钥。

        再次回到准备教程中,最下方有证书格式参考,点击进去。

        然后我们便进入了tests——certs——ali——ali_public_key.pem中,我们需要下载 ali——ali_public_key.pem和app——app_private_key.pem两个文件。

        下载完成后,在我们项目下方新建一个证书文件夹cert(自行起名和位置),然后将两个文件复制进去。 

        在沙箱环境中复制阿里的公钥和应用的私钥,将文件中原本的公钥和私钥替换一下(注意替换的时候只需要替换密钥内容)。 

第四步:创建支付应用

1,新建应用

        再创建一个测试支付的应用,使用命令:python manage.py startapp pay(应用名,自行修改)

        然后在settings中注册一下pay应用

2,编写urls 

        在pay应用中新建urls.py文件,并用以下代码进行测试。

from django.urls import path
from .views import *
app_name = "pay"
urlpatterns = [
    # 商品列表
    path('goodlist/', goodlist, name="goodlist"),
    path('alipay/<int:id>', alipay, name="alipay"),
    path('alipayback/', alipayback, name="alipayback"),

]

        将pay下的urls文件关联到总路由,在总路由下加入pay.urls

3,编写views视图函数

        进入pay/views中编写三个对应的视图函数,函数内暂时先不写东西,待会儿再编写templates后进行连接。

from django.shortcuts import render

# Create your views here.

# 商品列表视图
def goodlist(request):
    pass


# 支付视图
def alipay(request):
    pass


# 支付完返回视图
def alipayback(request):
    pass

4,编写templates模板 

         在pay下新建templates目录,里面新建goodlist.html文件并写入以下内容,注意这里也使用了模板的继承与包含的写法,在后续会进行讲解,可以直接在html中写入三个a标签即可。

第一种,直接写入
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<a href="/pay/alipay/10" >购买10个金币</a>
<a href="/pay/alipay/100" >购买100个金币</a>
<a href="/pay/alipay/1000" >购买1000个金币</a>
</body>
</html>


第二种,使用了模板的继承等
{% extends 'base.html' %}

{% block main %}

{% include 'nav.html' %}
<a href="/pay/alipay/10" >购买10个金币</a>
<a href="/pay/alipay/100" >购买100个金币</a>
<a href="/pay/alipay/1000" >购买1000个金币</a>
{% endblock %}

        然后将goodlist视图函数关联到goodlist模板,将goodlist和alipay视图修改一下:

def goodlist(request):
    return render(request,'goodlist.html')

def alipay(request, id):
    return HttpResponse(id)

        最后启动服务:python manage.py runserver,再在后面加上/pay/goodlist后,如下所示,点击后应分别返回10,100,1000 

第五步:配置付款

        再次进入初始化中,将一下代码复制到alipay视图中,注意只需要复制选中部分,下面不需要用(注意复制的导包位置等)。

        修改为以下代码: 

from django.shortcuts import render,HttpResponse
from alipay import AliPay, DCAliPay, ISVAliPay
from alipay.utils import AliPayConfig
# Create your views here.

def goodlist(request):
    return render(request,'goodlist.html')

def alipay(request, id):
    # 支付宝网页下载的证书不能直接被使用,需要加上头尾
    # 你可以在此处找到例子: tests/certs/ali/ali_private_key.pem
    # 找到cert下的两个对应文件
    app_private_key_string = open("cert/app_private_key.pem").read()
    alipay_public_key_string = open("cert/ali_public_key.pem").read()
    # 创建实例,里面大部分内容还是在沙箱环境中进行查找
    alipay = AliPay(
        # 换成自己沙箱环境中国的APPID
        appid="9021000129608132",
        # 现在测试get请求还用不到
        app_notify_url=None,  # 默认回调 url
        app_private_key_string=app_private_key_string,
        # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
        alipay_public_key_string=alipay_public_key_string,
        # 现在都是RSA2,所以要修改为RSA2
        # sign_type="RSA",  # RSA 或者 RSA2
        sign_type="RSA2",  # RSA 或者 RSA2
        debug=False,  # 默认 False
        verbose=False,  # 输出调试数据
        config=AliPayConfig(timeout=15)  # 可选,请求超时时间
    )

    return HttpResponse(id)

def alipayback(request):
    pass

        然后还需要使用GitHub上的项目接口,在使用教程中找到接口,点击进去选择电脑网站支付,将代码也复制到alipay视图函数中。

         按照要求进行修改:

from django.shortcuts import render,HttpResponse,redirect
from alipay import AliPay, DCAliPay, ISVAliPay
from alipay.utils import AliPayConfig
import time
# Create your views here.

def goodlist(request):
    return render(request,'goodlist.html')

def alipay(request, id):
    # 支付宝网页下载的证书不能直接被使用,需要加上头尾
    # 你可以在此处找到例子: tests/certs/ali/ali_private_key.pem
    # 找到cert下的两个对应文件
    app_private_key_string = open("cert/app_private_key.pem").read()
    alipay_public_key_string = open("cert/ali_public_key.pem").read()
    # 创建实例,里面大部分内容还是在沙箱环境中进行查找
    alipay = AliPay(
        # 换成自己沙箱环境中国的APPID
        appid="9021000129608132",
        # 现在测试get请求还用不到
        app_notify_url=None,  # 默认回调 url
        app_private_key_string=app_private_key_string,
        # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
        alipay_public_key_string=alipay_public_key_string,
        # 现在都是RSA2,所以要修改为RSA2,不修改会报错
        # sign_type="RSA",  # RSA 或者 RSA2
        sign_type="RSA2",  # RSA 或者 RSA2
        debug=False,  # 默认 False
        verbose=False,  # 输出调试数据
        config=AliPayConfig(timeout=15)  # 可选,请求超时时间
    )

    # 如果你是 Python3 的用户,使用默认的字符串即可
    subject = f"测试订单:{id}"

    # 电脑网站支付,需要跳转到:https://openapi.alipay.com/gateway.do? + order_string
    # 提供这个地址其实是上线之后的地址,修改为沙箱环境中的支付宝网关地址:https://openapi-sandbox.dl.alipaydev.com/gateway.do
    # 后面也一样,所以我们的拼接地址应该是https://openapi-sandbox.dl.alipaydev.com/gateway.do? + order_string
    # order_string返回的就是一个网址
    order_string = alipay.api_alipay_trade_page_pay(
        # 订单
        # 订单号,使用time模块进行测试设置
        out_trade_no=f"{id}:{int(time.time())}",
        total_amount=0.01,
        subject=subject,
        # 支付的结果
        return_url="http://127.0.0.1:8000/pay/alipayback/",
        # notify_url="https://example.com/notify"  # 可选,不填则使用默认 notify url
    )

    # 使用重定向
    return redirect(f"https://openapi-sandbox.dl.alipaydev.com/gateway.do?{order_string}")

def alipayback(request):
    pass

        appid和网址信息都可以在沙箱环境中找到

        再次点击a标签,出现下面就算配置成功 

        使用沙箱环境中的买家账号密码进行登陆后付款如图所示:

 

        输入支付密码并确认交易

        最终会显示错误是因为我们没有配置alipayback的视图函数

第六步:配置支付后的视图函数

        支付完成后我们需要再配置alipayback视图函数来返回支付结果,这里也使用包文档提供的api接口进行配置,可以使用同步或者异步,这里使用同步。

        在刚才的接口文档中找到通知验证并点击,在这里使用Django版本。

        然后将以下代码复制到我们的alipayback路由函数中 

from django.shortcuts import render, HttpResponse, redirect
from alipay import AliPay, DCAliPay, ISVAliPay
from alipay.utils import AliPayConfig
import time


# Create your views here.

def goodlist(request):
    return render(request, 'goodlist.html')


def alipay(request, id):
    # 支付宝网页下载的证书不能直接被使用,需要加上头尾
    # 你可以在此处找到例子: tests/certs/ali/ali_private_key.pem
    # 找到cert下的两个对应文件
    app_private_key_string = open("cert/app_private_key.pem").read()
    alipay_public_key_string = open("cert/ali_public_key.pem").read()
    # 创建实例,里面大部分内容还是在沙箱环境中进行查找
    alipay = AliPay(
        # 换成自己沙箱环境中国的APPID
        appid="9021000129608132",
        # 现在测试get请求还用不到
        app_notify_url=None,  # 默认回调 url
        app_private_key_string=app_private_key_string,
        # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
        alipay_public_key_string=alipay_public_key_string,
        # 现在都是RSA2,所以要修改为RSA2,不修改会报错
        # sign_type="RSA",  # RSA 或者 RSA2
        sign_type="RSA2",  # RSA 或者 RSA2
        debug=False,  # 默认 False
        verbose=False,  # 输出调试数据
        config=AliPayConfig(timeout=15)  # 可选,请求超时时间
    )

    # 如果你是 Python3 的用户,使用默认的字符串即可
    subject = f"测试订单:{id}"

    # 电脑网站支付,需要跳转到:https://openapi.alipay.com/gateway.do? + order_string
    # 提供这个地址其实是上线之后的地址,修改为沙箱环境中的支付宝网关地址:https://openapi-sandbox.dl.alipaydev.com/gateway.do
    # 后面也一样,所以我们的拼接地址应该是https://openapi-sandbox.dl.alipaydev.com/gateway.do? + order_string
    # order_string返回的就是一个网址
    order_string = alipay.api_alipay_trade_page_pay(
        # 订单
        # 订单号,使用time模块进行测试设置
        out_trade_no=f"{id}:{int(time.time())}",
        total_amount=0.01,
        subject=subject,
        # 支付的结果
        return_url="http://127.0.0.1:8000/pay/alipayback/",
        notify_url="https://example.com/notify"  # 可选,不填则使用默认 notify url
    )

    # 使用重定向
    return redirect(f"https://openapi-sandbox.dl.alipaydev.com/gateway.do?{order_string}")


def alipayback(request):
    # for django users return url是同步的get请求
    data = request.GET.dict()


    signature = data.pop("sign")
    app_private_key_string = open("cert/app_private_key.pem").read()
    alipay_public_key_string = open("cert/ali_public_key.pem").read()
    alipay = AliPay(
        # 换成自己沙箱环境中国的APPID
        appid="9021000129608132",
        # 现在测试get请求还用不到
        app_notify_url=None,  # 默认回调 url
        app_private_key_string=app_private_key_string,
        # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
        alipay_public_key_string=alipay_public_key_string,
        # 现在都是RSA2,所以要修改为RSA2,不修改会报错
        # sign_type="RSA",  # RSA 或者 RSA2
        sign_type="RSA2",  # RSA 或者 RSA2
        debug=False,  # 默认 False
        verbose=False,  # 输出调试数据
        config=AliPayConfig(timeout=15)  # 可选,请求超时时间
    )

    # verification
    # 又用到了alipay,从alipay函数中复制过来或包装成函数或类
    success = alipay.verify(data, signature)
    # if success and data["trade_status"] in ("TRADE_SUCCESS", "TRADE_FINISHED"):
    #     print("trade succeed")
    print(success, data)
    if success:
        s = data['out_trade_no']
        good = s[:s.index(':')]
        success_msg = f"购买{good}成功"
        return HttpResponse(success_msg)
    else:
        return HttpResponse("未知错误!")

        然后再次运行进行测试,基本就可以完成,支付成功后可以返回我们的alipayback视图函数。

用户增加充值功能 

        这一步没太大必要,只是了解一下流程。

第一步:添加字段

        在测试完成后,便可以对用户系统增加重置了,先在用户模型中添加money字段,如下:

  

        然后生成迁移文件并重新进行迁移:python manage.py makemigrations

                                                                 python manage.py migrate

第二步:修改pay应用视图函数

        在这里由于我们的逻辑是必须登录过的用户才能充值,所以可以用django自带的路由守卫装饰器。

from django.shortcuts import render, HttpResponse, redirect
from alipay import AliPay, DCAliPay, ISVAliPay
from alipay.utils import AliPayConfig
import time
# 导入自带的路由守卫
from django.contrib.auth.decorators import login_required

# Create your views here.

def goodlist(request):
    return render(request, 'goodlist.html')

# 给支付添加路由守卫
@login_required()
def alipay(request, id):
    # 支付宝网页下载的证书不能直接被使用,需要加上头尾
    # 你可以在此处找到例子: tests/certs/ali/ali_private_key.pem
    # 找到cert下的两个对应文件
    app_private_key_string = open("cert/app_private_key.pem").read()
    alipay_public_key_string = open("cert/ali_public_key.pem").read()
    # 创建实例,里面大部分内容还是在沙箱环境中进行查找
    alipay = AliPay(
        # 换成自己沙箱环境中国的APPID
        appid="9021000129608132",
        # 现在测试get请求还用不到
        app_notify_url=None,  # 默认回调 url
        app_private_key_string=app_private_key_string,
        # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
        alipay_public_key_string=alipay_public_key_string,
        # 现在都是RSA2,所以要修改为RSA2,不修改会报错
        # sign_type="RSA",  # RSA 或者 RSA2
        sign_type="RSA2",  # RSA 或者 RSA2
        debug=False,  # 默认 False
        verbose=False,  # 输出调试数据
        config=AliPayConfig(timeout=15)  # 可选,请求超时时间
    )

    # 如果你是 Python3 的用户,使用默认的字符串即可
    subject = f"测试订单:{id}"

    # 电脑网站支付,需要跳转到:https://openapi.alipay.com/gateway.do? + order_string
    # 提供这个地址其实是上线之后的地址,修改为沙箱环境中的支付宝网关地址:https://openapi-sandbox.dl.alipaydev.com/gateway.do
    # 后面也一样,所以我们的拼接地址应该是https://openapi-sandbox.dl.alipaydev.com/gateway.do? + order_string
    # order_string返回的就是一个网址
    order_string = alipay.api_alipay_trade_page_pay(
        # 订单
        # 订单号,使用time模块进行测试设置
        out_trade_no=f"{id}:{int(time.time())}",
        total_amount=0.01,
        subject=subject,
        # 支付的结果
        return_url="http://127.0.0.1:8000/pay/alipayback/",
        notify_url="https://example.com/notify"  # 可选,不填则使用默认 notify url
    )

    # 使用重定向
    return redirect(f"https://openapi-sandbox.dl.alipaydev.com/gateway.do?{order_string}")


def alipayback(request):
    # for django users return url是同步的get请求
    data = request.GET.dict()


    signature = data.pop("sign")
    app_private_key_string = open("cert/app_private_key.pem").read()
    alipay_public_key_string = open("cert/ali_public_key.pem").read()
    alipay = AliPay(
        # 换成自己沙箱环境中国的APPID
        appid="9021000129608132",
        # 现在测试get请求还用不到
        app_notify_url=None,  # 默认回调 url
        app_private_key_string=app_private_key_string,
        # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
        alipay_public_key_string=alipay_public_key_string,
        # 现在都是RSA2,所以要修改为RSA2,不修改会报错
        # sign_type="RSA",  # RSA 或者 RSA2
        sign_type="RSA2",  # RSA 或者 RSA2
        debug=False,  # 默认 False
        verbose=False,  # 输出调试数据
        config=AliPayConfig(timeout=15)  # 可选,请求超时时间
    )

    # verification
    # 又用到了alipay,从alipay函数中复制过来或包装成函数或类
    success = alipay.verify(data, signature)
    # if success and data["trade_status"] in ("TRADE_SUCCESS", "TRADE_FINISHED"):
    #     print("trade succeed")
    print(success, data)
    if success:
        s = data['out_trade_no']
        good = s[:s.index(':')]
        # 购买成功后用户money增加
        request.user.money += int(good)
        request.user.save()
    # 重定向个人中心
    return redirect("/user/center/")

第三步:更新用户个人中心

        在添加了money字段后,在用户的个人中心添加money显示(这里大部分都是之前已经写过的,所以不用刻意关注,只需了解流程)。

{% extends 'base.html' %}
{% block title %}
新闻网-个人中心
{% endblock %}

{% block css %}

<style>
  .head {
    width: 120px;
    height: 120px;
    position: relative;
  }

  .head input {
    position: absolute;
    left: 0;
    top: 0;
    width: 100%;
    height: 100%;
    opacity: 0;
  }

  .head img {
    width: 100%;
    border-radius: 50%;
  }
</style>

{% endblock %}


{% block main %}
{% include 'nav.html' %}

<div class="container">

  <div class="row">
    <div class="col-md-8 col-md-offset-2">
      <div class="panel panel-default">
        <div class="panel-heading">
          <h3 class="panel-title">个人中心</h3>
        </div>
        <div class="panel-body">
          <div class="row">
            <div class="col-md-6">
              <ul class="list-group">
                <li class="list-group-item">用户名: <input name="username" value="{{ request.user.username }}"> <button
                    id="change_username">修改</button></li>
                <li class="list-group-item">注册时间: {{ request.user.date_joined }}</li>
                <li class="list-group-item">拥有金币: {{ request.user.money }} <a href="/pay/goodlist" >去充值</a> </li>
                <li class="list-group-item">上次登录时间: {{ request.user.last_login }}</li>
                {% if request.user.telephone %}
                <li class="list-group-item current_telephone">手机号:{{ request.user.telephone }}</li>
                {% else %}
                <li class="list-group-item current_telephone">手机号:尚未绑定</li>
                {% endif %}
                <li class="list-group-item"> <input value="15138001200" name="telephone" placeholder="请输入要绑定的手机号" type="text"> <button id="change_telephone">发送验证码</button>  </li>
                <li class="list-group-item"> <input  name="code" placeholder="请输入验证吗" type="text"> <button id="modify_telephone">绑定</button>  </li>
                
              </ul>
            </div>
            <div class="col-md-6">
              <div class="head">
                <img src="/media/{{request.user.head}}" alt="">
                <input type="file">
                {% csrf_token %}
              </div>
              <span>点击头像可以更换</span>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</div>


{% endblock %}


{% block js %}

<script>
  $(function(){
    $("#modify_telephone").click(function(){
      let content = $("[name='code']").val()
      if(content==""){
        alert("验证码不能为空")
      }
      else{
        $.ajax({
          url:"/user/modify_telephone/",
          method: "post",
          data: {
            "csrfmiddlewaretoken": $("[name='csrfmiddlewaretoken']").val(),
            "code": content,
            "telephone": $("[name='telephone']").val()
          },
          success:function(data){
            alert(data.msg)
            if(data.code == 0){
              $(".current_telephone").text(`手机号:${$("[name='telephone']").val()}`)
            }
          }
        })
      }
    })
  })
</script>

<script>
  $(function(){
    $("#change_telephone").click(function(){
      $("#change_telephone").attr("disabled", true);
      let content = $("[name='telephone']").val()
      if(content==""){
        alert("手机号不能为空")
      }
      else{
        content = content.trim()
        if(!(/^1[3456789]\d{9}$/.test(content))){ 
            alert("手机号码有误,请重填");  
        } 
        else{
          $.ajax({
            url:"/user/change_telephone/",
            method:"post",
            data:{
              "csrfmiddlewaretoken": $("[name='csrfmiddlewaretoken']").val(),
              "telephone": content
            },
            success:function(data){
              alert(data.msg)
              $("#change_telephone").attr("disabled", false);

            }

          })
        }
      }
    })

  })
</script>


<script>
  $(function () {
    $(".head input").change(function () {
      let fd = new FormData();
      fd.append("csrfmiddlewaretoken", $("[name='csrfmiddlewaretoken']").val());
      fd.append("file", $("[type='file']")[0].files[0]);


      $.ajax({
        url: "/user/change_head/",
        method: "post",
        data: fd,
        processData: false,
        contentType: false,
        success: function (data) {
          console.log(data);
          if (data.code == 0) {
            $(".head img").attr("src", data.data.head)
          }
        }
      })
    })
  })


</script>

<script>
  $(function(){
    $("#change_username").click(function(){
      let content = $("[name='username']").val();
      if(content == ""){
        alert("用户名不能为空");
      }
      else{
        $.ajax({
          url: "/user/change_username/",
          method:"post",
          data:{
            "username": content,
            "csrfmiddlewaretoken": $("[name='csrfmiddlewaretoken']").val()
          },
          success:function(data){
            alert(data.msg);
            $(".nav .dropdown>a").html(`${content}<span class="caret"></span>`);
          }
        })
      }
    })

  })


</script>
{% endblock %}

        进入网页后进入个人中心 可以看到用户显示金币数量并有了充值按钮。

        点击去充值,跳转到/pay/goodlist

        随便点击一个,进行充值,在充值完成后再次跳转到个人中心,可以看到充值完成。

补充

        这里还有很多可以进行加工完善,比如并设置充值金币数量对应相应的金额,美化充值页面,设置自定义充值等等,这里不再做一一展示,这里只是为了简单了解配置流程。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值