DRF项目用django-phone-verify遇导入错误:找不到phone_verify.views模块
问题原因
django-phone-verify 并没有把 start_verification 方法放在 phone_verify.views 模块里,你用了错误的导入路径,才导致模块找不到的报错。
解决方案
1. 修正导入路径与调用逻辑
验证启动的核心逻辑在 phone_verify.services 模块中,修改你的 views.py 代码如下:
from rest_framework.decorators import api_view from rest_framework.response import Response from phone_verify.services import PhoneVerificationService from phone_verify.exceptions import InvalidPhoneNumber @api_view(['POST']) def sign_in_sms(request): phone_number = request.data.get('phone_number') if not phone_number: return Response({'error': 'Phone number is required'}, status=400) try: # 初始化短信验证流程 verification = PhoneVerificationService.initiate_verification( phone_number=phone_number, method='sms' ) return Response({'success': 'Verification started', 'session_token': verification.session_token}) except InvalidPhoneNumber: return Response({'error': 'Invalid phone number format'}, status=400) @api_view(['POST']) def sign_in_phone_call(request): phone_number = request.data.get('phone_number') if not phone_number: return Response({'error': 'Phone number is required'}, status=400) try: # 初始化语音电话验证流程 verification = PhoneVerificationService.initiate_verification( phone_number=phone_number, method='call' ) return Response({'success': 'Verification started', 'session_token': verification.session_token}) except InvalidPhoneNumber: return Response({'error': 'Invalid phone number format'}, status=400)
2. 完善配置参数
确保 settings.py 里的 PHONE_VERIFICATION 配置格式正确,号码要带国际区号:
PHONE_VERIFICATION = { 'FROM_NUMBER': '+1234567890', # 用国际标准格式的号码 'TWILIO_ACCOUNT_SID': '你的Twilio SID', 'TWILIO_AUTH_TOKEN': '你的Twilio Auth Token', 'BACKEND': 'phone_verify.backends.twilio.TwilioBackend', # 显式指定后端,避免歧义 'OPTIONS': { 'site_name': '你的站点名称', 'length': 6, # OTP验证码长度 'valid_window': 120, # OTP有效期(秒) } }
3. 可选:直接用库自带的视图
django-phone-verify 已经封装好了验证启动和校验的完整视图,你可以直接用它的URL配置,不用自己写视图:
项目 urls.py 里保留这段配置即可:
path('phone-verify/', include('phone_verify.urls')),
之后直接调用 /phone-verify/start/ 接口,传入 phone_number 和 method 参数就能启动验证,省得自己重复写逻辑。
额外提醒
- 先升级到最新版库:执行
pip install --upgrade django-phone-verify - 测试前确认Twilio账号已激活、余额充足,能正常发送短信/语音电话
内容的提问来源于stack exchange,提问作者Rafi
相关产品推荐
相关产品推荐

