潭州课堂25班:Ph201805201 django 项目 第十课 自定义错误码,完成图片验证码,用户是否被注册功能 (课堂笔记)

把 视图传到前台的  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 文件,显示提示信息

原文地址:https://www.cnblogs.com/gdwz922/p/10081030.html