判断用户名是否已被注册的三种方法

在forms.py中写局部钩子函数

首先还是得先导入app里面的models

#重写username字段的局部钩子
    def clean_username(self):
        username = self.cleaned_data.get("username")
        is_exist = models.UserInfo.objects.filter(username=username)
        # 判断用户名是否已存在,可以放到钩子函数里
        if is_exist:
            self.add_error("username",ValidationError("用户名已存在"))

在验证注册的视图函数里,在通过验证之后加上判断用户名是否存在的判断

# 注册的视图函数
def register(request):
    if request.method == "POST":
        ret = {"status": 0, "msg": ""}
        form_obj = forms.RegForm(request.POST)
        print(request.POST)
        # 帮我做校验
        if form_obj.is_valid():
            # 校验通过,去数据库创建一个新的用户
            username = form_obj.cleaned_data.get("username")
            is_exist = models.UserInfo.objects.filter(username=username)
            # 判断用户名是否已存在,可以放到钩子函数里
            if is_exist:
                ret['status'] = 1
                ret['msg'] = '用户名已存在'
                return JsonResponse(ret)
            form_obj.cleaned_data.pop("re_password")
            avatar_img = request.FILES.get("avatar")
            models.UserInfo.objects.create_user(**form_obj.cleaned_data, avatar=avatar_img,phone="123123")
            ret["msg"] = "/index/"
            return JsonResponse(ret)
        else:
            print(form_obj.errors)
            ret["status"] = 1
            ret["msg"] = form_obj.errors
            print(ret)
            print("=" * 120)
            return JsonResponse(ret)
    # 生成一个form对象
    form_obj = forms.RegForm()
    print(form_obj.fields)
    return render(request, "register.html", {"form_obj": form_obj})

前后端交互,前端写一个username输入框失去焦点事件后发送用户名给后端的GET或者POST请求,后端接受请求,判断返回json包

前端

    //给username input框绑定一个失去焦点事件,失去焦点之后及校验用户名是否已注册
    $("#id_username").blur(function () {
        //取到用户填写的值
        var username = $(this).val();
        //发请求
        $.ajax({
            url:"/check_username_exist/",
            type: "get",
            data:username,
            success:function (data) {
                if(data.status){
                    //用户名已经被注册
                $("#id_username").next().text(data.msg).parent().parent().addClass("has-error");
                }else {
                    //不做操作
                }

            }
        })

后端

def check_username_exist(request):
    ret={"status":0,"msg":""}
    username=request.GET.get("username")
    is_exist = models.UserInfo.objects.filter(username=username)
    if is_exist:
        ret["status"] = 1
        ret["msg"] = "用户名已被注册"

    return JsonResponse(ret)
  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值