把 视图传到前台的 JsonResponse(data=data) 先进行处理,之后再传到前台,
处理:引用自定义错误代码,把错误代码返回给前台,前台根据错误代码中文提示
class Code: OK = "0" DBERR = "4001" NODATA = "4002" DATAEXIST = "4003" DATAERR = "4004" METHERR = "4005" SMSERROR = "4006" SMSFAIL = "4007" SESSIONERR = "4101" LOGINERR = "4102" PARAMERR = "4103" USERERR = "4104" ROLEERR = "4105" PWDERR = "4106" SERVERERR = "4500" UNKOWNERR = "4501" error_map = { Code.OK: "成功", Code.DBERR: "数据库查询错误", Code.NODATA: "无数据", Code.DATAEXIST: "数据已存在", Code.DATAERR: "数据错误", Code.METHERR: "方法错误", Code.SMSERROR: "发送短信验证码异常", Code.SMSFAIL: "发送短信验证码失败", Code.SESSIONERR: "用户未登录", Code.LOGINERR: "用户登录失败", Code.PARAMERR: "参数错误", Code.USERERR: "用户不存在或未激活", Code.ROLEERR: "用户身份错误", Code.PWDERR: "密码错误", Code.SERVERERR: "内部错误", Code.UNKOWNERR: "未知错误", }
在项目根目录中的utils目录下创建json_fun.py文件,用于处理json格式转化功能,处理视图的 data 数据
from django.http import JsonResponse from .res_code import Code def to_json_data(errno=Code.OK, errmsg='', data=None, **kwargs): json_dict = {'errno': errno, 'errmsg': errmsg, 'data': data} if kwargs: json_dict.update(kwargs) return JsonResponse(json_dict)
在这个应用中的视图中导入处理文件并把处理结果返回前台 :
因为没有用到错误代码,:
import logging from django.shortcuts import render from django.views import View from django.http import HttpResponse,JsonResponse from django_redis import get_redis_connection # 建立与 redis 库连接 from utils.captcha.captcha import captcha from . import constants from ..users.models import Users from utils.json_fun import to_json_data from utils.res_code import * # 导入日志器 logger = logging.getLogger('django') class ImgCode(View): ''' 图片验证码 ''' def get(self, request, image_code_id): text,img = captcha.generate_captcha() # 生成文字和图片验证码 # 把图片验证码和文字验证码存到指定的 redis 中 con_redis = get_redis_connection(alias='verify_codes') img_key = 'img_{}'.format(image_code_id) # con_redis.setex(img_key, constants.IMACE_CODE_REDIS_EXPIRES, text) # 以字典的形式存入到 redis logger.info('验证码:{}'.format(text)) return HttpResponse(content=img,content_type='images/jpg') class UserName(View): ''' 判断用户名是否存在 ''' def get(self, request, username): # user = Users.objects.filter(username=username) # 从数据库中查用户名 # if not user: # return HttpResponse('该用户名可以注册') # else: # return HttpResponse('该用户名已被注册') count = user = Users.objects.filter(username=username).count() # 如果有返回 1 ,如果没有返回 0 # try: # user = Users.objects.get(username=username) # except Ellipsis as e: # # 如果没找到数据,返回相应错误代码,和中文提示, # return to_json_data(errno=Code.NODATA, errmsg=error_map[Code.NODATA]) data = {'username':username, 'count':count} # 定义个字典返回给前台 # return JsonResponse(data=data) return to_json_data(data=data)
在 base.html 文件中导入 js 文件,显示提示信息