线上django项目,路由函数都用global声明全局变量,使用时却报错未定义?

例如:多个路由函数都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)
阅读 2.8k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题