在默认的情况下,不论是对于编辑模式还是显示模式,一个布尔类型的属性值总是以一个CheckBox的形式呈现出来。我们创建如下一个表示员工的类型Employee,它具有一个布尔类型的属性IsPartTime表示该员工是否为兼职。
现在我们希望的是将所有布尔类型对象显示为两个RadioButton,具体的显示效果如下图所示。那么我们就可以通过创建一个Model类型为Boolean的View来创建一个模板,使之改变所有布尔类型对象的默认呈现效果。
由于我们需要改变的是布尔类型对象在编辑模式下的呈现形式,所以我们需要将作为模板的分布View定义在EditorTemplates目录下,这个目录可以存在于Views/ Shared下,也可以存在于Views/{ControllerName}下。由于ASP.NET MVC是采用数据类型作为匹配条件来寻找对应的模板的,所以我们需要将分部模板View命名为Boolean。下面的代码片断体现了这个分部试图的整个定义,我们通过调用HtmlHelper的RadioButton方法将两个布尔值(True/False)映射为对应的RadioButton,并且采用
来布局。
@model bool
@Html.RadioButton("",true,Model)是
@Html.RadioButton("",false,!Model)否
值得一提的是,我们没有指定RadioButton的名称,而是指定一个空字符串,Html本身会对其进行命名,而命名的依据就是本章介绍的核心:Model元数据。Employee的IspartTime属性呈现在界面上对应的HTML如下所示,我们可以看到两个类型为radio的 元素的name被自动赋上了对应的属性名称。美中不足的是它们具有相同的ID,如果希望让ID具有唯一性,可以对模板进行更加细致的定制。
二、预定义模板
上面我们介绍如何通过View的方式创建模板进而控制某种数据类型或者某个目标元素最终在UI界面上的HTML呈现方式,实际上在ASP.NET MVC的内部还定义了一系列的预定义模板。当我们调用HtmlHelper/HtmlHelper的模板方法对Model或者Model的某个成员进行呈现的时候,系统会根据当前的呈现模式(显示模式和编辑模式)和Model元数据获取一个具体的模板(自定义模版或者预定义模版)。由于Model具有显示和编辑两种呈现模式,所以定义在ASP.NET MVC内部的默认模版分为这两种基本的类型。接下来我们就逐个介绍这些预定义模版以及最终的HTML呈现方式。
EmailAddress 该模板专门针对用于表示Email地址的字符串类型的数据成员,它将目标元素呈现为一个href属性具有“mailto:”前缀的链接( )。由于该模板仅仅用于Email地址的显示,所以只在显示模式下有效,或者说ASP.NET MVC仅仅定义了基于显示模式的EmailAddress模板。为了演示数据在不同模板下的呈现方式,我们定义了如下一个简单的数据类型Model,我们通过在属性Foo上应用UIHintAttribute特性将模板名称设置为“EmailAddress”。
public class Model
{
[UIHint("EmailAddress")]
public string Foo { get; set; }
}
然后在一个基于Model类型的强类型View中,我们通过调用HtmlHelper的DisplayFor方法将一个具体的Model对象的Foo属性以显示模式呈现出来。
@model Model
@Html.DisplayFor(m=>m.Foo)
如下的代码片断表示Model的Foo属性对应的HTML,我们可以看到它就是一个针对Email地址的连接。当我们点击该链接的时候,相应的Email编辑软件(比如Outlook)会被开启用于针对目标Email地址的邮件编辑。
HiddenInput 关于默认模板HiddenInput我们不应该感到模式,前面介绍的HiddenInputAttribute特性就是将表示Model元数据的ModelMetadata对象的TemplateHint属性设置为HiddenInput。如果目标元素采用HiddenInput模板,在显示模式下内容会以文本的形式显示;编辑模式下不仅会以文本的方式显示其内容,还会生成一个对应的type属性为“hidden”的 元素。如果表示Model元数据的ModelMetadata对象的HideSurroundingHtml属性为True(将应用在目标元素上的特性HiddenInputAttribute的DisplayValue属性设置为False),不论是显示模式还是编辑模式下显示的文本都将消失。
同样以上面定义的数据类型Model为例,我们通过在Foo属性上应用UIHintAttribute特性将模板名称设置为“HiddenInput”。
public class Model
{
[UIHint("HiddenInput")]
public string Foo { get; set; }
public bool Bar { get; set; }
public decimal Baz { get; set; }
}
然后在一个基于Model类型的强类型View中分别调用HtmlHelper的DisplayFor和EditFor方法将一个具体的Model对象的Foo属性以显示和编辑模式呈现出来。
@model Model
@Html.DisplayFor(m=>m.Foo)
@Html.EditorFor(m=>m.Foo)
分别以两种模式呈现出来的Foo属性对应的HTML如下(包含在花括号中的GUID表示属性值)。第一行是针对显示模式的,可以看出最终呈现出来仅限于表示属性值得文本;而编辑模式对应的HTML中不仅包含属性值文本,还具有一个对应的类型为“hidden”的 元素。
{42A1E9B7-2AED-4C8E-AB55-78813FC8C233}
{42A1E9B7-2AED-4C8E-AB55-78813FC8C233}
现在我们对数据类型Model做一下简单修改,将应用在属性Foo上的UIHintAttribute特性替换成HiddenInputAttribute特性,并将其DisplayValue属性设置成False。
public class Model
{
[HiddenInput(DisplayValue = false)]
public string Foo { get; set; }
public bool Bar { get; set; }
public decimal Baz { get; set; }
}
由于应用在目标元素上的HiddenInputAttribute特新的DisplayValue属性会最终控制对应ModelMetadata的HideSurroundingHtml属性,而后者控制是否需要生成用于显示目标内容的HTML。所以针对针对的Model定义,最终会生成如下一段HTML。
Html
如果目标对象的内容包含一些HTML,并需要在UI界面中原样呈现出来,我们可以采用Html模板。和EmailAddress模板一样,该模板仅限于显示模式 。为了演示Html模板对目标内容的呈现方法与默认呈现方式之间的差异,我们定义了如下一个数据类型Model。该数据类型具有两个字符串类型的属性Foo和Bar,其中Foo上面应用UIHintAttribute特性将模板名称设置为“Html”。
public class Model
{
[UIHint("Html")]
public string Foo { get; set; }
public string Bar { get; set; }
}
现在我们创建一个具体的Model对象,并将Foo和Bar设置为一段表示链接的文本(google.com ),最终在一个基于Model类型的强类型View中通过调用HtmlHelper的DisplayFor方法将这两个属性以显示模式呈现出来。
@model Model
@Html.DisplayFor(m=>m.Foo)
@Html.DisplayFor(m => m.Bar)
从如下所示的表示Foo和Bar两属性的HTML中我们不难看出:采用Html模板的Foo属性的内容原样输出,而包含在属性Bar中的HTML都进行了相应的编码。
Text与String
不论是在显示模式还是编辑模式,Text和String模板具有相同的HTML呈现方式(实际上在ASP.NET MVC内部,两种模版最终生成的HTML是通过相同的方法产生的)。对于这两种模版来说,目标内容在显示模式下直接以文本的形式输出;而在编辑模式下则对应着一个单行的文本框。
为了演示两种模版的同一性,我们对上面定义数据类型Model略作修改,在属性Foo和Bar上应用UIHintAttribute特性并将模版名称分别设置为String和Text。
public class Model
{
[UIHint("String")]
public string Foo { get; set; }
[UIHint("Text")]
public string Bar { get; set; }
}
然后我们创建一个具体的Model对象,并在一个基于该Model类型的强类型View中通过调用HtmlHelper的DisplayFor和EditorFor将两个属性分别以显示和编辑模式呈现出来。
@model Model
@Html.DisplayFor(m=>m.Foo)
@Html.DisplayFor(m => m.Bar)
@Html.EditorFor(m=>m.Foo)
@Html.EditorFor(m => m.Bar)
如下所示的代码片断体现了上述四个元素对应的HTML(“Dummy text …”是Foo和Bar的属性值),可以看到采用了Text和String模板的两个属性在显示和编辑模式下具有相同的呈现方式。编辑模式下输出的类型为“text”的 元素表示CSS特性类型的class属性被设置为“text-box single-line”,意味着这是一个基于单行的文本框。
值得一提的是,ASP.NET MVC内部采用基于类型的模板匹配机制,对于字符串类型的数据成员,如果没有显式设置采用的模板名称,默认情况下会采用String模板。
Url
与EmailAddress和Html一样,模板Url也仅限于显示模式。对于某个表示为Url的字符串,如果我们希望它最终以一个连接的方式呈现在最终生成的HTML中,我们采用该模板。如下面的代码片断所示,我们通过应用UIHintAttribute特性将模板Url应用到属性Foo中。
public class Model
{
[UIHint("Url")]
public string Foo { get; set; }
}
我们创建一个具体的Model对象,并将Foo属性设置为一个表示Url的字符串“http://www.asp.net”,最后通过如下的方式将该属性以显示模式呈现出来。
@model Model
@Html.DisplayFor(m=>m.Foo)
如下面的代码片断所示,该属性最终呈现为一个href属性和文本内容均属性值得连接( )。
MultilineText 一般的字符串在编辑模式下会呈现为一个单行的文本框(类型为“text”的 元素),而MultilineText模板会将表示目标内容的字符串通过一个
public class Model
{
[UIHint("MultilineText")]
public string Foo { get; set; }
}
现在我们创建一个具体的Model对象并通过如下的形式将Foo属性以编辑模式呈现在某个基于Model类型的强类型View中。
@model Model
@Html.EditorFor(m=>m.Foo)
如下所示的代码片断表示Model的Foo属性呈现在UI界面中的HTML(“dummy text …”是是Foo的属性值),我们可以看到这是一个< textarea >元素。表示CSS样式类型的class属性被设置为“text-box multi-line”,意味着它是以多行的效果呈现。
Password
对于表示密码字符串来说,在编辑模式下应该呈现为一个类型为“password”的 元素,使我们输入的内容以掩码的形式显示出来以保护密码的安全性。在这种情况下我们可以采用Password模板,该模板和MultilineText一样也仅限于编辑模式。如下面的代码片断所示,我们在Model的Foo属性上应用UIHintAttribute特性将模式名称设置为“Password”。
public class Model
{
[UIHint("Password")]
public string Foo { get; set; }
}
我们创建一个具体的Model对象,并通过如下的形式将Foo属性以编辑模式呈现在某个基于Model的强类型View中。
@model Model
@Html.EditorFor(m=>m.Foo)
该Foo属性最终会以如下的形式通过一个类型为“Password”的 元素呈现出来,表示CSS样式类型的class属性被设置为“text-box single-line password”,意味着呈现效果为一个单行的文本框。
Decimal
如果采用Decimal模板,代表目标元素的数字不论其小数位数是多少,都会最终被格式化为两位小数。在显示模式下,被格式化的数字直接以文本的形式呈现出来;在编辑模式下则对应着一个单行的文本框架。如下面的代码片断所示,我们在数据类型Model中定义了两个对象类型属性Foo和Bar,上面应用了UIHintAttribute特性并将模板名称指定为“Decimal”。
public class Model
{
[UIHint("Decimal")]
public object Foo { get; set; }
[UIHint("Decimal")]
public object Bar { get; set; }
}
我们创建一个具体的Model对象,将它的Foo和属性分别设置为整数123和浮点数3.1415(4位小数),最终通过如下的形式将它们以显示和编辑的模式呈现在一个基于Model类型的强类型View中。
@model Model
@Html.DisplayFor(m=>m.Foo)
@Html.DisplayFor(m=>m.Bar)
@Html.EditorFor(m=>m.Foo)
@Html.EditorFor(m =>m.Bar)
上述四个元素在最终呈现的UI界面中对应着如下的HTML,我们可以看到最终显示的都是具有两位小数的数字。
Boolean
通过本章最开始的实例演示我们知道一个布尔类型的对象在编辑模式下会以一个类型为“checkbox”的 元素的形式呈现,实际上在显示模式下它依然对应着这么一个元素,只是其disabled属性会被设置为True使之处于只读状态。布尔类型的这种默认呈现方式源自“Boolean”模板默认被使用。
当布尔类的目标元素以编辑模式进行呈现的时候,除了生成一个一个类型为“checkbox”的 元素之外还会附加产生一个类型为“hidden”的 元素。如下面的代码片断所示,这个hidden元素具有与CheckBox相同的名称,但是值为False,它存在的目的在于当CheckBox没有被勾选的情况下通过对应的hidden元素向服务区提交相应的值(False),因为没有被勾选的CheckBox的值是不会包含在请求中的。
Boolean和String、Decimal以及后面我们介绍的Object一样属于是基于CLR类型的模板。由于ASP.NET在内部采用基于类型的模板匹配策略,如果没有显示设置采用的模板类型,相应类型的元素会默认采用与之匹配的模板。
Collection
顾名思义,Collection模板用于集合类型的目标元素的显示与编辑。对应采用该模板的类型为集合(实现了IEnumerable接口)的目标元素,在调用HtmlHelper或者HtmlHelper以显示或者编辑模式对其进行呈现的时候,会遍历其中的每个元素,并根据基于集合元素的Model元数据决定对其的呈现方法。同样一我们定义的数据类型Model为例,我们按照如下的方式将它的Foo属性类型改为对象数组,上面应用了UIHintAttribute特性并将模板名称 设置为“Collection”。
public class Model
{
[UIHint("Collection")]
public object[] Foo { get; set; }
}
然后按照下面的方式创建一个包含三个对象的数组,作为数据元素的三个对象类型为别是数字、字符串和布尔,然后将该数组作为Foo属性创建一个具体的Model对象。
object[] foo = new object[]
{
123.00,
"dummy text ...",
true
};
Model model = new Model { Foo = foo };
在一个基于Model类型的强类型View中,我们分别调用HtmlHelper的DisplayFor和EditorFor方法将上面创建的Model对象的Foo属性以显示和编辑模式呈现出来。
@model Model
@Html.DisplayFor(m=>m.Foo)
@Html.EditorFor(m=>m.Foo)
Model对象的Foo属性最终呈现出来的HTML如下所示,我们可以看到不论是显示模式还是编辑模式,基本上就是对集合元素呈现的HTML的组合而已。
我们说过,ASP.NET 内部采用基于类型的模板匹配策略,如果通过ModelMetadata对象表示的Model元数据不能找到一个具体的模板,最终都会落到Object模板上。Object模板对目标对象的呈现方式很简单,它通过ModelMetadata的Proeprties属性得到所有基于属性的Model元数据。针对每个表示属性Model元数据的ModelMetadata,它会根据DisplayName或者属性名称生成一个标签(实际上是一个内部文本为显示名称的
元素),然后根据元数据将属性值以显示或者编辑的模式呈现出来。
public class Address
{
[DisplayName("省")]
public string Province { get; set; }
[DisplayName("市")]
public string City { get; set; }
[DisplayName("区")]
public string District { get; set; }
[DisplayName("街道")]
public string Street { get; set; }
}
针对上面定义得这个表示地址的Address。现在我们创建一个具体的Address对象并通过如下的方式调用HtmlHelper的DisplayForModel方法将它呈现在以此作为Model的View中。
@model Address
@Html.DisplayForModel()
从如下所示的HTML中我们可以看出作为Model的Address对象的所有属性都以显示模式呈现出来,而在前面还具有相应的标签。
省
江苏省
市
苏州市
区
工业园区
街道
星湖街328号
值得一提的是,Object模板在对属性进行遍历的过程中,不论是显示模式还是编辑模式,只会处理非复杂类型。也就是如果属性成员是一个复杂类型(不能支持从字符串类型的转换),它不会出现在最终生成的HTML中。
public class Contact
{
[DisplayName("姓名")]
public string Name { get; set; }
[DisplayName("电话")]
public string PhoneNo { get; set; }
[DisplayName("Email地址")]
public string EmailAddress { get; set; }
[DisplayName("联系地址")]
public Address Address { get; set; }
}
通过上面的代码片断,我们定义了一个表示联系人的数据类型Contact,它具有一个类型的Address的同名属性。现在我们创建一个具体的Contact对象,并 对包括Address 属性在内的所有属性进行初始化,然后通过如下的方式通过调用HtmlHelper的DisplayForModel方法将它呈现在以此作为Model的View中。
@model Contact
@Html.DisplayForModel()
从如下所示的HTML可以看出,Contact的数据成员Address由于是复杂类型,其内容并不会呈现出来。
姓名
张三
电话
1234567890
Email地址
我们可以有两种方式解决这个问题,其实就是通过为Address类型定义各类专门的模板用于地址信息的显示和编辑,通过UIHintAttribute特性将此模板名称应用到Contact的Address属性上,然后调用DisplayFor/EditorFor将该属性呈现出来。另一种就是按照类似如如下的方式手工将负责类型属性成员呈现出来。
@model Contact
@Html.DisplayForModel()
@Html.DisplayName("Address")
@(Model.Address.Province + Model.Address.City + Model.Address.District+ Model.Address.Street)
以上就是关于ASP.NET预定义模板介绍,希望对大家的学习有所帮助。
你可能感兴趣的:(ASP.NET预定义模板介绍)
Java虚拟线程的概念与实操
贝克街的小码农
Java实战方案 java python 开发语言
Java虚拟线程介绍背景在传统的Java并发编程中,线程(Thread)是并发执行的基本单位。然而,操作系统线程(OS线程)的创建和上下文切换开销较大,尤其是在高并发场景下,创建大量线程会导致系统资源耗尽,性能下降。为了解决这个问题,Java19引入了虚拟线程(VirtualThreads),作为ProjectLoom的一部分。虚拟线程是一种轻量级的线程,由JVM进行管理,而不是直接依赖操作系统线
python核心编程电子书_Python核心编程 PDF 超清第3版
weixin_39976733
python核心编程电子书
给大家带来的一篇关于Python编程相关的电子书资源,介绍了关于Python编程、Python核心编程方面的内容,本书是由人民邮电出版社出版,格式为PDF,资源大小22.4MB,卫斯理编写,目前豆瓣、亚马逊、当当、京东等电子书综合评分为:7.5。内容介绍全方位包含现如今应用程序开发中的诸多行业为初级Python开发者出示优秀实践活动方式包含很多好用的编码实例每章结尾的练习题有利于推进所教专业知识想
JavaScript基础-对象的相关概念
難釋懷
javascript 开发语言
在JavaScript编程中,对象(Object)是一个核心的概念,它几乎无处不在。无论是简单的键值对存储还是复杂的自定义数据结构,对象都提供了强大的功能来组织和操作数据。本文将介绍JavaScript中对象的基本概念、创建方法以及一些常见的操作技巧。一、什么是对象?在JavaScript中,对象是一种复合数据类型,它可以包含属性(properties),每个属性由一个键(key)和一个值(val
对接马来西亚和印度股票数据API:从实时行情到历史数据的完整指南
金融数据库
摘要:本文将详细介绍如何通过StockTVAPI对接马来西亚和印度股票市场的实时行情数据,涵盖从API申请、接口调用到数据解析的完整流程,并提供Python代码示例。一、为什么选择StockTVAPI?StockTVAPI提供全球多个国家的金融市场数据,其中马来西亚和印度市场数据尤为全面。以下是选择StockTVAPI的几大理由:覆盖全面:支持马来西亚Bursa和印度NSE、BSE交易所实时性强:
Godot引擎开发:UI和用户交互_用户界面性能优化
chenlz2007
游戏开发 godot ui 交互 游戏引擎 microsoft 性能优化
用户界面性能优化在开发动作游戏时,用户界面(UI)的性能优化是至关重要的。一个流畅的UI不仅能够提升玩家的体验,还能确保游戏在不同设备上运行顺畅。本节将详细介绍如何在Godot引擎中优化UI性能,包括减少渲染负担、优化资源管理和提高响应速度等方面。1.减少渲染负担1.1使用精灵图(SpriteSheets)精灵图(SpriteSheets)是一种将多个小图合并成一张大图的技术,可以显著减少纹理切换
Godot引擎开发:UI和用户交互_UI性能优化
chenlz2007
游戏开发 godot ui 交互 游戏引擎 性能优化
UI性能优化在动作游戏中,UI(用户界面)的性能优化是至关重要的。一个响应迅速、流畅的UI可以显著提升玩家的游戏体验。本节将详细介绍如何在Godot引擎中优化UI性能,包括优化节点结构、减少绘制调用、使用缓存技术、以及优化动画和过渡效果等方法。优化节点结构减少节点数量在Godot引擎中,每个节点都有一定的开销。因此,减少节点的数量可以显著提高UI的性能。可以通过以下几种方法实现:合并节点:将多个相
Linux 命令学习记录
hxung
面试学习使用 linux 学习 运维
Linux命令详解与进阶指南Linux是一种广泛使用的开源操作系统,掌握Linux命令是开发者和系统管理员的必备技能。本文将详细介绍Linux的常用命令,并涵盖一些高级进阶技巧,帮助你更高效地使用Linux。目录基础命令文件与目录操作文本处理系统信息权限管理进阶命令进程管理网络操作磁盘管理Shell脚本高级技巧管道与重定向正则表达式任务调度性能监控案例实战日志分析自动化部署服务器监控基础命令文件与
基于oracle linux的 DBI/DBD 标准化安装文档(五)
oracle
一、安装DBIDBI(DatabaseInterface)是perl连接数据库的接口。其是perl连接数据库的最优方法,他支持包括Orcale,Sybase,mysql,db2等绝大多数的数据库,下面将简要介绍其安装方法。1.1解压tar-zxvfDBI-1.616_901.tar.gz1.2安装依赖yuminstallperl-ExtUtils-CBuilderperl-ExtUtils-Mak
使用Ubuntu编译和安装QT源码
程序逐梦人
ubuntu qt linux C/C++
使用Ubuntu编译和安装QT源码在Linux开发中,QT是非常受欢迎的跨平台应用程序开发框架。它提供了丰富的GUI组件库和工具,使开发人员能够轻松创建功能强大的图形用户界面。然而,有时候我们可能需要从源代码编译和安装QT,以便进行定制化的开发。本文将介绍在Ubuntu上编译和安装QT源码的过程。步骤1:准备环境首先,我们需要确保系统中已经安装了一些必要的软件包和工具。打开终端,并执行以下命令来安
【产品经理】设计一流产品九步法
程矢
Axure原型设计 axure
转载自:老二牛车教育»【产品经理】设计一流产品九步法百度高管舒迅(@舒迅)曾经带领百度贴吧创造出一年内用户注册量增长10倍、浏览量3倍增长的奇迹,作为一名在中国互联网摸爬滚打超过12年的老兵,在和百度内部同事的相互磨砺中,总结出了极其丰富而是用的产品设计经验。他在这篇文章中介绍的九条方法不仅值得每一个PM的认真学习,同样也值得每一个有志于打造出一流产品的互联网创业者和从业者的揣摩。本文描述的产品设
他来了,为大模型量身定制的响应式编程范式(1) —— 从接入 DeepSeek 开始吧
CodeCaster
langchain ai java
哒哒哒,他来了!今天我们要介绍一种新型的Java响应式大模型编程范式——FEL。你可能听说过langchain,那么你暂且可以把FEL看作是Java版本的langchain。话不多说,今天我们就从接入当前热门的DeepSeek开始,带大家认识一下FEL。通过FEL,你可以轻松实现大模型应用的编排和运行,开启智能编程的新篇章!️快速上手:轻松接入DeepSeek1.准备环境首先,进入老生常谈的环节—
FastAPI完全指南:实现高效、安全的Web开发
教IT的无语强
fastapi 安全 前端
FastAPI完全指南:实现高效、安全的Web开发*引言:介绍FastAPI的优势和应用场景*FastAPI的主要特点应用场景为何选择FastAPIFastAPI的安装和基础配置*安装FastAPI创建基本的FastAPI应用构建你的第一个FastAPI应用*创建路由和视图响应处理*自定义响应异常处理高级响应处理*背景任务流式响应文件响应交互式API文档**SwaggerUIReDoc自定义文档使
【AWS入门】AWS云计算简介
Jackson@ML
aws 亚马逊云科技 云计算 云计算 aws 亚马逊云科技
【AWS入门】AWS云计算简介ABriefIntroductiontoAWSCloudComputingByJackson@ML什么是云计算?云计算能干什么?我们如何利用云计算?云计算如何实现?带着一系列问题,我将做一个普通布道者,引领广大读者,针对AWS各项云技术和服务,逐步进入云计算赋能千行百业的神奇世界。本文简要介绍AWS提供的云计算,希望对读者有所帮助。1.云计算云计算通过互联网按需提供I
Python实现大麦网抢票的四大关键技术点解析
小白学大数据
亿牛云代理 python python 开发语言 爬虫 数据挖掘 程序人生
前言随着互联网的普及和发展,线上购票已经成为人们生活中不可或缺的一部分。然而,在抢购热门演出门票时,往往会遇到抢票难、抢票快的问题,有时候一秒钟的延迟就意味着与心仪的演出擦肩而过。为了解决这个问题,技术爱好者们开始探索利用Python多线程技术来提高抢票效率。本文将介绍Python实现大麦网抢票的四大关键技术点,帮助读者了解抢票脚本的核心原理,并通过示例代码详细说明实现过程。1.网页解析技术大麦网
Python个人学习笔记(2):编程入门知识与基础语法介绍
NEET_LH
樵夫老师Python零基础课程 个人学习笔记 python 学习 笔记
一、注释(一)作用1.对代码进行解释和说明避免自己忘了写的代码是做什么的——写给人看的,机器不运行不要去注释你代码做了什么,而要去注释我的代码为什么要这么做。用于记录思路、实现方法、代码功能注释很重要,大厂很重视,尤其日企2.调试代码报错的一篇代码,从下到上一句一句加#,依次运行,如果某行代码加了#后,程序运行成功,那么就是这行有问题,但这个方法不好。(二)注释方法1.单行注释==句子前加#快捷键
C# 通过chrome插件将HTML网页转换为PDF
Eiceblue
C# .NET PDF c# chrome html
将HTML网页内容转换为PDF格式能方便文档的后续打印、存档和分享等。之前介绍过如何通过QT插件将HTML转为PDF文件,本文将介绍另一个新的转换方法,通过谷歌浏览器Chrome插件将HTML网页转PDF文件。首先需要安装Spire.PDFfor.NET库(10.7.21版本及以上)。可以通过此链接下载产品包后手动添加引用,或者直接通过NuGet安装。https://www.e-iceblue.c
C++设计模式-原型模式:从基本介绍,内部原理、应用场景、使用方法,常见问题和解决方案进行深度解析
牵牛老人
C++专栏 c++ 设计模式 原型模式
一、基本介绍:理解"克隆"的设计哲学1.1什么是原型模式原型模式(PrototypePattern)是一种创建型设计模式,其核心思想是通过复制现有对象来创建新对象,而非传统的新建实例方式。如同生物学的细胞分裂机制,原型对象作为"母体",通过自我复制产生完全相同的新个体。该模式在C++中通常借助拷贝构造函数或克隆接口实现,特别适用于以下场景:对象初始化成本高昂(如需要读取大文件);系统需要动态生成多
最短路算法
Emplace
算法 图论 最短路
算法介绍最短路是一种在一个有权图中求任意两点间的最短路径。算法描述最短路有很多的形式:单源最短路:就是固定起点的最短路。多源最短路:就是不固定起点的最短路。其中Floyd就是求多源最短路的。Floyd算法流程首先我们可以先枚举中间节点kkk,然后再枚举经过这个中间节点的起点和终点。最后对于每对起点和终点我们假设它们为(i,j),那么从i到j的距离就应该是a(i,k)+a(k,j)与a(i,j)的最
关于AFSIM
科学的发展-只不过是读大自然写的代码
c++ c++
1.概要2.内容AFSIM(AdvancedFrameworkforSimulation,Integration,andModeling)是一款由美国空军研究实验室(AFRL)开发和维护的高级仿真、集成和建模框架。以下是关于AFSIM的详细介绍:一、概述全称:AdvancedFrameworkforSimulation,Integration,andModeling开发单位:美国空军研究实验室(A
数据结构与算法-图(绪论 图论基本概念)
可爱的野指针
数据结构 图论 算法 数据结构 有向图 欧拉回路
昨天我的的树就分享完了,树的概念很多吧,二叉树,满二叉树,完全二叉树,赫夫曼树,孩子,双亲……多不?哈哈哈,这算不了什么,我们接下来要看到的图的概念才叫多,没关系,勤奋和时间会让你记住他们,内心只需要告诉自己,加油,我能行,就一定能学会图。不知道有没有看过或者学过离散数学,如果学过,那么恭喜啦,离散数学里的图论就是这一章的基础,图论学的还不错的话,压力就小了。先介绍的是图的定义,图-V个顶点和E条
Java Scanner 类
大哥的打嗝
JAVA java jvm 开发语言
JavaScanner类是Java的一个内置类,它提供了一种简便的方式来从标准输入或者文件中读取基本类型和字符串。本文将会详细介绍JavaScanner类的作用以及在实际工作中的用途。Scanner类的作用Scanner类可以方便地读取从控制台、文件等输入流中读取基本类型和字符串。Scanner类可以读取int、long、float、double和String等基本类型。它还可以使用正则表达式读取
c语言%-8.3,C语言程序设计第8章-8.3.pptx
蓝精神
c语言%-8.3
C语言程序设计第8章-8.3.pptxC语言程序设计实例教程8.3二维数组和指针,C语言程序设计实例教程,第8章指针,二维数组的定义方法通过二维数组名引用二维数组元素二维数组与一维数组的关系通过定义指针变量来引用二维数组元素通过数组名的运算实现指针的移动来引用数组元素,本节要点实例37二维数组名和数组元素的地址二维数组的成员介绍,【实例任务】定义一个二维数组并赋初值,然后分别输出二维数组名的值,各
实验六 多cache一致性——监听协议_多核Cache一致性
weixin_39576336
实验六 多cache一致性——监听协议
经过这么多篇文章的介绍,我们应该已经对Cache有一个比较清晰的认识。Cache会面临哪些问题,我们该怎么处理这些问题。现在我们讨论多核Cache一致性问题。在摩尔定律不太适用的今天,人们试图增加CPU核数以提升系统整体性能。这类系统称之为多核系统(简称MP,Multi-Processor)。我们知道每个CPU都有一个私有的L1Cache(不细分iCache和dCache)。假设一个2核的系统,我
Mysql数据库简要介绍
u010868192
数据库介绍 数据库简要介绍
数据库介绍1、关系型数据库:经过数学论证,可以将现实生活中的各种关系,保存到数据库中,这种数据库称为关系型数据库。关系型数据库以表的形式保存数据之间的关系。2、非关系型数据库:主要为了解决特定的应用场景。如:高缓存,高并发等,以redis为例,redis是以键值对的形式保存数据。数据库是通过(DBMS)创建和操作的容器。数据库版本(Mysql为例)版本4:InnoDB,增加事务的处理,并改进全文本
【C语言开源库】lw_oopc:轻量级的C语言面向对象编程框架
机载软件与适航
C语言 C/C++开源库 c语言
文章目录轻量级的面向对象C语言编程框架LW_OOPC介绍摘要s为什么要用面向对象?为什么不直接使用C++?LW_OOPC是什么?LW_OOPC宏介绍问题描述解决方案方案的可扩展性如何?LW_OOPC最佳实践LW_OOPC的优点LW_OOPC的缺点总结幕后花絮参考资料轻量级的面向对象C语言编程框架LW_OOPC介绍轻量级的面向对象C语言编程框架LW_OOPC介绍摘要s本文介绍一种轻量级的面向对象的C
玩转Python绘图利器——Turtle库
Ai_绘画小南
python 开发语言 信息可视化
Turtle是Python语言中的一个重要的绘图库,它提供了简单易用的绘图功能,适用于所有年龄段的程序员。本文将详细介绍Turtle库的使用方法,并给出多种实例,帮助读者快速上手。一、Turtle库简介Turtle库最早由WallyFeurzeig、SeymourPapert和CynthiaSolomon等人在1960年代末期开发,目的是为了教学和艺术创作。它利用海龟的图形来操作画笔,通过简单的指
Linux 与 RTOS的主要区别到底是啥?
胡涂涂~
Linux驱动开发 linux 嵌入式
目录区别实时操作系统Linux为什么不能称为实时操作系统?总结最后再提一点后话(2022.4.9补充)硬实时Liunx支持硬实时?看了不少博客,浏览量最多的也是详细的介绍了这两种系统,可我对这种操作系统的界限还是很模糊(当然我知道Linux,功能更强大),我想要的答案是,为啥在Linux功能这么强大的情况下,RTOS还能有一席之地,我想这也是他们的主要区别。在经过查阅资料后,我想我得到了答案区别你
Ubuntu14.04设置网络代理
得一录
Linux
buntu下apt-get的网络代理设置(终端命令行的网络代理设置)新立得软件管理器这种图形化的代理设置很明了,这里介绍下终端命令行的网络代理设置,这样大家就可以通过代理进行apt-get了。方法一:如果只是想临时使用http代理,可以在使用apt-get之前于终端下输入:exporthttp_proxy="http://用户名:密码@代理IP:代理端口"方法二:(方法一的持久化)如果希望apt-
基于python的家政预约管理系统源码+运行步骤
冷琴1996
Python系统设计 python 开发语言
功能介绍平台采用B/S结构,后端采用主流的Python语言进行开发,前端采用主流的Vue.js进行开发。学习技术问题可以留言。整个平台包括前台和后台两个部分。前台功能包括:首页、详情页、用户中心、家政入驻模块。后台功能包括:总览、家政管理、分类管理、标签管理、评论管理、用户管理、运营管理、日志管理、系统信息模块。源码地址https://github.com/geeeeeeeek/python_ji
基于python+django+vue.js开发的健身房管理系统源码+运行步骤
冷琴1996
Python系统设计 python django vue.js
功能介绍平台采用B/S结构,后端采用主流的Python语言进行开发,前端采用主流的Vue.js进行开发。技术学习中的问题可以留言。功能包括:教练管理、会员管理、场地管理、设备管理、用户管理、日志管理、系统信息模块。源码地址https://github.com/geeeeeeeek/python_fitness演示地址http://fitness.gitapp.cn演示帐号:用户名:admin123
java线程Thread和Runnable区别和联系
zx_code
java jvm thread 多线程 Runnable
我们都晓得java实现线程2种方式,一个是继承Thread,另一个是实现Runnable。
模拟窗口买票,第一例子继承thread,代码如下
package thread;
public class ThreadTest {
public static void main(String[] args) {
Thread1 t1 = new Thread1(
【转】JSON与XML的区别比较
丁_新
json xml
1.定义介绍
(1).XML定义
扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 XML使用DTD(document type definition)文档类型定义来组织数据;格式统一,跨平台和语言,早已成为业界公认的标准。
XML是标
c++ 实现五种基础的排序算法
CrazyMizzz
C++ c 算法
#include<iostream>
using namespace std;
//辅助函数,交换两数之值
template<class T>
void mySwap(T &x, T &y){
T temp = x;
x = y;
y = temp;
}
const int size = 10;
//一、用直接插入排
我的软件
麦田的设计者
我的软件 音乐类 娱乐 放松
这是我写的一款app软件,耗时三个月,是一个根据央视节目开门大吉改变的,提供音调,猜歌曲名。1、手机拥有者在android手机市场下载本APP,同意权限,安装到手机上。2、游客初次进入时会有引导页面提醒用户注册。(同时软件自动播放背景音乐)。3、用户登录到主页后,会有五个模块。a、点击不胫而走,用户得到开门大吉首页部分新闻,点击进入有新闻详情。b、
linux awk命令详解
被触发
linux awk
awk是行处理器: 相比较屏幕处理的优点,在处理庞大文件时不会出现内存溢出或是处理缓慢的问题,通常用来格式化文本信息
awk处理过程: 依次对每一行进行处理,然后输出
awk命令形式:
awk [-F|-f|-v] ‘BEGIN{} //{command1; command2} END{}’ file
[-F|-f|-v]大参数,-F指定分隔符,-f调用脚本,-v定义变量 var=val
各种语言比较
_wy_
编程语言
Java Ruby PHP 擅长领域
oracle 中数据类型为clob的编辑
知了ing
oracle clob
public void updateKpiStatus(String kpiStatus,String taskId){
Connection dbc=null;
Statement stmt=null;
PreparedStatement ps=null;
try {
dbc = new DBConn().getNewConnection();
//stmt = db
分布式服务框架 Zookeeper -- 管理分布式环境中的数据
矮蛋蛋
zookeeper
原文地址:
http://www.ibm.com/developerworks/cn/opensource/os-cn-zookeeper/
安装和配置详解
本文介绍的 Zookeeper 是以 3.2.2 这个稳定版本为基础,最新的版本可以通过官网 http://hadoop.apache.org/zookeeper/来获取,Zookeeper 的安装非常简单,下面将从单机模式和集群模式两
tomcat数据源
alafqq
tomcat
数据库
JNDI(Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API。
没有使用JNDI时我用要这样连接数据库:
03. Class.forName("com.mysql.jdbc.Driver");
04. conn
遍历的方法
百合不是茶
遍历
遍历
在java的泛
linux查看硬件信息的命令
bijian1013
linux
linux查看硬件信息的命令
一.查看CPU:
cat /proc/cpuinfo
二.查看内存:
free
三.查看硬盘:
df
linux下查看硬件信息
1、lspci 列出所有PCI 设备;
lspci - list all PCI devices:列出机器中的PCI设备(声卡、显卡、Modem、网卡、USB、主板集成设备也能
java常见的ClassNotFoundException
bijian1013
java
1.java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory 添加包common-logging.jar2.java.lang.ClassNotFoundException: javax.transaction.Synchronization
【Gson五】日期对象的序列化和反序列化
bit1129
反序列化
对日期类型的数据进行序列化和反序列化时,需要考虑如下问题:
1. 序列化时,Date对象序列化的字符串日期格式如何
2. 反序列化时,把日期字符串序列化为Date对象,也需要考虑日期格式问题
3. Date A -> str -> Date B,A和B对象是否equals
默认序列化和反序列化
import com
【Spark八十六】Spark Streaming之DStream vs. InputDStream
bit1129
Stream
1. DStream的类说明文档:
/**
* A Discretized Stream (DStream), the basic abstraction in Spark Streaming, is a continuous
* sequence of RDDs (of the same type) representing a continuous st
通过nginx获取header信息
ronin47
nginx header
1. 提取整个的Cookies内容到一个变量,然后可以在需要时引用,比如记录到日志里面,
if ( $http_cookie ~* "(.*)$") {
set $all_cookie $1;
}
变量$all_cookie就获得了cookie的值,可以用于运算了
java-65.输入数字n,按顺序输出从1最大的n位10进制数。比如输入3,则输出1、2、3一直到最大的3位数即999
bylijinnan
java
参考了网上的http://blog.csdn.net/peasking_dd/article/details/6342984
写了个java版的:
public class Print_1_To_NDigit {
/**
* Q65.输入数字n,按顺序输出从1最大的n位10进制数。比如输入3,则输出1、2、3一直到最大的3位数即999
* 1.使用字符串
Netty源码学习-ReplayingDecoder
bylijinnan
java netty
ReplayingDecoder是FrameDecoder的子类,不熟悉FrameDecoder的,可以先看看
http://bylijinnan.iteye.com/blog/1982618
API说,ReplayingDecoder简化了操作,比如:
FrameDecoder在decode时,需要判断数据是否接收完全:
public class IntegerH
js特殊字符过滤
cngolon
js特殊字符 js特殊字符过滤
1.js中用正则表达式 过滤特殊字符, 校验所有输入域是否含有特殊符号function stripscript(s) { var pattern = new RegExp("[`~!@#$^&*()=|{}':;',\\[\\].<>/?~!@#¥……&*()——|{}【】‘;:”“'。,、?]"
hibernate使用sql查询
ctrain
Hibernate
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.hibernate.Hibernate;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.Transa
linux shell脚本中切换用户执行命令方法
daizj
linux shell 命令 切换用户
经常在写shell脚本时,会碰到要以另外一个用户来执行相关命令,其方法简单记下:
1、执行单个命令:su - user -c "command"
如:下面命令是以test用户在/data目录下创建test123目录
[root@slave19 /data]# su - test -c "mkdir /data/test123" 
好的代码里只要一个 return 语句
dcj3sjt126com
return
别再这样写了:public boolean foo() { if (true) { return true; } else { return false;
Android动画效果学习
dcj3sjt126com
android
1、透明动画效果
方法一:代码实现
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
View rootView = inflater.inflate(R.layout.fragment_main, container, fals
linux复习笔记之bash shell (4)管道命令
eksliang
linux管道命令汇总 linux管道命令 linux常用管道命令
转载请出自出处:
http://eksliang.iteye.com/blog/2105461
bash命令执行的完毕以后,通常这个命令都会有返回结果,怎么对这个返回的结果做一些操作呢?那就得用管道命令‘|’。
上面那段话,简单说了下管道命令的作用,那什么事管道命令呢?
答:非常的经典的一句话,记住了,何为管
Android系统中自定义按键的短按、双击、长按事件
gqdy365
android
在项目中碰到这样的问题:
由于系统中的按键在底层做了重新定义或者新增了按键,此时需要在APP层对按键事件(keyevent)做分解处理,模拟Android系统做法,把keyevent分解成:
1、单击事件:就是普通key的单击;
2、双击事件:500ms内同一按键单击两次;
3、长按事件:同一按键长按超过1000ms(系统中长按事件为500ms);
4、组合按键:两个以上按键同时按住;
asp.net获取站点根目录下子目录的名称
hvt
.net C# asp.net hovertree Web Forms
使用Visual Studio建立一个.aspx文件(Web Forms),例如hovertree.aspx,在页面上加入一个ListBox代码如下:
<asp:ListBox runat="server" ID="lbKeleyiFolder" />
那么在页面上显示根目录子文件夹的代码如下:
string[] m_sub
Eclipse程序员要掌握的常用快捷键
justjavac
java eclipse 快捷键 ide
判断一个人的编程水平,就看他用键盘多,还是鼠标多。用键盘一是为了输入代码(当然了,也包括注释),再有就是熟练使用快捷键。 曾有人在豆瓣评
《卓有成效的程序员》:“人有多大懒,才有多大闲”。之前我整理了一个
程序员图书列表,目的也就是通过读书,让程序员变懒。 写道 程序员作为特殊的群体,有的人可以这么懒,懒到事情都交给机器去做,而有的人又可
c++编程随记
lx.asymmetric
C++ 笔记
为了字体更好看,改变了格式……
&&运算符:
#include<iostream>
using namespace std;
int main(){
int a=-1,b=4,k;
k=(++a<0)&&!(b--
linux标准IO缓冲机制研究
音频数据
linux
一、什么是缓存I/O(Buffered I/O)缓存I/O又被称作标准I/O,大多数文件系统默认I/O操作都是缓存I/O。在Linux的缓存I/O机制中,操作系统会将I/O的数据缓存在文件系统的页缓存(page cache)中,也就是说,数据会先被拷贝到操作系统内核的缓冲区中,然后才会从操作系统内核的缓冲区拷贝到应用程序的地址空间。1.缓存I/O有以下优点:A.缓存I/O使用了操作系统内核缓冲区,
随想 生活
暗黑小菠萝
生活
其实账户之前就申请了,但是决定要自己更新一些东西看也是最近。从毕业到现在已经一年了。没有进步是假的,但是有多大的进步可能只有我自己知道。
毕业的时候班里12个女生,真正最后做到软件开发的只要两个包括我,PS:我不是说测试不好。当时因为考研完全放弃找工作,考研失败,我想这只是我的借口。那个时候才想到为什么大学的时候不能好好的学习技术,增强自己的实战能力,以至于后来找工作比较费劲。我
我认为POJO是一个错误的概念
windshome
java POJO 编程 J2EE 设计
这篇内容其实没有经过太多的深思熟虑,只是个人一时的感觉。从个人风格上来讲,我倾向简单质朴的设计开发理念;从方法论上,我更加倾向自顶向下的设计;从做事情的目标上来看,我追求质量优先,更愿意使用较为保守和稳妥的理念和方法。
&