码迷,mamicode.com
首页 > 其他好文 > 详细

Djaong之forms组件相关

时间:2021-03-04 13:04:48      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:语法   def   实现   账户   sel   知识点   好的   enter   请求   

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

  思路分析:

  通过在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

Djaong之forms组件相关

标签:语法   def   实现   账户   sel   知识点   好的   enter   请求   

原文地址:https://www.cnblogs.com/gnz49/p/14474993.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!