You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Django(Python)集成DocuSign API:编辑视图控制及签发送开发问询

嘿,我来帮你一步步实现这个需求!结合django-docusign模块和DocuSign REST API的能力,完全可以搞定发送者编辑标签、限制签署权限,还有启用/禁用编辑视图的功能,具体步骤如下:

一、先搞定基础配置

首先确保django-docusign在你的Django项目里配置正确,在settings.py里填写DocuSign的认证信息(注意别硬编码敏感令牌,后面会说更安全的OAuth方式):

# settings.py
DOCUSIGN_INTEGRATION_KEY = '你的集成密钥'
DOCUSIGN_USER_ID = '你的DocuSign账户用户ID'
DOCUSIGN_ACCOUNT_ID = '你的DocuSign账户ID'
DOCUSIGN_BASE_URL = 'https://demo.docusign.net/restapi'  # 测试环境用这个,生产环境换www.docusign.net
# 推荐用OAuth授权流程获取令牌,而非硬编码
DOCUSIGN_OAUTH_TOKEN = '临时测试令牌'  # 正式环境用自动刷新的令牌机制
二、实现「上传文档 + Web GUI编辑标签(仅编辑不签署)」核心流程

这是最关键的部分,要让用户A能上传文档后,跳转到DocuSign的Web编辑器加标签,但不能签署文档:

  1. 创建草稿信封并设置权限
    当用户A上传PDF后,先创建一个草稿状态的信封,同时明确限制发送者的权限——只能编辑标签,不能签署:
from docusign import Envelope, Document, Signer

def upload_and_prepare_envelope(request):
    if request.method == 'POST':
        uploaded_file = request.FILES['pdf_file']
        # 1. 构建文档对象
        doc = Document(
            name=uploaded_file.name,
            document_id='1',
            file_content=uploaded_file.read()
        )
        # 2. 添加最终签署者信息(后续要接收文档的人)
        signer = Signer(
            email='signer@example.com',
            name='签署者姓名',
            recipient_id='1',
            routing_order='1'
        )
        # 3. 创建草稿信封,核心权限设置:
        envelope = Envelope(
            documents=[doc],
            recipients={'signers': [signer]},
            status='created',  # 设为草稿,暂不发送
            sender_can_sign=False,  # 关键!禁止发送者签署文档
            allow_edit=True  # 允许发送者编辑标签
        )
        # 保存信封到DocuSign平台
        envelope.save()
        # 跳转到下一步:获取编辑视图URL
        return redirect('get_docusign_editor', envelope_id=envelope.id)
    return render(request, 'upload_document.html')
  1. 生成DocuSign编辑视图URL并跳转
    创建草稿信封后,生成Sender View的URL,让用户A跳转到DocuSign的Web界面编辑标签:
def get_docusign_editor(request, envelope_id):
    envelope = Envelope.objects.get(id=envelope_id)
    # 设置编辑完成后跳转回你的Django应用的URL
    return_url = f"{request.scheme}://{request.get_host()}/envelope/complete/{envelope_id}/"
    # 生成DocuSign的编辑页面URL
    editor_url = envelope.create_sender_view(return_url)
    # 重定向到DocuSign的Web编辑器
    return redirect(editor_url)

这样用户A打开的DocuSign界面里,只能添加各类标签(签名框、文本框等),看不到签署按钮,完美符合你的需求。

三、实现启用/禁用编辑视图的功能

你可以从Django权限控制和DocuSign API权限两个层面来实现开关:

1. Django层面的前端/权限开关

在你的Django模型里给信封加一个allow_edit布尔字段,控制用户能不能进入编辑界面:

# models.py
from django.db import models

class EnvelopeRecord(models.Model):
    docusign_envelope_id = models.CharField(max_length=100)
    allow_edit = models.BooleanField(default=True)
    # 其他字段:上传用户、创建时间等

然后在生成编辑视图URL的函数里做判断:

def get_docusign_editor(request, envelope_id):
    envelope_rec = EnvelopeRecord.objects.get(docusign_envelope_id=envelope_id)
    if not envelope_rec.allow_edit:
        return HttpResponseForbidden('当前文档的编辑功能已禁用')
    # 后续生成URL的逻辑不变
    envelope = Envelope.objects.get(id=envelope_id)
    return_url = f"{request.scheme}://{request.get_host()}/envelope/complete/{envelope_id}/"
    editor_url = envelope.create_sender_view(return_url)
    return redirect(editor_url)

这样通过后台修改allow_edit字段,就能快速开关编辑功能。

2. DocuSign API层面的强制限制

如果需要更严格的控制(比如防止用户通过其他方式访问编辑界面),可以动态设置信封的sender_can_edit参数:

  • 创建信封时根据开关设置:
# 假设allow_edit_flag是从后台获取的开关值(True/False)
envelope = Envelope(
    documents=[doc],
    recipients={'signers': [signer]},
    status='created',
    sender_can_sign=False,
    sender_can_edit=allow_edit_flag  # 动态控制是否允许编辑
)
envelope.save()
  • 后续也可以更新已存在的信封权限:
envelope = Envelope.objects.get(id=envelope_id)
envelope.sender_can_edit = False  # 禁用编辑
envelope.save()
四、编辑完成后的收尾:发送文档给签署者

当用户A在DocuSign里完成标签编辑后,会跳转到你设置的return_url,这时候把信封状态从草稿改为已发送,签署者就会收到邮件通知:

def envelope_edit_complete(request, envelope_id):
    envelope = Envelope.objects.get(id=envelope_id)
    # 将信封状态改为"已发送"
    envelope.status = 'sent'
    envelope.save()
    # 跳转到成功页面,或者给用户A发送通知
    return render(request, 'envelope_sent_success.html', {'envelope': envelope})
几个注意点
  • OAuth令牌管理:正式环境别硬编码令牌,用django-docusign的OAuth授权码流程,实现令牌自动刷新,避免过期问题。
  • 环境区分:测试用demo.docusign.net,生产用www.docusign.net,记得更换DOCUSIGN_BASE_URL。
  • 文档兼容性:确保上传的PDF没有加密,否则DocuSign无法解析编辑。

内容的提问来源于stack exchange,提问作者Lucid Lynx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:54:50