例如:多个路由函数都global 声明了全局变量login,有时后就会出现下列的错误!还有就是从一个app里面导入函数里面的变量,值也没改变!
NameError: name 'login' is not defined
import base64
import time
from django.shortcuts import render
from rest_framework.decorators import api_view, permission_classes
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response
from django.views.decorators.csrf import csrf_exempt
import requests
from requests.exceptions import ConnectionError
from common.log import logger
from mobile.mobile_login import UserLogin
from common.img_validate_code import RCaptcha
from common.mexceptions import StatusCodeError
from mobile.data_processing import AnalyseData
from common import user
@csrf_exempt
@api_view(['GET', 'POST'])
@permission_classes((IsAuthenticated,))
def page2(request):
"""
输入登陆短信验证码页面
:return:
"""
global login, phone, password, session
if request.method == "GET":
phone = user['phone']
password = user['password']
session = requests.session()
login = UserLogin(session, phone, password)
return render(request, 'page2.html', {'message': '发送登录短信验证码', 'operator': 'mobile'})
else:
try:
smspwd = request.POST.get('smspwd')
artifact = login.login(smspwd)
login.sso_login_shop(artifact)
result = {'code': '0', 'message': '登录认证成功'}
except StatusCodeError as e:
result = {'code': '1', 'message': '{}'.format(e)}
except ConnectionError:
result = {'code': '2', 'message': '网络异常,稍后重试'}
except Exception:
logger.exception('程序异常')
result = {'code': '4', 'message': '程序异常'}
return Response(result)
def send_code01(request):
"""
发送登陆的短信验证码
:return:
"""
global login
try:
message = login.send_random_code_01()
except ConnectionError:
message = '网络异常,稍后重试'
except Exception:
logger.exception('程序异常')
message = '程序异常'
return render(request, 'page2.html', {'message': message, 'operator': 'mobile'})
@csrf_exempt
@api_view(['GET', 'POST'])
@permission_classes((IsAuthenticated,))
def page3(request):
"""
输入详单短信验证码页面
:return:
"""
global login, phone, password, session
if request.method == 'GET':
return render(request, 'page3.html', {'message': '发送详单短信验证码,请等一段时间发送', 'operator': 'mobile'})
else:
try:
smspwd = request.POST.get('smspwd')
login.send_img_validate_code()
rk_captcha = RCaptcha('andrewuser', 'Defender17&rk', '102055', 'b05a3fe49ccb4adaaaa63b83a289ae01')
time.sleep(3)
img = login.read_img_validate_code()
rk = rk_captcha.rk_create(img, 3060)
captcha = rk['Result']
login.check_img_validate_code(captcha)
params = {
'callback': login.callback,
'pwdTempSerCode': base64.b64encode(str(password).encode('utf-8')),
'pwdTempRandCode': base64.b64encode(str(smspwd).encode('utf-8')),
'captchaVal': captcha,
}
login.detail_login(params)
result = {'code': '0', 'message': '认证成功'}
except StatusCodeError as e:
result = {'code': '1', 'message': '{}'.format(e)}
except ConnectionError:
result = {'code': '2', 'message': '网络异常,稍后重试'}
except Exception:
logger.exception('程序异常')
result = {'code': '4', 'message': '程序异常'}
return Response(result)
def send_code02(request):
"""
发送查询通话详情的短信验证码
:return:
"""
global login
try:
login.send_random_code_02()
message = '详单短信验证码发送成功'
except StatusCodeError as e:
message = '{}'.format(e)
except ConnectionError:
message = '网络异常,稍后重试'
except Exception:
logger.exception('程序异常')
message = '程序异常'
return render(request, 'page3.html', {'message': message, 'operator': 'mobile'})
@api_view(['GET', 'POST'])
@permission_classes((IsAuthenticated,))
def page4(request):
"""
返回移动营商的数据
:return:
"""
global login, phone, password, session
try:
callback = login.callback
result = AnalyseData(session=session, phone=phone, callback=callback).get_full_info()
except StatusCodeError as e:
result = {'code': '1', 'message': '{}'.format(e)}
except ConnectionError:
result = {'code': '2', 'message': '网络异常,稍后重试'}
except Exception:
logger.exception('程序异常')
result = {'code': '4', 'message': '程序异常'}
return Response(result)