知识付费系统作为一种创新的学习和教育模式,其搭建涉及到前后端的复杂交互以及支付流程的安全实现。在本文中,我们将使用Django框架和Stripe API,演示如何构建一个简单而强大的知识付费系统。
首先,确保你已经安装了Django和Stripe SDK。你可以使用以下命令进行安装:
pip install django stripe
使用以下命令创建一个Django项目:
django-admin startproject knowledge_payment_system
然后创建一个Django应用:
cd knowledge_payment_system
python manage.py startapp payments
在项目的settings.py中配置Django和Stripe API密钥:
# knowledge_payment_system/settings.py
# 添加以下内容到文件末尾
import os
# ...
# Stripe API密钥
STRIPE_SECRET_KEY = 'your_stripe_secret_key'
STRIPE_PUBLIC_KEY = 'your_stripe_public_key'
在payments/models.py文件中定义一个简单的课程模型:
# payments/models.py
from django.db import models
class Course(models.Model):
title = models.CharField(max_length=255)
price = models.DecimalField(max_digits=6, decimal_places=2)
def __str__(self):
return self.title
然后运行数据库迁移:
python manage.py makemigrations
python manage.py migrate
在payments/views.py中创建视图处理支付逻辑:
# payments/views.py
from django.shortcuts import render
from django.conf import settings
from django.views.decorators.csrf import csrf_exempt
from django.http import JsonResponse
import stripe
stripe.api_key = settings.STRIPE_SECRET_KEY
def course_detail(request, course_id):
course = Course.objects.get(pk=course_id)
return render(request, 'course_detail.html', {'course': course})
@csrf_exempt
def create_checkout_session(request, course_id):
course = Course.objects.get(pk=course_id)
session = stripe.checkout.Session.create(
payment_method_types=['card'],
line_items=[{
'price_data': {
'currency': 'usd',
'product_data': {
'name': course.title,
},
'unit_amount': int(course.price * 100),
},
'quantity': 1,
}],
mode='payment',
success_url=request.build_absolute_uri(course.get_absolute_url()),
cancel_url=request.build_absolute_uri(course.get_absolute_url()),
)
return JsonResponse({'id': session.id})
在payments/templates/course_detail.html中创建一个简单的支付按钮:
<!-- payments/templates/course_detail.html -->
{% extends 'base.html' %}
{% block content %}
<h1>{{ course.title }}</h1>
<p>价格: ${{ course.price }}</p>
<button id="checkout-button">购买课程</button>
<script src="https://js.stripe.com/v3/"></script>
<script>
var stripe = Stripe('{{ settings.STRIPE_PUBLIC_KEY }}');
var checkoutButton = document.getElementById('checkout-button');
checkoutButton.addEventListener('click', function () {
fetch('/create-checkout-session/{{ course.id }}/', {
method: 'POST',
})
.then(response => response.json())
.then(session => {
return stripe.redirectToCheckout({ sessionId: session.id });
})
.then(result => {
if (result.error) {
alert(result.error.message);
}
})
.catch(error => {
console.error('Error:', error);
});
});
</script>
{% endblock %}
最后,运行Django开发服务器:
python manage.py runserver
现在,访问 http://127.0.0.1:8000/ 并点击课程页面上的购买按钮,你将被重定向到Stripe支付页面。完成支付后,你将被带回到课程详情页。
这个示例演示了如何使用Django和Stripe API构建一个简单的知识付费系统。在实际应用中,你可以进一步扩展功能,添加用户认证、订单管理等模块,以实现更完整的知识付费平台。