django注册入库正则验证手机和邮箱

1.数据库库表设计

models.py下

#基类
class Base(models.Model):
    #创建时间
    create_time = models.DateTimeField(default=timezone.now,null=True)
    class Meta:
        abstract = True

#用户
class User(Base):#继承基类
    id = models.AutoField(primary_key=True)
    username = models.CharField(max_length=100)#用户名
    password = models.CharField(max_length=200)#密码
    phone = models.CharField(max_length=15)#手机号
    emali = models.CharField(max_length=50)#邮箱
    class Meta:
        db_table = "my_user"

第一步记得迁移数据库

2.views.py下

from myapp.models import User#导入models包
from django.utils.deprecation import MiddlewareMixin

#用户注册
class Register(APIView):
    def post(self,request):
        #接受数据
        username = request.POST.get("username",None)
        password = request.POST.get('password')
        phone = request.POST.get('phone')
        emali = request.POST.get('emali')
        #手机号正则验证
        try:
            re.match(r"^1[35678]d{9}$", phone)
        except Exception as e:
            return Response({'message': '手机号不符合规则'})
        #邮箱正则验证
        my_emali = re.findall(r'^[0-9a-zA-Z_]{0,19}@[0-9a-zA-Z]{1,13}.[com,cn,net]{2,3}$', emali)
        if not my_emali:
            return Response({'message':'邮箱不正确'})
        #唯一性验证
        try:
            user = User(username=username,password=password,phone=phone,emali=emali)
            user.save()
            return Response({'message':'注册成功'})
        except Exception as e:
            print(e)
            return Response({'message': '注册失败'})

3.自定义接口

urls.py下

from myapp.views import Register

urlpatterns = [
    path('register/', Register.as_view())
    
]

4.前端代码

vue写的前端

<template>
    <div>
        <center><h1>这是·注册页面</h1></center>
        <a-form-item label="用户名" v-bind="formlayout">
          <a-input v-model="username"/>
        </a-form-item >

      <a-form-item label="密码" v-bind="formlayout">
          <a-input v-model="password"/>
        </a-form-item >

      <a-form-item label="确认密码" v-bind="formlayout">
          <a-input v-model="password1"/>
        </a-form-item >

      <a-form-item label="手机号" v-bind="formlayout">
          <a-input v-model="phone"/>
        </a-form-item >

      <a-form-item label="邮箱" v-bind="formlayout">
          <a-input v-model="emali"/>
        </a-form-item >
        <a-form-item v-bind="buttonlayout"  >

        <a-button type="primary"  @click="submit">注册</a-button>
        </a-form-item>

    </div>

</template>
<script type="text/javascript">
    export  default {
      data(){
        return{
        username:'',
        password:"",
        password1:"",
        phone:"",
        emali:"",
          // 表单样式
          formlayout:{
          //标签
          labelCol:{
            xs:{span:24},
            sm:{span:8}
          },
            // 文本框
            wrapperCol:{
            xs:{span:24},
            sm:{span:16}
            }
          },
          // 按钮样式
          buttonlayout:{
          //标签
          wrapperCol:{
            xs:{
              span:24,
              offset:0
            },
            sm:{span:16,offset:8}
          },
          }
        }
      },methods:{
        submit(){
          // alert('注册成功')
              if (this.password ===this.password1){
              this.axios.post('http://127.0.0.1:8000/register/',this.qs.stringify({
              username:this.username,
              password: this.password,
              phone: this.phone,
              emali: this.emali,
            })).then(res=>{
              console.log(res.data)
                this.$message.info(res.data.message)
            })
          }
              else {
                this.$message.info('密码不一样')
              }
              }
        },created() {

      }

    }

</script>

1

原文地址:https://www.cnblogs.com/wangxudong01/p/13887476.html