from组件
目录
- 一.生成页面可用的 HTML标签
- 二.对用户提交的数据进行校验
- 三. form 综合示例:
- 四. modelform(自动根据字段生成表单)
- 五.modelformset
1.form 所有内置字段
Field required=True, 是否允许为空 widget=None, HTML插件 label=None, 用于生成Label标签或显示内容 initial=None, 初始值 help_text='', 帮助信息(在标签旁边显示) error_messages=None, 错误信息 {'required': '不能为空', 'invalid': '格式错误'} validators=[], 自定义验证规则 localize=False, 是否支持本地化 disabled=False, 是否可以编辑 label_suffix=None Label内容后缀 CharField(Field) max_length=None, 最大长度 min_length=None, 最小长度 strip=True 是否移除用户输入空白 IntegerField(Field) max_value=None, 最大值 min_value=None, 最小值 FloatField(IntegerField) ... DecimalField(IntegerField) max_value=None, 最大值 min_value=None, 最小值 max_digits=None, 总长度 decimal_places=None, 小数位长度 BaseTemporalField(Field) input_formats=None 时间格式化 DateField(BaseTemporalField) 格式:2015-09-01 TimeField(BaseTemporalField) 格式:11:12 DateTimeField(BaseTemporalField)格式:2015-09-01 11:12 DurationField(Field) 时间间隔:%d %H:%M:%S.%f ... RegexField(CharField) regex, 自定制正则表达式 max_length=None, 最大长度 min_length=None, 最小长度 error_message=None, 忽略,错误信息使用 error_messages={'invalid': '...'} EmailField(CharField) ... FileField(Field) allow_empty_file=False 是否允许空文件 ImageField(FileField) ... 注:需要PIL模块,pip3 install Pillow 以上两个字典使用时,需要注意两点: - form表单中 enctype="multipart/form-data" - view函数中 obj = MyForm(request.POST, request.FILES) URLField(Field) ... BooleanField(Field) ... NullBooleanField(BooleanField) ... ChoiceField(Field) ... choices=(), 选项,如:choices = ((0,'上海'),(1,'北京'),) required=True, 是否必填 widget=None, 插件,默认select插件 label=None, Label内容 initial=None, 初始值 help_text='', 帮助提示 ModelChoiceField(ChoiceField) ... django.forms.models.ModelChoiceField queryset, # 查询数据库中的数据 empty_label="---------", # 默认空显示内容 to_field_name=None, # HTML中value的值对应的字段 limit_choices_to=None # ModelForm中对queryset二次筛选 ModelMultipleChoiceField(ModelChoiceField) ... django.forms.models.ModelMultipleChoiceField TypedChoiceField(ChoiceField) coerce = lambda val: val 对选中的值进行一次转换 empty_value= '' 空值的默认值 MultipleChoiceField(ChoiceField) ... TypedMultipleChoiceField(MultipleChoiceField) coerce = lambda val: val 对选中的每一个值进行一次转换 empty_value= '' 空值的默认值 ComboField(Field) fields=() 使用多个验证,如下:即验证最大长度20,又验证邮箱格式 fields.ComboField(fields=[fields.CharField(max_length=20), fields.EmailField(),]) MultiValueField(Field) PS: 抽象类,子类中可以实现聚合多个字典去匹配一个值,要配合MultiWidget使用 SplitDateTimeField(MultiValueField) input_date_formats=None, 格式列表:['%Y--%m--%d', '%m%d/%Y', '%m/%d/%y'] input_time_formats=None 格式列表:['%H:%M:%S', '%H:%M:%S.%f', '%H:%M'] FilePathField(ChoiceField) 文件选项,目录下文件显示在页面中 path, 文件夹路径 match=None, 正则匹配 recursive=False, 递归下面的文件夹 allow_files=True, 允许文件 allow_folders=False, 允许文件夹 required=True, widget=None, label=None, initial=None, help_text='' GenericIPAddressField protocol='both', both,ipv4,ipv6支持的IP格式 unpack_ipv4=False 解析ipv4地址,如果是::ffff:192.0.2.1时候,可解析为192.0.2.1, PS:protocol必须为both才能启用 SlugField(CharField) 数字,字母,下划线,减号(连字符) ... UUIDField(CharField) uuid类型 复制代码 内置字段
2.form常用字段和插件
① initial (初始值 input框里面的初始值)
class LoginForm(forms.Form): username = forms.CharField( min_length=8, label="用户名", initial="张三" # 设置默认值 ) pwd = forms.CharField(min_length=6, label="密码")
②error_messages (重写错误信息)
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="密码")
③ password
class LoginForm(forms.Form): ... pwd = forms.CharField( min_length=6, label="密码", widget=forms.widgets.PasswordInput(attrs={'class': 'c1'}, render_value=True) )
④ radioselect (单radio值为字符串)
class LoginForm(forms.Form): username = forms.CharField( #其他选择框或者输入框,基本都是在这个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() )
⑤ 单选 select
class LoginForm(forms.Form): ... hobby = forms.fields.ChoiceField( choices=((1, "篮球"), (2, "足球"), (3, "双色球"), ), label="爱好", initial=3, widget=forms.widgets.Select() )
⑥多选select
class LoginForm(forms.Form): ... hobby = forms.fields.MultipleChoiceField( choices=((1, "篮球"), (2, "足球"), (3, "双色球"), ), label="爱好", initial=[1, 3], widget=forms.widgets.SelectMultiple() )
⑦ 单选 checkbox
class LoginForm(forms.Form): ... keep = forms.fields.ChoiceField( label="是否记住密码", initial="checked", widget=forms.widgets.CheckboxInput() )
⑧ 多选 checkbox
class LoginForm(forms.Form): ... hobby = forms.fields.MultipleChoiceField( choices=((1, "篮球"), (2, "足球"), (3, "双色球"),), label="爱好", initial=[1, 3], widget=forms.widgets.CheckboxSelectMultiple() )
⑨choice (字段注意事项)
方式一:
from django.forms import Form from django.forms import widgets from django.forms import fields class MyForm(Form): user = fields.ChoiceField( # choices=((1, '上海'), (2, '北京'),), initial=2, widget=widgets.Select ) def __init__(self, *args, **kwargs): super(MyForm,self).__init__(*args, **kwargs) # self.fields['user'].choices = ((1, '上海'), (2, '北京'),) # 或 self.fields['user'].choices = models.Classes.objects.all().values_list('id','caption')
方式二:
from django import forms from django.forms import fields from django.forms import models as form_model class FInfo(forms.Form): authors = form_model.ModelMultipleChoiceField(queryset=models.NNewType.objects.all()) # 多选 # authors = form_model.ModelChoiceField(queryset=models.NNewType.objects.all()) # 单选
二.对用户提交的数据进行校验
1.RegexValidator 验证器
from django.forms import Form from django.forms import widgets from django.forms import fields from django.core.validators import RegexValidator class MyForm(Form): user = fields.CharField( validators=[RegexValidator(r'^[0-9]+$', '请输入数字'), RegexValidator(r'^159[0-9]+$', '数字必须以159开头')], )
2.自定义验证函数
import re from django.forms import Form from django.forms import widgets from django.forms import fields from django.core.exceptions import ValidationError # 自定义验证规则 def mobile_validate(value): mobile_re = re.compile(r'^(13[0-9]|15[012356789]|17[678]|18[0-9]|14[57])[0-9]{8}$') if not mobile_re.match(value): raise ValidationError('手机号码格式错误') #自定义验证规则的时候,如果不符合你的规则,需要自己发起错误 class PublishForm(Form): title = fields.CharField(max_length=20, min_length=5, error_messages={'required': '标题不能为空', 'min_length': '标题最少为5个字符', 'max_length': '标题最多为20个字符'}, widget=widgets.TextInput(attrs={'class': "form-control", 'placeholder': '标题5-20个字符'})) # 使用自定义验证规则 phone = fields.CharField(validators=[mobile_validate, ], error_messages={'required': '手机不能为空'}, widget=widgets.TextInput(attrs={'class': "form-control", 'placeholder': u'手机号码'})) email = fields.EmailField(required=False, error_messages={'required': u'邮箱不能为空','invalid': u'邮箱格式错误'}, widget=widgets.TextInput(attrs={'class': "form-control", 'placeholder': u'邮箱'}))
3.钩子方法
① 局部钩子
我们在Fom类中定义 clean_字段名() 方法,就能够实现对特定字段进行校验。
class LoginForm(forms.Form): username = forms.CharField( min_length=8, label="用户名", initial="张三", error_messages={ "required": "不能为空", "invalid": "格式错误", "min_length": "用户名最短8位" }, widget=forms.widgets.TextInput(attrs={"class": "form-control"}) ) ... # 定义局部钩子,用来校验username字段,之前的校验股则还在,给你提供了一个添加一些校验功能的钩子 def clean_username(self): value = self.cleaned_data.get("username") if "666" in value: raise ValidationError("光喊666是不行的") else: return value
②全局钩子 (如在 '确认密码' 中用到)
我们在Fom类中定义 clean() 方法,就能够实现对字段进行全局校验,字段全部验证完,
局部钩子也全部执行完之后,执行这个全局钩子校验。
class LoginForm(forms.Form): ... password = forms.CharField( min_length=6, label="密码", widget=forms.widgets.PasswordInput(attrs={'class': 'form-control'}, render_value=True) ) re_password = forms.CharField( min_length=6, label="确认密码", widget=forms.widgets.PasswordInput(attrs={'class': 'form-control'}, render_value=True) ) ... # 定义全局的钩子,用来校验密码和确认密码字段是否相同,执行全局钩子的时候,cleaned_data里面肯定是有了通过前面验证的所有数据 def clean(self): password_value = self.cleaned_data.get('password') re_password_value = self.cleaned_data.get('re_password') if password_value == re_password_value: return self.cleaned_data #全局钩子要返回所有的数据 else: self.add_error('re_password', '两次密码不一致') #在re_password这个字段的错误列表中加上一个错误,并且clean_data里面会自动清除这个re_password的值,所以打印clean_data的时候会看不到它 raise ValidationError('两次密码不一致')
三. form 综合示例:
1. 使用form组件建立HTML标签,可在views.py文件中
也可在appo1 下建立一个.py文件(更整洁)
2.在views.py 文件中
from django.shortcuts import render from app01 import models # Create your views here. from app01 import form_test #引入form 表单建立验证的文件 def register(request): form_obj = form_test.MyForm() #引入建立form表单的对象 if request.method == "GET": return render(request,'register_page.html',{'form_obj':form_obj}) else: #用户提交过来的数据 # print(request.POST) form_obj = form_test.MyForm(request.POST) # print(form_obj.is_valid()) # print(form_obj.cleaned_data) print('>>>>',form_obj.fields) if form_obj.is_valid(): print(form_obj.cleaned_data) #获取验证通过的数据 # else: # print(form_obj.errors.as_data()) #拿错误信息 # print(form_obj.errors.as_data()) # print(form_obj) # username = request.POST.get('username') # password = request.POST.get('password') # print(username,password) # if username == '' # print(form_obj.cleaned_data) return render(request,'register_page.html',{'form_obj':form_obj})
3.在form_test.py 文件中
from django import forms from django.forms import ValidationError from django.core.validators import RegexValidator from app01 import models import re def mobile_validate(value): mobile_re = re.compile(r'^1[0-9]*$') if not mobile_re.match(value): raise ValidationError('手机号码格式错误') #自定义验证规则的时候,如果不符合你的规则,需要自己发起错误 class MyForm(forms.Form): uname = forms.CharField( required=True, label='用户名:', # initial='张三', #输入框中的默认值 min_length=6, #最小长度 strip=True, #去掉两侧空白 max_length=8, #最大长度 # validators=[mobile_validate,], validators=[RegexValidator(r'^[0-9]+$', '请输入数字'), RegexValidator(r'^159[0-9]+$', '数字必须以159开头')], # disabled=True, error_messages={ 'required':'用户名不能为空', 'min_length':'你太短了,', 'max_length':'太长了', }, # widget=forms.TextInput(attrs={'class':'form-control'}), help_text='请输入用户名,不能短于6个字符,不能超过8个字符!' ) pword = forms.CharField( label='密码:', # required=False, # widget=forms.PasswordInput(attrs={'class':'form-control'}), widget=forms.PasswordInput(), ) re_pword = forms.CharField( label='确认密码:', # required=False, # widget=forms.PasswordInput(attrs={'class':'form-control'}), widget=forms.PasswordInput(), ) #局部钩子,在自定义的form类里面针对每个字段都可以写一些定制的规则,def clean_字段名(self): def clean_pword(self): data1 = self.cleaned_data.get('pword') if '666' in data1: raise ValidationError('你还不够6,包含敏感词汇') else: return data1 # def clean_uname(self): # # data1 = self.cleaned_data.get('uname') # if '666' in data1: # raise ValidationError('你还不够6,包含敏感词汇') # else: # return data1 # data1 = self.cleaned_data.get('pword') # data2 = self.cleaned_data.get('re_pword') # if data1 == data2: #全局钩子 def clean(self): p1 = self.cleaned_data.get('pword') p2 = self.cleaned_data.get('re_pword') if p1 == p2: return self.cleaned_data else: self.add_error('re_pword','和你上面输入的密码不同@@@') # raise ValidationError('两次输入的密码不同!!!') # sex = forms.CharField( # label='请选择性别:', # widget=forms.RadioSelect( # choices=((1,'男'),(2,'女'),('3','二椅子')), # ) # ) # sex = forms.ChoiceField( # # choices=(('1', '男'), ('2', '女'), ('3', '二椅子')), # # widget=forms.RadioSelect, # # widget=forms.CheckboxSelectMultiple, # # widget=forms.CheckboxSelectMultiple, # widget=forms.SelectMultiple, # # ) userinfo = forms.ModelMultipleChoiceField( label='请选择作者:', queryset=models.Author.objects.all(), ) email = forms.EmailField()
4.在 .html 文件中
{% load static %} <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Bootstrap 101 Template</title> <link rel="stylesheet" href="{% static 'bootstrap/css/bootstrap.min.css' %}"> </head> <body> <form action="{% url 'register' %}" method="post" novalidate> # novalidate : 自定义错误提示 {% csrf_token %} {# {{ form_obj.as_p }}#} {# <p>#} {# 所有字段错误汇总#} {# {{ form_obj.errors }}#} {# </p>#} <div> <div> {{ form_obj.uname.label }} #引入 '用户民' {{ form_obj.uname }} #引入输入框 <span style="color: red;font-size: 12px;"> {{ form_obj.uname.errors.0 }} #错误提示 </span> </div> <div> {{ form_obj.uname.help_text }} #输入提示 </div> </div> <p> {{ form_obj.pword.label }} {{ form_obj.pword }} <span style="color: red;font-size: 12px;"> {{ form_obj.pword.errors.0 }} </span> </p> <p> {{ form_obj.re_pword.label }} #确认密码 {{ form_obj.re_pword }} <span style="color: red;font-size: 12px;"> {{ form_obj.re_pword.errors.0 }} </span> </p> <p> ------ {{ form_obj.errors }} </p> {# <p>#} {# {{ form_obj.sex.label }}#} {# {{ form_obj.sex }}#} {# <span style="color: red;font-size: 12px;">#} {# {{ form_obj.sex.errors.0 }}#} {# </span>#} {# </p>#} <p> {{ form_obj.userinfo.label }} {{ form_obj.userinfo }} {{ form_obj.userinfo.errors.0 }} </p> <p> {{ form_obj.email.label }} {{ form_obj.email }} {{ form_obj.email.errors.0 }} </p> <p> <button>提交</button> </p> </form> </body> </html>
四. modelform(自动根据字段生成表单)
1.常用属性
class XXXModelForm(ModelForm) a. class Meta: model, # 对应Model的 fields=None, # 字段 exclude=None, # 排除字段 labels=None, # 提示信息 help_texts=None, # 帮助提示信息 widgets=None, # 自定义插件 error_messages=None, # 自定义错误信息(整体错误信息from django.core.exceptions import NON_FIELD_ERRORS) field_classes=None # 自定义字段类 (也可以自定义字段) localized_fields=('birth_date',) # 本地化,如:根据不同时区显示数据 如: 数据库中 2016-12-27 04:10:57 setting中的配置 TIME_ZONE = 'Asia/Shanghai' USE_TZ = True 则显示: 2016-12-27 12:10:57 b. 验证执行过程 is_valid -> full_clean -> 钩子 -> 整体错误
c. 字典字段验证
def
clean_字段名(
self
):
# 可以抛出异常
# from django.core.exceptions import ValidationError
return
"新值"
d. 用于验证
model_form_obj
=
XXOOModelForm()
model_form_obj.is_valid()
model_form_obj.errors.as_json()
model_form_obj.clean()
model_form_obj.cleaned_data
e. 用于创建
model_form_obj
=
XXOOModelForm(request.POST)
#### 页面显示,并提交 #####
# 默认保存多对多
obj
=
form.save(commit
=
True
)
# 不做任何操作,内部定义 save_m2m(用于保存多对多)
obj
=
form.save(commit
=
False
)
obj.save()
# 保存单表信息
obj.save_m2m()
# 保存关联多对多信息
f. 用于更新和初始化
obj
=
model.tb.objects.get(
id
=
1
)
model_form_obj
=
XXOOModelForm(request.POST,instance
=
obj)
...
2.示例
在项目中新建立forms.py 文件
from django import forms
# 注册的form class RegForm(forms.ModelForm): password = forms.CharField(widget=forms.PasswordInput, label='密码', min_length=6) # 重写默认字段 re_password = forms.CharField(widget=forms.PasswordInput, label='确认密码', min_length=6) # 新增字段 class Meta: model = models.UserProfile # 指定model fields = '__all__' #所有字段 ['username','password'] # 指定字段 exclude = ['is_active'] labels = { 'username': '用户名' # 两种设置label方式,另一种是设置 verbose_name=' '
widgets = { 'username': forms.TextInput(attrs={'class': 'form-control', 'placeholder': '用户名'}), # 'password': forms.PasswordInput(attrs={'class': 'form-control'}) } error_messages = { 'min_length': '不能少于6位' } def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) # 自定义操作 for field in self.fields.values(): field.widget.attrs.update({'class': 'form-control'}) def clean(self): # 全局钩子 pwd = self.cleaned_data.get('password', '') re_pwd = self.cleaned_data.get('re_password', '') if pwd == re_pwd: # 密码加密 md5 = hashlib.md5() md5.update(pwd.encode('utf-8')) pwd = md5.hexdigest() self.cleaned_data['password'] = pwd return self.cleaned_data # 两次密码不一致 self.add_error('re_password', '两次密码不一致!!') raise ValidationError('两次密码不一致')
在view.py中进行实例化(操作更简单)
from crm.froms import RegForm #引入文件
# 注册 def reg(request): # 判断请求方式 if request.method == 'POST': form_obj = RegForm(request.POST) # 对数据进行校验 if form_obj.is_valid(): form_obj.save() return redirect(reverse('login')) else: form_obj = RegForm() #实例化 return render(request, 'reg.html', {'form_obj': form_obj})
1.对多个对象直接进行编辑和保存
2.示例:
①在forms.py 文件中(与modelform相同)
from django.core.exceptions import ValidationError
# BootstropFormclass BSForm(forms.ModelForm): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) # 自定义操作 for field in self.fields.values(): if not isinstance(field, forms.BooleanField): # field.widget.attrs['class'] = 'form-control' field.widget.attrs.update({'class': 'form-control'})
# 学习记录的formclass StudyRecordForm(BSForm): class Meta: model = models.StudyRecord fields = "__all__" def clean_note(self): #局部钩子 note = self.cleaned_data.get('note', '') if not note: note = '' if '666' in note: raise ValidationError('不能太6') return note
②在view.py 文件中
from crm.froms import StudyRecordForm
from django.forms import modelformset_factory
# 展示学习记录 def study_record_list(request, course_record_id): FormSet = modelformset_factory(models.StudyRecord, StudyRecordForm, extra=0) #注意格式 formset = FormSet(queryset=models.StudyRecord.objects.filter(course_record_id=course_record_id)) #注意格式 if request.method == 'POST': formset = FormSet(request.POST) if formset.is_valid(): formset.save() return redirect(reverse('study_record_list', args=(course_record_id,))) return render(request, 'teacher/study_record_list.html', {'formset': formset})
③.在 . html 文件中
{% extends 'layout.html' %} {% block content %} {% load my_tags %} <div> </div> <form action="" method="get" class="form-inline pull-right"> <input type="text" name="query" class="form-control"> <button class="btn btn-sm btn-primary">搜索</button> </form> <form action="" method="post" class="form-inline"> {% csrf_token %} {{ formset.management_form }} #必带 <table class="table table-bordered table-hover"> <thead> <tr> <th>选择</th> <th>序号</th> <th>学生</th> <th>考勤</th> <th>成绩</th> <th>批语</th> <th>备注</th> </tr> </thead> <tbody> {% for form in formset %} <tr> <td> <input type="checkbox" name="ids" value="{{ course_record.pk }}"> </td> {{ form.id }} #必带 <td>{{ forloop.counter }}</td> <td>{{ form.instance.student }}</td> <td>{{ form.attendance }}</td> <td>{{ form.score }}</td> <td>{{ form.homework_note }}</td> <td>{{ form.note }}</td> <span style="display: none"> {{ form.student }} {{ form.course_record }} </span> #必带 </tr> {% endfor %} </tbody> </table> <button class="btn btn-sm btn-primary">保存</button> </form> {% endblock %}
from组件的更多相关文章
- ExtJS 4.2 评分组件
上一文章是扩展ExtJS自带的Date组件.在这里将创建一个评分组件. 目录 1. 介绍 2. 示例 3. 资源下载 1. 介绍 代码参考的是 Sencha Touch 2上的一个RatingStar ...
- react组件的生命周期
写在前面: 阅读了多遍文章之后,自己总结了一个.一遍加强记忆,和日后回顾. 一.实例化(初始化) var Button = React.createClass({ getInitialState: f ...
- react-router 组件式配置与对象式配置小区别
1. react-router 对象式配置 和 组件式配置 组件式配置(Redirect) ----对应---- 对象式配置(onEnter钩子) IndexRedirect -----对应-- ...
- Angular2入门系列教程3-多个组件,主从关系
上一篇 Angular2项目初体验-编写自己的第一个组件 好了,前面简单介绍了Angular2的基本开发,并且写了一个非常简单的组件,这篇文章我们将要学会编写多个组件并且有主从关系 现在,假设我们要做 ...
- Angular2入门系列教程2-项目初体验-编写自己的第一个组件
上一篇 使用Angular-cli搭建Angular2开发环境 Angular2采用组件的编写模式,或者说,Angular2必须使用组件编写,没有组件,你甚至不能将Angular2项目启动起来 紧接着 ...
- .NET Core 首例 Office 开源跨平台组件(NPOI Core)
前言 最近项目中,需要使用到 Excel 导出,找了一圈发现没有适用于 .NET Core的,不依赖Office和操作系统限制的 Office 组件,于是萌生了把 NPOI 适配并移植到 .NET C ...
- .NetCore中的日志(1)日志组件解析
.NetCore中的日志(1)日志组件解析 0x00 问题的产生 日志记录功能在开发中很常用,可以记录程序运行的细节,也可以记录用户的行为.在之前开发时我一般都是用自己写的小工具来记录日志,输出目标包 ...
- BootStrap_02之全局样式及组件
1.BootStrap指定的四种屏幕尺寸: ①超大PC屏幕--lg(large):w>=1200px: ②中等PC屏幕--md(medium):1200px>w>=992px: ③P ...
- ExtJS 4.2 组件介绍
目录 1. 介绍 1.1 说明 1.2 组件分类 1.3 组件名称 1.4 组件结构 2. 组件的创建方式 2.1 Ext.create()创建 2.2 xtype创建 1. 介绍 1.1 说明 Ex ...
- ExtJS 4.2 组件的查找方式
组件创建了,就有方法找到这些组件.在DOM.Jquery都有各自的方法查找元素/组件,ExtJS也有自己独特的方式查找组件.元素.本次从全局查找.容器内查找.form表单查找.通用组件等4个方面介绍组 ...
随机推荐
- JDBC-day1
package cn.gzsxt.test; import java.sql.Connection;import java.sql.DatabaseMetaData;import java.sql.D ...
- VMware 物理机可以复制文件到虚拟机,却无法从虚拟机复制文件到物理机(已解决)
物理机运行,输入gpedit.msc确定,把如图的那个改成“已禁用” 之后虚拟机重新安装VMware Tool重启即可 事情是这样的,每次打开IDM会 “警告:您在以管理员身份运行IDM,在该模式下, ...
- java基础知识—数组
1.数组:是一个变量,存储相同数据类型的一组数据. 2.数据的优点:减少代码量.易查找. 3.数组的使用步骤: 1)声明数组:int scores []: 2)开辟空间:scores = new in ...
- find命令配合sed命令使用
1.查找当前目录下所有以txt文件中包含123的数字都替换成5678 find ./ -name "*.txt" -exec grep "123" {} \; ...
- sdl2在vs2012上的配置
网上关于sdl2的配置教程很多,我尽量将我遇到的问题分享给大家. 首先,打开VS2012: 2.点击新建项目:选择空项目,确定即可 (文件名,保存位置,解决方案名称,可以随便填,(我取名为sdlpla ...
- URL和URL比较
浅谈URI和URL URI(Uniform Resource Identifier)字面上的意思是,统一资源标示符 URL(Uniform Resource Locator),统一资源定位符 光从字面 ...
- Groovy学习笔记-布尔求值
1.判断字符串为null或空字符串 def str = null if(str) println 'str is not null' else println 'str is null' str = ...
- privacy policy url
提交审核资料时需要给出隐私条约资料网址privacy policy url 参考新浪微博地址http://m.weibo.cn/page/646?entry=client
- SQL注入之Sqli-labs系列第三十八关、第三十九关,第四十关(堆叠注入)
0x1 堆叠注入讲解 (1)前言 国内有的称为堆查询注入,也有称之为堆叠注入.个人认为称之为堆叠注入更为准确.堆叠注入为攻击者提供了很多的攻击手段,通过添加一个新 的查询或者终止查询,可以达到修改数据 ...
- 【EMV L2】Select PSE应用选择相关的卡片数据格式
The data field of the response message contains the FCI specific to the selected PSE, DDF, or ADF. 一 ...