项目-用户注册

用户注册

js部分
  let $register = $('.form-contain');  // 获取注册表单元素
  
   $register.submit(function (e) {//设置点击函数触发
    // 阻止默认提交操作
    e.preventDefault();

    // 获取用户输入的内容
    let sUsername = $username.val();  // 获取用户输入的用户名字符串
    let sPassword = $("input[name=password]").val();//获取用户的密码
    let sPasswordRepeat = $("input[name=password_repeat]").val();//获取用户第二次输入的密码
    let sMobile = $mobile.val();  // 获取用户输入的手机号码字符串

    // 判断用户名是否已注册
    if (fn_check_username() !== "success") {
      return
    }
    // 判断手机号是否为空,是否已注册
    if (fn_check_mobile() !== "success") {
      return
    }

    // 判断用户输入的密码是否为空
    if ((!sPassword) || (!sPasswordRepeat)) {
      message.showError('密码或确认密码不能为空');
      return
    }

    // 判断用户输入的密码和确认密码长度是否为6-20位
    if ((sPassword.length < 6 || sPassword.length > 20) ||
      (sPasswordRepeat.length < 6 || sPasswordRepeat.length > 20)) {
      message.showError('密码和确认密码的长度需在6~20位以内');
      return
    }

    // 判断用户输入的密码和确认密码是否一致
    if (sPassword !== sPasswordRepeat) {
      message.showError('密码和确认密码不一致');
      return
    }
    // 发起注册请求
    // 1、创建请求参数
    let SdataParams = {
      "username": sUsername,
      "password": sPassword,
      "password_repeat": sPasswordRepeat,
      "mobile": sMobile,
  
    };

    // 2、创建ajax请求
    $.ajax({
      // 请求地址
      // url: "/user/register/",  // url尾部需要添加/
      // 请求方式
      type: "POST",
      data: JSON.stringify(SdataParams),
      // 请求内容的数据类型(前端发给后端的格式)
      contentType: "application/json; charset=utf-8",
      // 响应数据的格式(后端返回给前端的格式)
      dataType: "json",
    })
      .done(function (res) {
        if (res.errno === "0") {
          // 注册成功
          message.showSuccess('恭喜你,注册成功!');
           setTimeout(() => {
            // 注册成功之后重定向到主页
            window.location.href = '/news/index/';
          }, 1500)
        } else {
          // 注册失败,打印错误信息
          message.showError(res.errmsg);
        }
      })
      .fail(function(){
        message.showError('服务器超时,请重试!');
      });

  }); 
form表单进行数据的清洗
from django import forms
import re
from django.contrib.auth import login
from django.db.models import Q
from apps.user.models import Users
#定义一个注册的表单
class RegisterForm(forms.Form):
   #用户名,格式必须和前面的js的请求参数一致
    username = forms.CharField(label='用户名', max_length=20, min_length=5,
                               error_messages={"min_length": "用户名长度要大于5",
                                               "max_length": "用户名长度要小于20",
                                               "required": "用户名不能为空"}
                               )
       #密码
    password = forms.CharField(label='密码', max_length=20, min_length=6,
                               error_messages={"min_length": "密码长度要大于6",
                                               "max_length": "密码长度要小于20",
                                               "required": "密码不能为空"}
                               )
        #再次输入密码
    password_repeat = forms.CharField(label='确认密码', max_length=20, min_length=6,
                                      error_messages={"min_length": "密码长度要大于6",
                                                      "max_length": "密码长度要小于20",
                                                      "required": "密码不能为空"}
                                      )
        #手机号
    mobile = forms.CharField(label='手机号', max_length=11, min_length=11,
                             error_messages={"min_length": "手机号长度有误",
                                             "max_length": "手机号长度有误",
                                             "required": "手机号不能为空"})
#判断用户名和手机号是否已经注册
    def clean_mo_un(self):
        users = self.cleaned_data.get('username')
        tel = self.cleaned_data.get('mobile')
        if Users.objects.filter(username=users,mobile=tel).exists():
        #如果已注册则抛出错误
            raise forms.ValidationError("用户名或手机号已注册,请重新输入!")
          #没有注册的话则返回用户名和手机号
        return users,tel

    def clean(self):
        """
        """
        #j继承原有的clean方法
        cleaned_data = super().clean()
        #获取密码和第二次密码
        passwd = cleaned_data.get('password')
        passwd_repeat = cleaned_data.get('password_repeat')

        if passwd != passwd_repeat:
            raise forms.ValidationError("两次密码不一致")

        tel = cleaned_data.get('mobile')
     
视图函数
#写一个注册的类视图
class RegisterView(View):

    def get(self,request):
        return render(request,'users/register.html')

    def post(self,request):
    #获取js传过来的输入
        json_str = request.body
        #判断传过来的数据是否有误
        if not json_str:
            return to_json_data(errno=Code.PARAMERR,errmsg='输入的数据有误')
            #将传过来的数据转换成字典的格式
        data_dict = json.loads(json_str.decode('utf8'))
        #将字典格式的数据进行数据的清洗
        form = forms.RegisterForm(data=data_dict)
        #判断传过去的数据是否合理
        if form.is_valid():
            username = form.cleaned_data.get('username')
            password = form.cleaned_data.get('password')
            mobile = form.cleaned_data.get('mobile')
            #将数据保存到数据库
            user = Users.objects.create_user(username=username,password=password,mobile=mobile)
            #登录
            login(request,user)
            return to_json_data(errmsg='恭喜您注册成功')
#如果数据清洗不通过,将错误输出
        else:
            err_msg_list = []
            for item in form.errors.get_json_data().values():
                err_msg_list.append(item[0].get('message'))
            err_msg_str = '/'.join(err_msg_list)  # 拼接错误信息为一个字符串
            return to_json_data(errno=Code.PARAMERR, errmsg=err_msg_str)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值