iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >django项目基于钩子验证的注册功能是怎么样的
  • 500
分享到

django项目基于钩子验证的注册功能是怎么样的

2023-06-02 03:06:21 500人浏览 独家记忆
摘要

这期内容当中小编将会给大家带来有关Django项目基于钩子验证的注册功能是怎么样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。  前端html  注册  {# 注册的开始#}  onsubmit=&qu

这期内容当中小编将会给大家带来有关Django项目基于钩子验证的注册功能是怎么样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

  前端html

  注册

  {# 注册的开始#}

  onsubmit="return false">

  {% csrf_token %}

  type=email

  data-val=true

  data-val-checkemailpostfix=不支持该邮箱后缀

  data-val-email=邮箱格式错误

  data-val-length=邮箱地址不能超过120个字符

  data-val-length-max=120

  data-val-regex=邮箱地址错误或不支持

  data-val-regex-pattern="[\w!#\$%&'\*\+\-\/=\^_`{\|}~.]+@([\w-]+\.)+(com|net|cn|org|me|cc|biz)$"

  data-val-remote="'邮箱' is invalid."

  data-val-remote-additionalfields=*.Email

  data-val-remote-url=/Account/CheckEmail

  data-val-required=请输入邮箱地址 id=Email

  name=member_email>

  class="text-danger field-validation-valid" data-valmsg-for=Email

  data-valmsg-replace=true>

  手机号码

  data-val-maxlength=国家代码格式错误 data-val-maxlength-max=4

  data-val-regex=国家代码格式错误 data-val-regex-pattern=^\+\d{1,3}$

  data-val-required=请输入国家代码 id=CountryCode name=CountryCode

  value=+86>

  placeholder=绑定你的手机号 type=text

  data-val=true data-val-regex=手机号码有误

  data-val-regex-pattern=^\d{4,13}$

  data-val-remote="'手机号码' is invalid."

  data-val-remote-additionalfields=*.PhoneNum

  data-val-remote-url=/Account/CheckPhoneNum

  data-val-required=请输入手机号码 id=PhoneNum

  name=member_tel>

  data-valmsg-replace=true>

  class="text-danger field-validation-valid"

  data-valmsg-for=PhoneNum

  data-valmsg-replace=true>

  登录名称

  type=text

  data-val=true

  data-val-length=不合要求,至少2个字符,最多30个字符

  data-val-length-max=30 data-val-length-min=2

  data-val-nospace=登录用户名不能包含空格

  data-val-remote="'登录名称' is invalid."

  data-val-remote-additionalfields=*.LoginName

  data-val-remote-url=/Account/CheckLoginName

  data-val-required=请输入登录用户名 id=LoginName

  name=member_name>

  data-valmsg-replace=true>

  显示名称

  type=text

  data-val=true

  data-val-length=不合要求,至少2个字符,最多20个字符

  data-val-length-max=20 data-val-length-min=2

  data-val-regex=不能包含空格、@、:和,不能以._结尾

  data-val-regex-pattern=^(?!.*[@::\s]).*[^._]$

  data-val-remote="'显示名称' is invalid."

  data-val-remote-additionalfields=*.DisplayName

  data-val-remote-url=/Account/CheckDisplayName

  data-val-required=请输入显示名称 id=DisplayName

  name=member_nickname>

  class="text-danger field-validation-valid" data-valmsg-for=DisplayName

  data-valmsg-replace=true>

  密码

  placeholder=至少8位,必须包含字母、数字、特殊字符

  type=passWord data-val=true

  data-val-length=不合要求,密码长度要求8-30位

  data-val-length-max=30

  data-val-length-min=8

  data-val-nospace=密码不能包含空格

  data-val-regex=密码必须包含字母、数字和特殊字符的组合

  data-val-regex-pattern="^(?=.*[0-9])(?=.*[a-zA-Z])(?=.*[^a-zA-Z0-9])[-0-9a-zA-Z~!@#$%^&*`_=+\]\[{}:;\\|:;"'/?>.<,\(\)]{8,30}$"

  data-val-required=请输入密码 id=Password

  name=member_pwd>

  class="text-danger field-validation-valid" data-valmsg-for=Password

  data-valmsg-replace=true>

  确认密码

  type=password

  data-val=true data-val-equalto=确认密码错误

  data-val-equalto-other=*.Password

  id=ConfirmPassword

  name=r_pwd>

  class="text-danger field-validation-valid" data-valmsg-for=ConfirmPassword

  data-valmsg-replace=true>

  class="btn ladda-button mx-auto d-block cnblogs-btn-blue"

  data-style=zoom-in>注册

  * 点击 “注册” 按钮,即表示您同意并愿意遵守

  class=look-agreeon target=_blank

  href=//passport.cnblogs.com/agreement.html>用户协议。

  {#注册的表单结束#}

  前端Jquery

  {#注册的jquery#}

  $(document).ready(function () {

  //当点击注册按钮时候,把fORM表单里的内容提交到后台

  $("#submitBtn").click(function () {

  $.post("/blog/reGISt/", $('#registerForm').serialize(), function (data) {

  if (data.status == 0) {

  arr = {

  'member_name': '登录名称',

  'member_nickname': '显示名称',

  'member_pwd': '密码',

  'r_pwd': '确认密码',

  'member_email': '邮箱',

  'member_tel': '手机号码',

  '__all__': ''

  };

  $.each(data['info'], function (key, value) { //遍历键值对

  console.log(key);

  console.log(value[0]);

  layer.msg(arr[key] + value[0]);

  return false;

  layer.msg(arr[key] + data['info'][key]);

  return false;

  });

  } else if (data.status == 1) {

  layer.msg(data['info'], function () {

  location.href = "{% url 'index' %}";

  });

  } else {

  layer.msg(data['info']);

  }

  }, 'JSON');

  });

  });

  {#注册的jquery结束#}

  后台路由

  # 注册

  path('regist/', login.regist,name='regist'),

  写钩子验证:项目目录下创建my_forms.py文件

  from djanGo import forms #自动验证 # forms组件

  from django.forms import widgets

  from django.core.exceptions import ValidationError

  from django.core.validators import RegexValidator

  from blog.models import Member

  class UserForm(forms.Form):

  wid_01 = widgets.TextInput(attrs={"class": "form-control"})#

  wid_02 = widgets.PasswordInput(attrs={"class": "form-control"})#

  member_name=forms.CharField(max_length=60,min_length=4,label="用户名",widget=wid_01,error_messages={"required":"该字段必填"})

  member_nickname = forms.CharField(max_length=60, min_length=2, label="显示名称", widget=wid_01,

  error_messages={"required": "该字段必填"})

  member_pwd=forms.CharField(max_length=30,min_length=8,label="密码",widget=wid_02,validators=[RegexValidator('\d+','只能是数字') ],error_messages={'required': '密码不能为空','min_length': '密码长度不能小于8','max_length': '密码长度不能大于18','invalid': '密码格式错误',})

  r_pwd=forms.CharField(max_length=30,min_length=8,label="确认密码",widget=wid_02,validators=[RegexValidator('\d+','只能是数字') ],error_messages={'required': '密码不能为空','min_length': '密码长度不能小于8','max_length': '密码长度不能大于18','invalid': '密码格式错误',}) #/(?=.*[a-z])(?=.*\d)(?=.*[#@!~%^&*])[a-z\d#@!~%^&*]{8,16}/i

  member_email = forms.EmailField(label="邮箱",widget=wid_01,error_messages={"required":"该字段必填","invalid":"格式不正确"})

  member_tel = forms.CharField(max_length=11, widget=wid_01,label="电话号码",)

  # 局部钩子

  def clean_member_name(self):

  val = self.cleaned_data.get("member_name")

  res = Member.objects.filter(member_name=val)

  if not res:

  return val

  else:

  raise ValidationError("用户名已存在!")

  # 全局钩子

  def clean(self):

  member_pwd=self.cleaned_data.get("member_pwd")

  r_pwd=self.cleaned_data.get("r_pwd")

  if member_pwd and r_pwd:

  if member_pwd==r_pwd:

  # print(self.cleaned_data)

  return self.cleaned_data

  else:

  raise ValidationError('两次密码不一致!')

  else:无锡妇科医院排名 Http://www.csfk0731.com/

  return self.cleaned_data

  后台方法

  from blog.my_forms import *

  # 注册页

  def regist(request):

  res = {'status': None, 'info': None}

  if request.method == "POST":

  form = UserForm(request.POST)

  if not form.is_valid():

  res['status'] = 0

  res['info'] = form.errors

  return HttpResponse(json.dumps(res)) # 把这个结果告诉给前台,ajax

  member_name = request.POST.get("member_name")

  member_nickname = request.POST.get("member_nickname")

  member_pwd = make_password(request.POST.get("member_pwd"))

  member_email = request.POST.get("member_email")

  member_tel = request.POST.get("member_tel")

  old_member_obj = Member.objects.filter(member_tel=member_tel)

  if old_member_obj:

  res['status'] = 3

  res['info'] = '手机号已注册'

  return HttpResponse(json.dumps(res))

  member_obj = Member.objects.create(member_name=member_name, member_nickname=member_nickname,

  member_pwd=member_pwd, member_email=member_email, member_tel=member_tel)

  if member_obj:

  # res = {'status': 1, 'info': '登录成功'}

  res['status'] = 1

  res['info'] = '注册成功,即将跳转至首页'

  else:

  res['status'] = 2

  res['info'] = '发生了一个意料之外的错误,注册失败'

  response_new = HttpResponse(json.dumps(res)) # 把这个结果告诉给前台,ajax

  # response_new.set_cookie("member_id",member_obj.member_id)#设置cookie

  # response_new.set_cookie("member_name", member_obj.member_name)

  # session

  request.session['member_id'] = member_obj.member_id

  request.session['member_name'] = member_obj.member_name

  # response_new.set_cookie("member_id", member_obj.member_id, expires = 60 * 60 * 24 * 7)

  return response_new

  return render(request, 'blog/regist.html')

  页面效果

django项目基于钩子验证的注册功能是怎么样的

上述就是小编为大家分享的django项目基于钩子验证的注册功能是怎么样的了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网精选频道。

--结束END--

本文标题: django项目基于钩子验证的注册功能是怎么样的

本文链接: https://www.lsjlt.com/news/228792.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • django项目基于钩子验证的注册功能是怎么样的
    这期内容当中小编将会给大家带来有关django项目基于钩子验证的注册功能是怎么样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。  前端html  注册  {# 注册的开始#}  onsubmit=&qu...
    99+
    2023-06-02
  • Django商城项目注册功能的实现
    目录设计到的前端知识注册业务实现前端注册业务逻辑导入vue.js和ajax请求的js库准备register.js文件后端业务注册逻辑设计到的前端知识 项目的前端页面使用vue来实现...
    99+
    2024-04-02
  • java怎么实现注册的短信验证码功能
    本篇内容介绍了“java怎么实现注册的短信验证码功能”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!短信验证码实现流程构造手机验证码,生成一个...
    99+
    2023-06-02
  • PHP怎么实现基于梦网云的手机短信验证码功能
    这篇“PHP怎么实现基于梦网云的手机短信验证码功能”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“PHP怎么实现基于梦网云的手...
    99+
    2023-07-05
  • xp网络身份验证在注册表中具体的添加方法是怎样的
    这期内容当中小编将会给大家带来有关xp网络身份验证在注册表中具体的添加方法是怎样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。为了工作的需要,远程桌面连接时必不可少的,现在的连接中有时候需要网络身份验证...
    99+
    2023-06-14
  • 基于SpringBoot和Vue3的博客平台的用户注册与登录功能怎么实现
    今天小编给大家分享一下基于SpringBoot和Vue3的博客平台的用户注册与登录功能怎么实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一...
    99+
    2023-07-06
  • Django组合条件的搜索功能实现是怎么样的
    这期内容当中小编将会给大家带来有关Django组合条件的搜索功能实现是怎么样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一直想着如何做组合条件的搜索!如:前端有三个输入框....输入后过滤,后台写一条...
    99+
    2023-06-04
  • 【OpenAI】Python:基于 Gym-CarRacing 的自动驾驶项目(2)| 车道检测功能的实现 | 边缘检测与分配 | 样条拟合
        猛戳,跟哥们一起玩蛇啊! 👉 《一起玩蛇》🐍 💭 写在前面: 本篇是关于多伦多大学自动驾驶专业项目的博客。GYM-Box2D CarRacing 是一种在 OpenAI Gym 平台上开发和比较强化学习算法的模拟环境。它是流行的 ...
    99+
    2023-09-03
    自动驾驶 人工智能 OpenAI 图像处理
  • 基于CRF序列标注的中文依存句法分析器的Java实现是怎么样的
    这篇文章给大家介绍基于CRF序列标注的中文依存句法分析器的Java实现是怎么样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。这是一个基于CRF的中文依存句法分析器,内部CRF模型的特征函数采用 双数组Trie树(Do...
    99+
    2023-06-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作