zoukankan      html  css  js  c++  java
  • Django之form表单常用字段与插件

     1 from django.shortcuts import render,HttpResponse
     2 from django import forms
     3 from app01 import models
     4 from django.core.validators import RegexValidator
     5 import re
     6 from django.core.exceptions import ValidationError
     7  
     8 # Create your views here.
     9  
    10 #自定义校验函数,直接在字段validators中使用
    11 def name_valid(value):
    12     name_re=re.compile(r'^[a-zA-Z_]+$')
    13     if not name_re.match(value):
    14         raise ValidationError("只能以字母下划线开头!")
    15  
    16 class Myform(forms.Form):
    17  
    18     name = forms.CharField(
    19         # required=True,  # 默认为True
    20 label='用户名',
    21         min_length=2,
    22         max_length=6,
    23         initial='abc',  # 默认值
    24         help_text='长度为2到6个字符!',  # 帮助信息
    25         error_messages=[{  # 自定义错误提示信息(默认为英文)
    26             'required': '不能为空!',
    27             'min_length': '不能少于2个字符!'
    28         }],
    29         validators=[RegexValidator(r'^(w)+$','用户名只能有字母数字下划线组成!'), name_valid],  # 自定义校验规则(列表中放自定义函数名,或者引入django内置的RegexValidator校验器)
    30         # disabled=True#默认为True显示
    31  
    32     )
    33  
    34     # 密文
    35     password = forms.CharField(
    36         widget=forms.TextInput(attrs={'type': 'password'}),
    37     )
    38     # 日期
    39     birth = forms.DateField(
    40         widget=forms.TextInput(attrs={'type': 'date'})
    41     )
    42     # 单选
    43     sex = forms.ChoiceField(
    44         choices=[('0', ''), ('1', '')],
    45         # widget=forms.Select()#下拉单选(默认)
    46         # widget=forms.RadioSelect()#正常单选
    47  
    48         # widget = forms.CheckboxInput()#记住账号密码(label='记住账号密码',initial='checked',choices=[('True',1),('False',0)])
    49     )
    50      #单选:通过orm显示数据
    51     publish = forms.ModelChoiceField(
    52         queryset=models.Publish.objects.all()  # 只能用all结果才能正常显示,必须设置__str__,否则拿到是对象
    53         # widget和ChoiceFiled一样设置
    54     )
    55  
    56     # 多选
    57     hobby = forms.MultipleChoiceField(
    58  
    59         choices=[('1', 'wan '), ('2', 'ee')],
    60         # widget=forms.SelectMultiple()#下拉多选(默认)
    61         # widget=forms.CheckboxSelectMultiple()#正常多选
    62     )
    63 #多选:通过orm显示数据
    64     author = forms.ModelMultipleChoiceField(
    65         queryset=models.Author.objects.all()  # 只能用all结果才能正常显示,必须设置__str__,否则拿到是对象
    66         # widget和MultipleChoiceField一样设置
    67     )
    68  
    69     def __init__(self,*args,**kwargs):#初始化对字段进行样式设置
    70         super().__init__(*args,**kwargs)
    71         for filed in self.fields:
    72             self.fields[filed].widget.attrs.update({'class':'form-control'})
    73  
    74 def form(request):
    75     if request.method=='GET':
    76         form_obj=Myform()
    77         return  render(request, 'form.html', {'form_obj':form_obj})
    78     else:
    79         form_obj=Myform(request.POST)#对提交的数据进行组件类实例化
    80         if form_obj.is_valid():#校验提交的数据对象(字段校验-->validators校验(RegexValidator模块或者自定义函数)-->局部钩子-->全局钩子)
    81             print(form_obj.cleaned_data)#form_obj.clean_data已经校验完的所有值
    82             return HttpResponse('ok')
    83         else:
    84             return render(request,'form.html',{'form_obj':form_obj})#检测到错误,刷新页面,保留原数据
  • 相关阅读:
    DWVA系列-2-csrf Medium等级 绕过refer的csrf 有点小曲折
    DWVA系列-2-csrf low等级
    DWVA系列-1-brute Impossible等级 预防SQL注入 一次性token+预编译
    DWVA系列-1-brute medium等级
    DWVA系列-1-brute low等级
    获取SD卡剩余容器
    MD5Encoder
    本地缓存
    内存缓存
    网络缓存
  • 原文地址:https://www.cnblogs.com/open-yang/p/11223134.html
Copyright © 2011-2022 走看看