ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Djaong之forms组件相关

2021-03-03 16:03:03  阅读:173  来源: 互联网

标签:username obj Djaong form label forms 组件 password


  简单功能实现前端注册显示提示信息

  思路分析:

  通过在post请求中和get请求中同时定义一个字典

  前端通过span标签站位(行级标签根据内部文本大小决定大小)

  当发送时候符合检测返回前端的span中的模板语法值为空

  当发送不符合检测时候则返回定义好的字符串

  后端:

  msg_dict = {'username': '', 'password': ' '}

  if request.method == 'POST':

  username = request.POST.get('username')

  password = request.POST.get('password')

  if 'sb' in username:

  msg_dict['username'] = '账号中不能有sb'

  if 'sb' in password:

  msg_dict['password'] = '密码中也不能有sb'

  return render(request, 'register.html', locals())

  前端:

  username: {{ msg_dict.username }}

  password: {{ msg_dict.password }}

  Forms组件简介

  Forms介绍:

  1.在Djang内部封装有很多的组件,他们有不同的功能

  2.Forms主键就是主要负责检测的功能

  3.Form主键其实就是帮助我们完成了如下的作用

  Forms组件的作用

  1.渲染前端页码 自动生成一些前端的代码

  2.校验数据 后端自动判断数据正确与否

  3.展示提示信息 如果不符合规范将会展示提示信息

  校验数据:

  1.前端也可校验数据,但是由于前端可以通过直接修改的方式操作数据,所有极其不安全

  2.因此所有的数据一定要在后端再次检测

  Forms组件的基本操作

  from django import forms

  class MyForm(forms.Form):

  # 1.username设置的字符串类型最小为3最大为11

  username = forms.CharField(min_length=3, max_length=11)

  # 2.password设置的字符串类型最小为3最大为11

  password = forms.CharField(min_length=3, max_length=11)

  # 3.邮箱格式必须要@,而不像是models中实际为字符串

  email = forms.EmailField()

  Forms组件功能之校验数据

  1.创建Forms组件对象

  form_obj = MyForm(参数传入字典)

  form_obj = views.MyForm({'username':'user','password':'12', 'email':'123'})

  2.数据是否合法:只有全部数据合法才会返回true

  form_obj.is_valid()

  合法:true

  非法:false

  3.查看合法数据

  form_obj.cleand_data

  {'username': 'user'}

  4.查看错误信息

  form_obj.errors

  返回错误信息是一个字典,字典的value值是列表形式

  {'password': ['Ensure this value has at least 3 characters (it has 2).'], 'email': ['Enter a valid email address.']}

  5.字典值传多了

  不会影响判断:Form组件根据自定义的字段去字典中查相应的值,然后进行处理,对于无用信息直接进行处理

  form_obj = views.MyForm({'username':'user','password':'123','email':'123@qq.com','hobby':'study'})

  form_obj.is_valid()

  True

  6.字典值传少了

  影响判断:(可以指定某字段可以为空)

  Forms组件渲染标签(自动生产标签)

  def register(requets):

  form_obj = MyForm() # 定义空的对象,

  return render(request, 'register.html', locals())

  {{form_obj.as_ul}}

  {{form_obj.as_table}}

  {{form_obj.as_p}}

  {{ form_obj.username.label }}:{{ form_obj.username }}

  {{ form_obj.password.label }}:{{ form_obj.password }}

  {{ form_obj.email.label }}:{{ form_obj.email }}

  {% for form in form_obj %}

  {{ form.label }}:{{ form }}

  {% endfor %}

  Forms组件前端展示提示信息

  思路分析:与简单功能实现前端注册提示信息相似

  1.由于在前端我们的input等标签都是由form_obj对象传过去所有在post内外都要定义一个相同的form_obj变量名对象,以确保前端数据的渲染

  2.通过在POST内部将前端的数据放入form_obj中进行判断

  3.如果合法注册成功

  4.如果不合法将提示信息返回到前端

  def register(request):

  from_obj = MyForm()

  if request.method == 'POST':

  print(request.POST)

  from_obj = MyForm(request.POST)

  if from_obj.is_valid():

  return HttpResponse('ok')

  return render(request, 'ab_register.html', locals())

  {% for form in from_obj %}

  {{ form.label }}:{{ form }} {{ form.errors.0 }}

  {% endfor %}

  钩子函数HOOK

  含义:钩子函数是指在特定的节点完成响应的操作

  作用:能够让我们自定义检验规则

  分类:

  1.局部钩子 针对某个字段

  2.全局钩子 针对多个字段

  书写:

  钩子函数在forms类中书写即可

  def clean_username(self):

  username = self.cleaned_data.get('username')

  if 'ww' in username:

  self.add_error('username', '是不能有这个名字滴')

  return username

  def clean(self):

  password = self.cleaned_data.get('password')

  confirm_password = self.cleaned_data.get('confirm_password')

  if password != confirm_password:

  self.add_error('confirm_password', '两次密码不一致')

  return self.cleaned_data

  forms组件相关参数以及补充知识点

  1.label:给字段起名字

  label:'账户'

  2.error_messages:报错信息,要求字典格式

  error_messages={

  'invalid':'邮箱格式不正确',

  'required': "邮箱不能为空"

  }

  3.max_length

  4.min_length

  5.initial

  input框中的初始值

  initial='张三'

  6.validatots:在第一次检测时使用正则表达式

  from django.core.validators import RegexValidator

  class MyForm(Form):

  user = fields.CharField(

  validators=[RegexValidator(r'^[0-9]+$', '请输入数字'), RegexValidator(r'^159[0-9]+$', '数字必须以159开头')],

  )枣庄看妇科医院哪里好 http://mobile.0632fkyy.com/

  input的css和类型渲染

  widget=forms.widgets.PasswordInput(attrs={'class':'form-control c1 c2'})

  1.redioselect

  class LoginForm(forms.Form):

  username = forms.CharField(

  min_length=8,

  label="用户名",

  initial="张三",

  error_messages={

  "required": "不能为空",

  "invalid": "格式错误",

  "min_length": "用户名最短8位"

  }

  )

  pwd = forms.CharField(min_length=6, label="密码")

  gender = forms.fields.ChoiceField(

  choices=((1, "男"), (2, "女"), (3, "保密")),

  label="性别",

  initial=3,

  widget=forms.widgets.RadioSelect()

  )

  2.单选select

  class LoginForm(forms.Form):

  ...

  hobby = forms.ChoiceField(

  choices=((1, "篮球"), (2, "足球"), (3, "双色球"), ),

  label="爱好",

  initial=3,

  widget=forms.widgets.Select()

  )

  3.多选select

  class LoginForm(forms.Form):

  ...

  hobby = forms.MultipleChoiceField(

  choices=((1, "篮球"), (2, "足球"), (3, "双色球"), ),

  label="爱好",

  initial=[1, 3],

  widget=forms.widgets.SelectMultiple()

  )

  4.单选checkbox

  class LoginForm(forms.Form):

  ...

  keep = forms.ChoiceField(

  label="是否记住密码",

  initial="checked",

  widget=forms.widgets.CheckboxInput()

  )

  5.多选checkbox

  class LoginForm(forms.Form):

  ...

  hobby = forms.MultipleChoiceField(

  choices=((1, "篮球"), (2, "足球"), (3, "双色球"),),

  label="爱好",

  initial=[1, 3],

  widget=forms.widgets.CheckboxSelectMultiple()

  )

  用户注册功能实现

  def register(request)

  pass

标签:username,obj,Djaong,form,label,forms,组件,password
来源: https://www.cnblogs.com/gnz49/p/14474993.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有