《Flask Web开发:基于Python的Web应用开发实战》笔记二、

第三章、模板

 视图函数作用即生成请求的响应,如果把业务逻辑和表现逻辑混在一起会导致代码难以理解和维护。吧表现逻辑转移到模板中能够提升程序的可维护性。
 模板是一个响应文本的文件,其中包含用占位变量表示的动态部分,其具体值只在请求的上下文才能知道。
 使用真实值替换变量,在返回最终得到的响应字符串,这一过程称为渲染。

3.1、Jinja2模板引擎

3.1.1、渲染模板

 在默认情况下,Flask程序会在templates子文件夹中寻找模板。在下一个hello.py版本中,要把前面定义的模板保存在templates文件夹中,并分别命名为index.html和user.html。

from flask import Flask,render_template
from flask_script import Manager

app = Flask(__name__)
manager = Manager( app )

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/user/')
def user(name):
    return render_template('user.html',name=name)

if __name__ == "__main__":
   manager.run()
  •  代码详解:Flask提供的render_template函数吧Jinja2模板引擎集成到程序中。render_template函数的第一个参数是模板的文件名,随后的参数都是键值对,表示模板中变量对应的真实值。

3.1.2、变量

  •  Jinja2能识别所有类型的变量,甚至是一些复杂的类型,例如列表、字典和对象。在模板中使用变量的一些示例如下:

    DICT {{ mydict['key'] }}

    LIST {{ mylist[3] }}

    list with a variable index: {{ mylist[myintvar]}}

    object's method: {{ myobj.somemethod() }}

  • 常用Jinja2 变量过滤器
  1. safe 渲染值时不转义
  2. capitalize 把值的首字母转换成大写,其他字母转换成小写
  3. lower 把值转换成小写形式
  4. upper 把值转换成大写形式
  5. title 把值中每个单词的首字母都转换成大写
  6. trim 把值的首尾空格去掉
  7. striptags 渲染之前把值中所有的HTML标签都删掉

3.1.3、控制结构

条件控制语句
{% if user %}
{% else %}
{% endif %}
for循环语句
{% for comment in comments %}
{% endfor %}
支持宏
{% marco render_comment(comment) %}
多处重复使用的模板代码片段可以写入单独的文件,再包含在所有的模板中,以避免重复:
{ % include 'comment.html' %}

  •  另外一中重复使用代码的强大方式是模板继承,他类似于Python代码中的类继承。继承方式如下:首先创建一个名为base.html的基础模板:
    
    
    {% block head %}
    
    {% block title %}
    {% endblock %}
    - My Application
    
    {% endblock %}
    
    
    {% block body %}
    {% endblock %}
    
        
  •  block标签定义的元素可在衍生的模板中年修改。在本例中,我们定义了名为head,title,body的块元素。注意,title包含在head中。下面就是基于基础模板的衍生模板:
    {% extends bash.html %}
    {% block title %}
    Index
    {% endblock%}
    {% block head%}
    {{ super() }}
    
    {% endblock %}
    {% block body %}
    

    hello,world

    {% endblock %}
  •  extends指令声明这个模板衍生自base.htmk,在extends指令之后,基础模板中的3个板块重新定义,模板引擎会贾汪其插入适当的位置。注意新定义head块,在基础模板中内容是空的,所以使用super()获取原来的内容。

3.2、使用Flask-Bootstrap集成Twitter Bootstrap

  Bootstrap是Twitter开发的一个开源框架,它提供的用户界面组件可用于创建整洁且具有吸引力的网页,并且这些网页还能兼容所有现代的Web浏览器。
 Bootstrap是客户端框架,不会直接涉及服务器。要下在程序中继承Bootstrap,显然需要对模板做所有必要的改动,更简单的方法就是安装Flask-Bootstrap的Flask扩展,简化集成的过程。

  • Flask-Bootstrap使用pip方式安装
    pip install flask-bootstrap
  • Flask扩展一般在创建程序实例时初始化。

    from flask.ext.bootstrap import Bootstrap
    bootstrap = Bootstrap(app)
  • templates/user.html,使用的就是Flask-Bootstrap的模板
    {% extends "bootstrap/base.html" %}
    {% block title %}Flasky{% endblock %}
    {% block navbar %}
    
    {% endblock %}
    {% block content %}
    
    {% endblock %}

代码详解:

  •  Jinja2中的extends指令从Flask-Bootstrap中导入bootstrap/base.html,从而实现模板继承。Flask-Bootstrap中的基础模板提供了一个网页框架,引入了Bootstrap中的所有CSS和JavaScript文件。
  •   基础模板中定义了可在衍生模板中重新定义的块。block和endblock指令定义块中的内容可添加到基模板中。

Flaks-Bootstrap基模板中定义的块:
块名 说明

  1. doc 整个HTML文档
  2. html_attribs 标签的属性
  3. html 标签的内容
  4. head 标签中的内容
  5. title 标签中的内容</li> <li>metas 一组<meta>标签</li> <li>styles 层叠样式表定义</li> <li>body_attribs <body>标签的属性</li> <li>body <body>标签中的内容</li> <li>navbar 用户定义的导航条</li> <li>content 用户定义的页面内容</li> <li>scripts 文档底部的JavaScript声明</li> </ol> </blockquote> <h2>3.3、自定义错误页面</h2> <blockquote> <p>Flask允许程序使用基于模板的自定义错误页面,最常见的错误代码有两个:<br>404,客户端请求未知页面或路由时显示。<br>500,有未处理的异常时显示。</p> </blockquote> <ul> <li>自定义错误页面:</li> </ul> <pre><code>@app.errorhandler(404) def page_not_found(e): return render_template('404.html'),404 @app.errorhandler(500) def internal_server_error(e): return render_templte('500.html'),500 </code></pre> <ul> <li>  和视图函数一样,错误处理程序也返回响应,它们还返回与该错误对应的数字状态码。</li> <li>  如果从Github上克隆了这个程序的Git仓库,执行git checkout 3c签出这个程序的这个版本。</li> </ul> <h2>3.4、链接</h2> <blockquote> <p> 在模板中直接编写简单路由的URL连接不难,但对于包含可变部分的动态路由,在模板中构建正确的URL就很困难;并且直接编写URL会对代码中定义的路由产生不必要的依赖。<br> Flask提供了url_for()辅助函数,可以使用程序URL映射中保存的信息生成URL。<br> url_for()函数最简单的用法是以视图函数名(后者app.add_url_route()定义路由时使用的端点名)作为参数,返回对应的URL。<br> 使用<strong>url_for()</strong>生成动态地址时,将动态部分作为关键字参数传入。例如,url_for('user',name='john',_external=True)的返回结果是http://localhost:5000/user/john<br> <strong>传入url_for()的关键字参数不仅限于动态路由中的参数。函数能将任何额外参数添加到查询字符串中。</strong>例如,url_for('index',page=2)的返回结果是/?page=2</p> </blockquote> <h2>3.5、静态文件</h2> <blockquote> <p> 默认设置下,Flask在程序根目录中名为static的子目录中寻找静态文件。如果需要,可在static文件夹中使用子文件夹存放文件。</p> </blockquote> <h2>3.6、使用Flask-Monment本地化日期和时间</h2> <blockquote> <p> 问题背景:如果Web程序的用户来自世界各地,那么处理日期和时间就不是一个简单的任务。<br> 解决方法:通过使用JavaScript开发的优秀客户端开源代码库,名为moment.js,可以在浏览器中渲染日期和时间。Flask-Monment是一个Flask程序扩展。能把moment.js集成到Jinja2模板中。</p> </blockquote> <ul> <li> <p>Flask-Moment可以通过pip安装:</p> <pre><code>pip install flask-moment</code></pre> </li> <li>初始化Flask-Moment: <pre><code>from flask.ext.moment import Moment moment = Moment(app)</code></pre></li> <li>除了moment.js,Flask-Moment还依赖jquery.js.Bootstrap已经引入了jquery.js,因此只需引入moment.js即可。 <pre><code>{% block scripts %} {{ super() }} {{ moment.include_moment() }} {% endblcok %}</code></pre></li> <li>为了处理时间戳,Flask-Moment想模板开放了moment类,后台可以将utc时间传到前台进行渲染。 <pre><code>from datetime improt datetime @app.route('/') def index(): return render_template('index.html',current_time=datetime.utcnow())</code></pre></li> <li>在模板中渲染current_time <pre><code><p>The local date and time is {{ moment(current_time).format('LLL) }}</p> <p>That was {{ moment(current_time).fromNow(refresh=True) }}</p></code></pre></li> </ul> <blockquote> <p>更多moment.js用法:http://momentjs.com/docs/#/displaying/<br>Flask-Moment假定服务器端程序处理的时间是“纯正的”datetime对象,且使用UTC表示。</p> </blockquote> <h1>第四章、Web表单</h1> <blockquote> <p> 对于一些重复操作(生成表单的HTML代码和验证提交的表单数据),Flask-WTF扩展可以把处理Web表单的过程变成一种愉悦的体验。这个扩展对独立的WTForms包进行了包装,方便集成到Flask程序中。<br>WTForms官网:http://wtforms.simplecodes.com</p> </blockquote> <ul> <li>Flask-WTF及其依赖可使用pip安装: <pre><code>pip install flaks-wtf</code></pre></li> </ul> <h2>4.1、跨站请求伪造保护</h2> <blockquote> <p> 默认情况,Flask-WTF能保护所有表单面授跨站请求伪造(CSRF)的***。为了实现CSRF保护,Flask-WTF需要程序设置一个密钥。Flask-WTF使用这个密钥生成加密令牌,再用令牌验证请求中表单数据的真伪。</p> </blockquote> <p><strong>示例代码(设置Flask-WTF):</strong></p> <pre><code>app = Flask(__name__) app.config['SECRET_KEY'] = 'hard to guess string'</code></pre> <ul> <li> 代码详解:app.config字典可用来存储框架、扩展和程序本身的配置变量</li> <li> SECRET_KEY配置变量是通用密钥,可在Flask和多个第三方扩展中使用。</li> </ul> <h2>4.2、表单类</h2> <blockquote> <p>使用Flask-WTF时,每个Web表单都由一个继承自Form的类表示。</p> </blockquote> <p><strong>示例代码(一个简单的Web表单,包含一个文本字段和一个提交按钮):</strong></p> <pre><code>from flaks.ext.wtf import Form from wtforms import StringField,SubmitField from wtforms.validators import Required class NameForm(Form): name = StringField("What's your name?",validators=[Required()]) submit = SubmitField('Submit')</code></pre> <ul> <li> 代码详解:StringField类表示属性为type="text"的<input>元素;SubmitField类表示属性为type="submit"的<input>元素。StringField构造函数中的可选参数validators指定一个由验证函数组成的列表,在接收用户提交的数据之前验证数据。验证函数Required()确保提交的字段不为空</li> <li> Form基类由Flask-WTF扩展定义,从falsk.ext.wtf中导入。字段和验证函数可以直接从WTForms包中导入。</li> </ul> <blockquote> <p><strong>WTForms支持的HTML标准字段</strong></p> <ol> <li>StringField 文本字段</li> <li>TextAreaField 多行文本字段</li> <li>PasswordField 密码文本字段</li> <li>HiddenField 隐藏文本字段</li> <li>DateField 文本字段,值为 datetime.date 格式</li> <li>DateTimeField 文本字段,值为 datetime.datetime 格式</li> <li>IntegerField 文本字段,值为整数</li> <li>DecimalField 文本字段,值为 decimal.Decimal</li> <li>FloatField 文本字段,值为浮点数</li> <li>BooleanField 复选框,值为 True 和 False</li> <li>RadioField 一组单选框</li> <li>SelectField 下拉列表</li> <li>SelectMultipleField 下拉列表,可选择多个值</li> <li>FileField 文件上传字段</li> <li>SubmitField 表单提交按钮</li> <li>FormField 把表单作为字段嵌入另一个表单</li> <li>FieldList 一组指定类型的字段</li> </ol> <p><strong> WTForms验证函数</strong></p> <ol> <li>Email 验证电子邮件地址</li> <li>EqualTo 比较两个字段的值;常用于要求输入两次密码进行确认的情况</li> <li>IPAddress 验证 IPv4 网络地址</li> <li>Length 验证输入字符串的长度</li> <li>NumberRange 验证输入的值在数字范围内</li> <li>Optional 无输入值时跳过其他验证函数</li> <li>Required 确保字段中有数据</li> <li>Regexp 使用正则表达式验证输入值</li> <li>URL 验证 URL</li> <li>AnyOf 确保输入值在可选值列表中</li> <li>NoneOf 确保输入值不在可选值列表中</li> </ol> </blockquote> <h2>4.3、把表单渲染成HTML</h2> <p><strong>示例代码:(使用Flask-WTF和Flask-Bootstrap渲染表单)</strong></p> <pre><code>{% extends 'base.html' %} {% import "bootstrap/wtf.html" as wtf %} {% block title %}Flasky{% endblock %} {% block page_content %} <div class="page-header"> <h1>hello,{% if name %}{{ name }}{% else %}Stranger{% endif%}</h1> </div> {{ wtf.quick_form(form)}} {% endblock %}</code></pre> <ul> <li>  代码详解:导入的bootstrap/wtf.html文件定义了一个使用Bootstrap渲染Flask-WTF表单对象的辅助函数。wtf.quick_form()函数的参数为Flask_WTF表单对象,使用Bootstrap的默认样式渲染传入表单。</li> </ul> <h2>4.4、在视图函数中处理表单</h2> <p><strong>示例代码:(视图函数index()不仅要渲染表单,还要接受表单中的数据。)</strong></p> <pre><code>@app.route('/',methods=['GET','POST']) def index(): name = None form = NameForm() if form.validate_on_submit(): name = form.name.data form.name.data = '' return render_template('index.html',form=form,name=name) </code></pre> <ul> <li>代码详解:app.route修饰器中添加的methods参数告诉Flask在URL映射中把这个视图函数注册为GET和POST请求的处理程序。如果没指定methods参数,则默认把视图函数注册为GET请求的处理程序。</li> <li> 用户提交表单后,服务器会收到一个POST请求。validate_on_submit()会调用name字段上附属的Required()验证函数。如果名字不为空,就能通过验证,validate_on_submit()返回True。</li> </ul> <h2>4.5、重定向和用户会话</h2> <blockquote> <p> 问题背景:当用户输入名字后提交表单,再点击浏览器的刷新按钮,会看到一个警告,关于要求再次提交表单之前进行确认。之所以会出这种问题,是因为刷新页面时浏览器会重新发送之前已经发送过的最后一个请求。<br> 解决方案:<strong>使用重定向作为POST请求的响应</strong>,而不是使用常规响应。重定向是一种特殊的响应,响应内容是URL,而不是包含HTML代码的字符串。浏览器收到这种响应,<strong>会向重定向的URL发起GET请求</strong>,显示页面的内容。<br> 另一问题:如果使用上面的解决方案,程序在处理POST请求时,使用from.name.data获取用户输入的名字,一旦请求结束,数据也就丢失了。所以需要程序将数据存储到用户会话中,在请求之间“记住”数据。用户是一种私有存储,存在每个连接到服务器的客户端中。</p> </blockquote> <p><strong>示例代码:</strong></p> <pre><code>from flask import Flask,render_template,session,redirect,url_for @app.route('/',methods=['GET','POST']) def index(): form = NameForm() if form.validate_on_submit(): session['name'] = form.name.data return redirect(url_for('index')) return render_template('index.html',form=form,name=session.get('name'))) </code></pre> <ul> <li> 代码详解:合法表单数据的请求最后会调用redirect()函数。<strong>redirect()是个辅助函数</strong>,用来生成HTTP重定向响应。redirect()函数参数是重定向的URL。<strong>url_for()生成URL</strong>,因为这个函数使用URL映射生成URL,从而保证URL和定义的路由兼容,并且修改路由名字后依然可用。</li> </ul> <h2>4.6、Flash消息</h2> <blockquote> <p> 问题背景:用户提交了有一项错误的登录表单,服务器发回的响应重新渲染了登录表单,并在表单上面显示信息,提示用户名或密码错误。</p> </blockquote> <p><strong>示例代码:</strong></p> <pre><code>from flask ipmort Flask,render_template,session,redirect,url_for,flash @app.route('/',methods=['GET','POST']) def index(): form = NameForm() if form.validate_on_submit(): old_name = session.get('name') if old_name is not None and old_name != form.name.data: flash("Looks like you have changed your name") session['name'] = olde_name return redirect(url_for('index')) return render_template('index.html',name=session.get('name'),form=form) ``` *  代码详解:代码会将每一次提交的名字与上一次**存储在会话中的名字**进行比较,如果两者不一样则会发给客户端下一个响应中显示一个信息。 *  仅调用flash()函数并不能把消息显示出来,程序使用的模板要渲染这些信息,最好在基础模板中渲染Flash消息,因为这样所有页面都能使用这些消息。Flask把**get_flashed_messages()函数**开放给模板,用来获取并渲染消息。</code></pre> <p>{% block content %}<br><div class="container"><br>{% for message in get_flashed_messages() %}<br><div class="alert alert-warning"><br><button type="button" class="close" data-dismiss="alert"><br>×<br></button><br>{{ message }}<br></div><br>{% endfor %}<br>{% block page_content %}<br>{% endblock %}<br></div><br>{% endblock %} </p> <pre><code></code></pre> </div> <p>转载于:https://blog.51cto.com/mbb97/2353647</p> </div> </div> </div> </div> </div> <!--PC和WAP自适应版--> <div id="SOHUCS" sid="1292345820095520768"></div> <script type="text/javascript" src="/views/front/js/chanyan.js"></script> <!-- 文章页-底部 动态广告位 --> <div class="youdao-fixed-ad" id="detail_ad_bottom"></div> </div> <div class="col-md-3"> <div class="row" id="ad"> <!-- 文章页-右侧1 动态广告位 --> <div id="right-1" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_1"> </div> </div> <!-- 文章页-右侧2 动态广告位 --> <div id="right-2" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_2"></div> </div> <!-- 文章页-右侧3 动态广告位 --> <div id="right-3" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_3"></div> </div> </div> </div> </div> </div> </div> <div class="container"> <h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的:(《Flask Web开发:基于Python的Web应用开发实战》笔记二、)</h4> <div id="paradigm-article-related"> <div class="recommend-post mb30"> <ul class="widget-links"> <li><a href="/article/1901872344264142848.htm" title="链表 力扣hot100热门面试算法题 面试基础 核心思路 背题 LRU 合成K个升序链表 环形链表II 合成两个有序链表 两数相加 删除链表的倒数第N个节点 两两交换链表中的节点 K个一组反转链表等" target="_blank">链表 力扣hot100热门面试算法题 面试基础 核心思路 背题 LRU 合成K个升序链表 环形链表II 合成两个有序链表 两数相加 删除链表的倒数第N个节点 两两交换链表中的节点 K个一组反转链表等</a> <span class="text-muted">尘土哥</span> <a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E9%93%BE%E8%A1%A8/1.htm">链表</a><a class="tag" taget="_blank" href="/search/leetcode/1.htm">leetcode</a> <div>链表一定要有模版思想,特别是反转链表,直接记住。相交链表https://leetcode.cn/problems/intersection-of-two-linked-lists/核心思路设第一个公共节点为node,headA的节点数量为a,headB的节点数量为b,两链表的公共尾部的节点数量为c,则有:头节点headA到node前,共有a−c个节点;头节点headB到node前,共有b−c个节点</div> </li> <li><a href="/article/1901872342561255424.htm" title="一文读懂四路CAN转以太网" target="_blank">一文读懂四路CAN转以太网</a> <span class="text-muted">天津三格电子</span> <a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%8D%8F%E8%AE%AE/1.htm">网络协议</a> <div>在工业自动化与物联网蓬勃发展的当下,实现CAN总线设备与以太网之间的高效通信至关重要。四路CAN转以太网产品,作为一款专业的工业通信网关,致力于打破CAN总线与以太网之间的通信壁垒,为工业数据的互联互通提供可靠解决方案。一、产品概述四路CAN转以太网产品是一款集CAN总线数据采集、处理与以太网通信功能于一体的工业级智能设备。其核心功能是将工业现场中采用CAN总线通信的设备(如传感器、控制器、执行器</div> </li> <li><a href="/article/1901872342984880128.htm" title="一文读懂 EtherNET/IP 转 Modbus RTU 网关" target="_blank">一文读懂 EtherNET/IP 转 Modbus RTU 网关</a> <span class="text-muted">天津三格电子</span> <a class="tag" taget="_blank" href="/search/tcp%2Fip/1.htm">tcp/ip</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%8D%8F%E8%AE%AE/1.htm">网络协议</a> <div>在工业自动化快速发展的进程中,不同通信协议设备间的互联互通需求日益迫切。EtherNET/IP与ModbusRTU作为工业领域广泛应用的通信协议,各自在不同层面发挥着关键作用。EtherNET/IP凭借其基于工业以太网的高速、高效数据传输能力,在工厂自动化、智能工厂等大型系统中广泛用于连接各类先进设备;ModbusRTU则以其简单可靠、易于实现的特性,在工业现场层被众多传感器、执行器等设备采用。然</div> </li> <li><a href="/article/1901871335332704256.htm" title="【ES6】04-对象 + 类 + 模板字符串 + 解构 + 字符串" target="_blank">【ES6】04-对象 + 类 + 模板字符串 + 解构 + 字符串</a> <span class="text-muted">beibeibeiooo</span> <a class="tag" taget="_blank" href="/search/ES6/1.htm">ES6</a><a class="tag" taget="_blank" href="/search/es6/1.htm">es6</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a> <div>本文介绍对象+类+解构赋值+字符串的操作和方法。目录1.对象1.1创建对象1.2添加属性1.3删除1.4判断是否存在1.5属性名数量1.6for...in遍历1.7forEach遍历1.8清空对象2.类2.1创建对象和模板字符串2.2私有属性值2.3继承extends3.解构3.1数组解构3.2对象解构4.字符串4.1长度&转大小写4.2索引字符&转数组&转int4.3替换&去除两侧&判断4.4返</div> </li> <li><a href="/article/1901870831512907776.htm" title="C语言:rand()函数每次运行的数字都一样解决办法" target="_blank">C语言:rand()函数每次运行的数字都一样解决办法</a> <span class="text-muted">Cindy辛蒂</span> <a class="tag" taget="_blank" href="/search/C%E8%AF%AD%E8%A8%80/1.htm">C语言</a><a class="tag" taget="_blank" href="/search/c%E8%AF%AD%E8%A8%80/1.htm">c语言</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>目录第一种办法:新增头文件,改用C++运行第二种办法:使用srand()函数,使程序每次运行时产生不同的随机数序列,序列里第一个数肯定是不同的,那计算机拿的数就不同第三种办法:使用time()函数读取计算机的时钟值,把该值设置为随机数种子。试了好久,下面分享三种办法。原代码:#include#include//rand()在头文件stdlib.h定义,所以要包含intmain(){intmagic</div> </li> <li><a href="/article/1901870705264357376.htm" title="Python制作【大麦网】抢票程序,看演唱会再也不怕没票了" target="_blank">Python制作【大麦网】抢票程序,看演唱会再也不怕没票了</a> <span class="text-muted">中年猿人</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a> <div>前言大麦网,是中国综合类现场娱乐票务营销平台,业务覆盖演唱会、话剧、音乐剧、体育赛事等领域。但是因为票数有限,还有黄牛们不能丢了饭碗,所以导致了,很多人都抢不到票那么,今天带大家用Python来制作一个自动抢票的脚本小程序知识点:面向对象编程selenium操作浏览器pickle保存和读取Cookie实现免登陆time做延时操作os创建文件,判断文件是否存在开发环境:版本:anaconda5.2.</div> </li> <li><a href="/article/1901870327068160000.htm" title="10、C++ 存储类 - [C++系列教程 - 史上最全]" target="_blank">10、C++ 存储类 - [C++系列教程 - 史上最全]</a> <span class="text-muted">星星学霸</span> <a class="tag" taget="_blank" href="/search/C%2B%2B/1.htm">C++</a><a class="tag" taget="_blank" href="/search/%E7%B3%BB%E5%88%97%E6%95%99%E7%A8%8B/1.htm">系列教程</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>autoregisterstaticexternmutableauto存储类auto存储类是所有局部变量默认的存储类。{intmount;autointmonth;}上面的实例定义了两个带有相同存储类的变量,auto只能用在函数内,即auto只能修饰局部变量。register存储类register存储类用于定义存储在寄存器中而不是RAM中的局部变量。这意味着变量的最大尺寸等于寄存器的大小(通常是一</div> </li> <li><a href="/article/1901870075024044032.htm" title="c++如何利用线程池和epool设计高并发服务器" target="_blank">c++如何利用线程池和epool设计高并发服务器</a> <span class="text-muted">C嘎嘎嵌入式开发</span> <a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>设计一个高并发服务器需要有效地处理大量同时连接的客户端请求。结合线程池和epoll可以实现高效的I/O多路复用和任务并发处理。1.基本概念线程池:用于管理和重用线程,避免频繁创建和销毁线程带来的开销。epoll:Linux下的高效I/O多路复用机制,适合处理大量并发连接。2.设计步骤1.初始化创建一个线程池,预先启动一定数量的线程以备使用。创建一个epoll实例,用于监控多个文件描述符上的I/O事</div> </li> <li><a href="/article/1901869920577187840.htm" title="PLM项目管理软件的核心价值与企业应用场景" target="_blank">PLM项目管理软件的核心价值与企业应用场景</a> <span class="text-muted"></span> <a class="tag" taget="_blank" href="/search/%E7%A8%8B%E5%BA%8F%E5%91%98/1.htm">程序员</a> <div>PLM(ProductLifecycleManagement)项目管理软件作为企业数字化转型进程中的关键工具,正发挥着越来越重要的作用。它围绕产品从概念诞生到退役的全生命周期,整合了各种数据、流程和资源,为企业提供了一个统一的管理平台,助力企业提升效率、降低成本、增强创新能力。PLM项目管理软件的核心价值PLM项目管理软件的核心价值首先体现在数据的集中管理与共享上。在传统的企业运作模式下,产品相关</div> </li> <li><a href="/article/1901869666289119232.htm" title="「AI 加持的高效架构」高并发场景下的服务器成本优化" target="_blank">「AI 加持的高效架构」高并发场景下的服务器成本优化</a> <span class="text-muted"></span> <div>摘要在高并发场景下,服务器资源消耗巨大,导致运维成本飙升。本篇文章将探讨限流、缓存、队列等技术手段,并结合AI技术优化服务器负载,降低计算成本。通过具体案例分析,提供更经济高效的高并发架构解决方案。引言高并发的挑战随着互联网业务增长,系统需要承受高并发请求,面临以下挑战:瞬时流量激增:秒杀、抢购、热门活动带来的超高流量。资源消耗巨大:数据库、服务器、网络带宽压力大,成本攀升。响应速度下降:延迟增加</div> </li> <li><a href="/article/1901869667610324992.htm" title="陪玩小程序/代练APP/代打一键发布任务/打手抢单方便快捷" target="_blank">陪玩小程序/代练APP/代打一键发布任务/打手抢单方便快捷</a> <span class="text-muted"></span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E5%90%8E%E7%AB%AF%E5%B0%8F%E7%A8%8B%E5%BA%8F%E6%95%B0%E6%8D%AE%E5%BA%93%E7%A8%8B%E5%BA%8F%E5%91%98/1.htm">前端后端小程序数据库程序员</a> <div>对于陪玩小程序、代练APP或代打平台中,实现一键发布任务和打手抢单的功能,是提升用户体验和平台效率的关键。以下是对这一功能及其后端搭建的详细介绍:一、功能概述一键发布任务:用户(雇主)可以通过平台界面,快速填写任务需求,包括游戏名称、代练段位、所需时间、预算等信息,一键发布代练或陪玩任务。打手抢单:平台上的打手(代练者)可以实时查看新发布的任务,根据自己的能力和兴趣,快速抢接任务。二、后端搭建要点</div> </li> <li><a href="/article/1901869537872113664.htm" title="RAID10怎么创建?RAID10创建详细步骤" target="_blank">RAID10怎么创建?RAID10创建详细步骤</a> <span class="text-muted"></span> <a class="tag" taget="_blank" href="/search/raid%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%BF%90%E7%BB%B4/1.htm">raid服务器运维</a> <div>RAID10创建步骤主要有7步:1.硬件准备;2.配置RAID卡或存储设备;3.选择RAID级别;4.添加硬盘到RAID10组;5.添加硬盘到RAID10组;6.保存并退出配置;7.初始化RAID10阵列。RAID10,也被称为RAID1+0,是一种结合了RAID1的镜像功能和RAID0的条带化技术的存储阵列技术。它兼具了数据冗余和性能提升的优点,对于高端存储问题的解决有很大的帮助。RAID10的</div> </li> <li><a href="/article/1901869539105239040.htm" title="GitHub Copilot两期连看:开发流程全览及 Copilot 在 SQL 开发中的妙用" target="_blank">GitHub Copilot两期连看:开发流程全览及 Copilot 在 SQL 开发中的妙用</a> <span class="text-muted"></span> <a class="tag" taget="_blank" href="/search/microsqlgithub/1.htm">microsqlgithub</a> <div>GitHubCopilot,这款备受瞩目的AI开发助手,正以前所未有的姿态重塑开发流程。而现在,专为开发者和技术团队精心打造的GitHubCopilotFridays系列课程,正持续为大家解锁Copilot的无限潜能。今天,我们迎来了第五期和第六期课程,这将是两场不容错过的技术盛宴,深度探索Copilot在更多复杂场景、特定角色工作流中的卓越应用,准备好与我们一同深入挖掘其中的奥秘了吗?GitHu</div> </li> <li><a href="/article/1901869536597045248.htm" title="BioDeepAV:一个多模态基准数据集,包含超过1600个深度伪造视频,用于评估深度伪造检测器在面对未知生成器时的性能。" target="_blank">BioDeepAV:一个多模态基准数据集,包含超过1600个深度伪造视频,用于评估深度伪造检测器在面对未知生成器时的性能。</a> <span class="text-muted"></span> <a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E9%9B%86/1.htm">数据集</a> <div>2024-11-29,由罗马尼亚布加勒斯特大学创建BioDeepAV数据集,它专门设计来评估最先进的深度伪造检测器在面对未见过的深度伪造生成器时的泛化能力,这对于提高检测器的鲁棒性和适应性具有重要意义。一、研究背景:随着生成模型的快速发展,深度伪造内容的逼真度不断提高,人们越来越难以在线检测出被操纵的媒体内容,从而容易受到各种诈骗的欺骗。这不仅对个人隐私构成威胁,也对社会信任和民主构成挑战。目前遇</div> </li> <li><a href="/article/1901869283684708352.htm" title="编程:人类与机器对话的「通用语言」" target="_blank">编程:人类与机器对话的「通用语言」</a> <span class="text-muted"></span> <a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a> <div>——从0和1到智能时代的思维革命一、编程的本质:用逻辑驯服机器的艺术2024年,NASA「毅力号」火星车在杰泽罗陨石坑钻取岩芯时,依靠的是地球上工程师编写的120万行C语言代码。这些代码的本质,是将「避障→识别→调整」等复杂指令,转化为机器能理解的0和1序列。编程的核心不是写代码,而是把现实问题拆解为机器可执行的逻辑步骤。1.1从打孔纸带到图形化编程的进化1842年:AdaLovelace为差分机</div> </li> <li><a href="/article/1901869192148217856.htm" title="【Python学习笔记】一些关于多线程,xls文件读取,PyQt5,PyInstaller打包等问题的解决方案记录" target="_blank">【Python学习笔记】一些关于多线程,xls文件读取,PyQt5,PyInstaller打包等问题的解决方案记录</a> <span class="text-muted">百里香酚兰</span> <a class="tag" taget="_blank" href="/search/Python%E8%87%AA%E5%AD%A6%E7%AC%94%E8%AE%B0/1.htm">Python自学笔记</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a><a class="tag" taget="_blank" href="/search/pyinstaller/1.htm">pyinstaller</a><a class="tag" taget="_blank" href="/search/xls%E6%96%87%E4%BB%B6/1.htm">xls文件</a><a class="tag" taget="_blank" href="/search/PyQt5/1.htm">PyQt5</a><a class="tag" taget="_blank" href="/search/%E5%A4%9A%E7%BA%BF%E7%A8%8B/1.htm">多线程</a> <div>背景:最近利用休息时间写了个小型exe程序,主要涉及的技术点有:多线程,读取xls文件,基于PyQt5的简单GUI页面,利用PyInstaller打包成exe。虽然有ChatGPT等协助,但难免还是在开发过程中遇到了一些疑难问题,所以开个记录贴刊登解决方式。问题&解决方式:1.PyQt+PyInstaller:tqdm报错AttributeError:‘NoneType‘objecthasnoat</div> </li> <li><a href="/article/1901869065811587072.htm" title="Elasticsearch:为推理端点配置分块设置" target="_blank">Elasticsearch:为推理端点配置分块设置</a> <span class="text-muted">Elastic 中国社区官方博客</span> <a class="tag" taget="_blank" href="/search/Elasticsearch/1.htm">Elasticsearch</a><a class="tag" taget="_blank" href="/search/AI/1.htm">AI</a><a class="tag" taget="_blank" href="/search/Elastic/1.htm">Elastic</a><a class="tag" taget="_blank" href="/search/elasticsearch/1.htm">elasticsearch</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a><a class="tag" taget="_blank" href="/search/%E6%90%9C%E7%B4%A2%E5%BC%95%E6%93%8E/1.htm">搜索引擎</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E5%85%A8%E6%96%87%E6%A3%80%E7%B4%A2/1.htm">全文检索</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/ai/1.htm">ai</a> <div>推理端点对一次可处理的文本量有限,具体取决于模型的输入容量。分块(Chunking)是指将输入文本拆分成符合这些限制的小块的过程,在将文档摄取到semantic_text字段时会进行分块。分块不仅有助于保持输入文本在可处理范围内,还能使内容更加易读。相比返回一整篇长文档,在搜索结果中提供最相关的文本片段更有价值。每个分块都会包含文本片段以及从中生成的对应嵌入。默认情况下,文档会被拆分为句子(sen</div> </li> <li><a href="/article/1901868904930668544.htm" title="HarmonyNext实战:基于ArkTS的高性能数据流处理框架设计与实现" target="_blank">HarmonyNext实战:基于ArkTS的高性能数据流处理框架设计与实现</a> <span class="text-muted"></span> <a class="tag" taget="_blank" href="/search/harmonyos-next/1.htm">harmonyos-next</a> <div>HarmonyNext实战:基于ArkTS的高性能数据流处理框架设计与实现引言在HarmonyNext生态系统中,数据流处理是构建高性能应用的关键技术之一。本文将深入探讨如何基于ArkTS构建一个高效的数据流处理框架,并适配HarmonyNext平台。我们将从架构设计、核心组件实现、性能优化等多个维度进行详细讲解,并通过实战案例展示如何在实际工程中应用这些技术。1.数据流处理框架的架构设计1.1框</div> </li> <li><a href="/article/1901868903508799488.htm" title="基于HarmonyNext的ArkTS实战:构建高性能跨平台供应链管理系统" target="_blank">基于HarmonyNext的ArkTS实战:构建高性能跨平台供应链管理系统</a> <span class="text-muted"></span> <a class="tag" taget="_blank" href="/search/harmonyos-next/1.htm">harmonyos-next</a> <div>基于HarmonyNext的ArkTS实战:构建高性能跨平台供应链管理系统引言在现代供应链管理中,高效的数据处理和实时监控是提升运营效率的关键。随着HarmonyOSNext的发布,ArkTS作为其核心开发语言,为开发者提供了强大的工具来构建高性能、跨平台的应用。本文将深入探讨如何利用ArkTS12+的语法和HarmonyNext的特性,构建一个供应链管理系统。我们将通过一个详细的实战案例,讲解从</div> </li> <li><a href="/article/1901868774965964800.htm" title="HarmonyNext实战:基于ArkTS的高性能实时音视频通信系统开发" target="_blank">HarmonyNext实战:基于ArkTS的高性能实时音视频通信系统开发</a> <span class="text-muted"></span> <a class="tag" taget="_blank" href="/search/harmonyos-next/1.htm">harmonyos-next</a> <div>HarmonyNext实战:基于ArkTS的高性能实时音视频通信系统开发引言在HarmonyNext生态系统中,实时音视频通信是一个复杂且关键的技术领域,广泛应用于视频会议、在线教育、远程医疗等场景。本文将深入探讨如何基于ArkTS设计和实现一个高性能实时音视频通信系统,适配HarmonyNext,并满足实际工程中的低延迟、高清晰度和高可靠性需求。本文面向有一定开发经验的读者,假设您已经熟悉Har</div> </li> <li><a href="/article/1901868776350085120.htm" title="HarmonyNext实战:基于ArkTS的高性能金融交易系统开发" target="_blank">HarmonyNext实战:基于ArkTS的高性能金融交易系统开发</a> <span class="text-muted"></span> <a class="tag" taget="_blank" href="/search/harmonyos-next/1.htm">harmonyos-next</a> <div>HarmonyNext实战:基于ArkTS的高性能金融交易系统开发在现代金融领域,交易系统是核心基础设施,承担着高并发、低延迟和高可靠性的要求。随着金融市场的快速发展,传统的交易系统架构已无法满足日益增长的需求。HarmonyNext生态系统结合ArkTS语言的高效性和灵活性,为开发者提供了构建高性能金融交易系统的强大工具。本文将详细讲解如何基于HarmonyNext和ArkTS开发一个金融交易系</div> </li> <li><a href="/article/1901868773711867904.htm" title="HarmonyNext实战:基于ArkTS的高性能物联网设备管理平台开发" target="_blank">HarmonyNext实战:基于ArkTS的高性能物联网设备管理平台开发</a> <span class="text-muted"></span> <a class="tag" taget="_blank" href="/search/harmonyos-next/1.htm">harmonyos-next</a> <div>HarmonyNext实战:基于ArkTS的高性能物联网设备管理平台开发在现代物联网(IoT)应用中,设备管理平台是连接、监控和控制大量设备的核心系统。随着物联网设备数量的快速增长,传统的设备管理方式已无法满足高效、实时和可扩展的需求。HarmonyNext生态系统结合ArkTS语言的高效性和灵活性,为开发者提供了构建高性能物联网设备管理平台的强大工具。本文将详细讲解如何基于HarmonyNext</div> </li> <li><a href="/article/1901868520807919616.htm" title="HarmonyNext实战:基于ArkTS的高性能实时日志分析系统开发" target="_blank">HarmonyNext实战:基于ArkTS的高性能实时日志分析系统开发</a> <span class="text-muted"></span> <a class="tag" taget="_blank" href="/search/harmonyos-next/1.htm">harmonyos-next</a> <div>HarmonyNext实战:基于ArkTS的高性能实时日志分析系统开发在现代软件开发中,日志分析是监控系统运行状态、排查问题以及优化性能的重要手段。随着系统规模的扩大,日志数据量呈指数级增长,传统的日志分析方式已无法满足实时性和高效性的需求。HarmonyNext生态系统结合ArkTS语言的高效性和灵活性,为开发者提供了构建高性能实时日志分析系统的强大工具。本文将详细讲解如何基于HarmonyNe</div> </li> <li><a href="/article/1901868393586290688.htm" title="HarmonyNext实战:基于ArkTS的跨设备数据同步系统开发" target="_blank">HarmonyNext实战:基于ArkTS的跨设备数据同步系统开发</a> <span class="text-muted"></span> <a class="tag" taget="_blank" href="/search/harmonyos-next/1.htm">harmonyos-next</a> <div>HarmonyNext实战:基于ArkTS的跨设备数据同步系统开发引言在HarmonyNext生态系统中,跨设备数据同步是一个复杂且关键的需求。无论是多设备协同工作,还是用户在不同设备间无缝切换,都需要高效、可靠的数据同步机制。本文将深入探讨如何基于ArkTS设计和实现一个跨设备数据同步系统,适配HarmonyNext,并满足实际工程中的高性能和高可靠性需求。本文面向有一定开发经验的读者,假设您已</div> </li> <li><a href="/article/1901868392315416576.htm" title="基于HarmonyNext的ArkTS实战:构建高性能跨平台应用" target="_blank">基于HarmonyNext的ArkTS实战:构建高性能跨平台应用</a> <span class="text-muted"></span> <a class="tag" taget="_blank" href="/search/harmonyos-next/1.htm">harmonyos-next</a> <div>基于HarmonyNext的ArkTS实战:构建高性能跨平台应用引言随着HarmonyOSNext的发布,ArkTS作为其核心开发语言,为开发者提供了更强大的工具来构建高性能、跨平台的应用。本文将深入探讨如何利用ArkTS12+的语法和HarmonyNext的特性,构建一个实际工程中的高性能应用。我们将通过一个详细的实战案例,讲解从项目架构设计到代码实现的完整流程,确保读者能够跟随步骤完成一个真实</div> </li> <li><a href="/article/1901868391057125376.htm" title="HarmonyNext实战:基于ArkTS的高效文件加密与解密系统开发" target="_blank">HarmonyNext实战:基于ArkTS的高效文件加密与解密系统开发</a> <span class="text-muted"></span> <a class="tag" taget="_blank" href="/search/harmonyos-next/1.htm">harmonyos-next</a> <div>HarmonyNext实战:基于ArkTS的高效文件加密与解密系统开发在现代应用开发中,数据安全是一个不可忽视的重要议题。随着HarmonyNext生态系统的不断发展,ArkTS为开发者提供了强大的工具来构建高效且安全的文件加密与解密系统。本文将详细讲解如何利用ArkTS12+语法,开发一个基于HarmonyNext的文件加密与解密系统。通过本案例,您将掌握如何设计加密算法、管理文件操作,以及优化</div> </li> <li><a href="/article/1901868263885828096.htm" title="Linux Binutils 基本使用教程" target="_blank">Linux Binutils 基本使用教程</a> <span class="text-muted"></span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a> <div>简介GNUBinutils(二进制实用程序)是用于在Unix/Linux系统中操作二进制文件的工具集合。这些工具有助于汇编、链接、反汇编和检查二进制可执行文件、目标文件、库和汇编代码。安装Debian/Ubuntusudoaptupdate&&sudoaptinstallbinutilsRHEL/CentOSsudoyuminstallbinutilsmacOSbrewinstallbinutil</div> </li> <li><a href="/article/1901868262686257152.htm" title="分享之前使用HarmonyOS NEXT Canvas做的动态GIF视频的一个案例,没有感情,全是技术。" target="_blank">分享之前使用HarmonyOS NEXT Canvas做的动态GIF视频的一个案例,没有感情,全是技术。</a> <span class="text-muted"></span> <a class="tag" taget="_blank" href="/search/harmonyos-next/1.htm">harmonyos-next</a> <div>hello,大家好,我是莓创-陈杨。最近忙着改图表组件的BUG,还有定制化开发一些图表。没啥时间写新东西,草稿里面放了十几个要实现的案例分享,欠的实在太多了,后面再慢慢还吧。这次分享一下之前使用HarmonyOSNEXTCanvas做的动态视频的一个案例,没有感情,全是技术。什么!你还不知道我封装了什么图表组件,我不允许你不知道,还不快去看看:莓创开源图表快速地址效果先给大家看一下整体效果开发准备</div> </li> <li><a href="/article/1901868183866896384.htm" title="Tomcat 新手入门指南:从零开始掌握安装与配置" target="_blank">Tomcat 新手入门指南:从零开始掌握安装与配置</a> <span class="text-muted">超级小狗</span> <a class="tag" taget="_blank" href="/search/tomcat/1.htm">tomcat</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>Tomcat新手入门指南:从零开始掌握安装与配置一、Tomcat是什么?ApacheTomcat是一个开源的轻量级Web应用服务器,专为运行JavaServlet和JSP设计。它是初学JavaWeb开发的必备工具,也是企业级应用的常见选择。核心功能:处理HTTP请求、管理Servlet生命周期、支持动态网页渲染。适用场景:开发测试环境、中小型Web应用部署、微服务架构中的容器化组件。二、快速安装T</div> </li> <li><a href="/article/1901868184336658432.htm" title="网络爬虫之urllib库" target="_blank">网络爬虫之urllib库</a> <span class="text-muted">db_zwm_2035</span> <a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a> <div>目录前言:一、urllib库简介二、使用urllib.request获取网页内容三、处理URL和请求头部四、解析URLs和查询参数五、处理异常七、总结前言:随着互联网的快速发展,网络数据已经成为我们获取信息、解决问题的重要来源。网络爬虫作为获取网络数据的重要工具,越来越受到人们的关注。Python作为一种简单易学、功能强大的编程语言,在网络爬虫领域也得到了广泛的应用。在Python中,urllib</div> </li> <li><a href="/article/25.htm" title="Java实现的简单双向Map,支持重复Value" target="_blank">Java实现的简单双向Map,支持重复Value</a> <span class="text-muted">superlxw1234</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%8F%8C%E5%90%91map/1.htm">双向map</a> <div>关键字:Java双向Map、DualHashBidiMap     有个需求,需要根据即时修改Map结构中的Value值,比如,将Map中所有value=V1的记录改成value=V2,key保持不变。   数据量比较大,遍历Map性能太差,这就需要根据Value先找到Key,然后去修改。   即:既要根据Key找Value,又要根据Value</div> </li> <li><a href="/article/152.htm" title="PL/SQL触发器基础及例子" target="_blank">PL/SQL触发器基础及例子</a> <span class="text-muted">百合不是茶</span> <a class="tag" taget="_blank" href="/search/oracle%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">oracle数据库</a><a class="tag" taget="_blank" href="/search/%E8%A7%A6%E5%8F%91%E5%99%A8/1.htm">触发器</a><a class="tag" taget="_blank" href="/search/PL%2FSQL%E7%BC%96%E7%A8%8B/1.htm">PL/SQL编程</a> <div>  触发器的简介; 触发器的定义就是说某个条件成立的时候,触发器里面所定义的语句就会被自动的执行。因此触发器不需要人为的去调用,也不能调用。触发器和过程函数类似 过程函数必须要调用,   一个表中最多只能有12个触发器类型的,触发器和过程函数相似 触发器不需要调用直接执行, 触发时间:指明触发器何时执行,该值可取: before:表示在数据库动作之前触发</div> </li> <li><a href="/article/279.htm" title="[时空与探索]穿越时空的一些问题" target="_blank">[时空与探索]穿越时空的一些问题</a> <span class="text-muted">comsci</span> <a class="tag" taget="_blank" href="/search/%E9%97%AE%E9%A2%98/1.htm">问题</a> <div>       我们还没有进行过任何数学形式上的证明,仅仅是一个猜想.....       这个猜想就是; 任何有质量的物体(哪怕只有一微克)都不可能穿越时空,该物体强行穿越时空的时候,物体的质量会与时空粒子产生反应,物体会变成暗物质,也就是说,任何物体穿越时空会变成暗物质..(暗物质就我的理</div> </li> <li><a href="/article/406.htm" title="easy ui datagrid上移下移一行" target="_blank">easy ui datagrid上移下移一行</a> <span class="text-muted">商人shang</span> <a class="tag" taget="_blank" href="/search/js/1.htm">js</a><a class="tag" taget="_blank" href="/search/%E4%B8%8A%E7%A7%BB%E4%B8%8B%E7%A7%BB/1.htm">上移下移</a><a class="tag" taget="_blank" href="/search/easyui/1.htm">easyui</a><a class="tag" taget="_blank" href="/search/datagrid/1.htm">datagrid</a> <div>/** * 向上移动一行 * * @param dg * @param row */ function moveupRow(dg, row) { var datagrid = $(dg); var index = datagrid.datagrid("getRowIndex", row); if (isFirstRow(dg, row)) {</div> </li> <li><a href="/article/533.htm" title="Java反射" target="_blank">Java反射</a> <span class="text-muted">oloz</span> <a class="tag" taget="_blank" href="/search/%E5%8F%8D%E5%B0%84/1.htm">反射</a> <div>本人菜鸟,今天恰好有时间,写写博客,总结复习一下java反射方面的知识,欢迎大家探讨交流学习指教 首先看看java中的Class package demo; public class ClassTest { /*先了解java中的Class*/ public static void main(String[] args) { //任何一个类都</div> </li> <li><a href="/article/660.htm" title="springMVC 使用JSR-303 Validation验证" target="_blank">springMVC 使用JSR-303 Validation验证</a> <span class="text-muted">杨白白</span> <a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/mvc/1.htm">mvc</a> <div>JSR-303是一个数据验证的规范,但是spring并没有对其进行实现,Hibernate Validator是实现了这一规范的,通过此这个实现来讲SpringMVC对JSR-303的支持。 JSR-303的校验是基于注解的,首先要把这些注解标记在需要验证的实体类的属性上或是其对应的get方法上。 登录需要验证类 public class Login { @NotEmpty</div> </li> <li><a href="/article/787.htm" title="log4j" target="_blank">log4j</a> <span class="text-muted">香水浓</span> <a class="tag" taget="_blank" href="/search/log4j/1.htm">log4j</a> <div> log4j.rootCategory=DEBUG, STDOUT, DAILYFILE, HTML, DATABASE #log4j.rootCategory=DEBUG, STDOUT, DAILYFILE, ROLLINGFILE, HTML #console log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender log4</div> </li> <li><a href="/article/914.htm" title="使用ajax和history.pushState无刷新改变页面URL" target="_blank">使用ajax和history.pushState无刷新改变页面URL</a> <span class="text-muted">agevs</span> <a class="tag" taget="_blank" href="/search/jquery/1.htm">jquery</a><a class="tag" taget="_blank" href="/search/%E6%A1%86%E6%9E%B6/1.htm">框架</a><a class="tag" taget="_blank" href="/search/Ajax/1.htm">Ajax</a><a class="tag" taget="_blank" href="/search/html5/1.htm">html5</a><a class="tag" taget="_blank" href="/search/chrome/1.htm">chrome</a> <div>表现 如果你使用chrome或者firefox等浏览器访问本博客、github.com、plus.google.com等网站时,细心的你会发现页面之间的点击是通过ajax异步请求的,同时页面的URL发生了了改变。并且能够很好的支持浏览器前进和后退。 是什么有这么强大的功能呢? HTML5里引用了新的API,history.pushState和history.replaceState,就是通过</div> </li> <li><a href="/article/1041.htm" title="centos中文乱码" target="_blank">centos中文乱码</a> <span class="text-muted">AILIKES</span> <a class="tag" taget="_blank" href="/search/centos/1.htm">centos</a><a class="tag" taget="_blank" href="/search/OS/1.htm">OS</a><a class="tag" taget="_blank" href="/search/ssh/1.htm">ssh</a> <div>一、CentOS系统访问 g.cn ,发现中文乱码。 于是用以前的方式:yum -y install fonts-chinese CentOS系统安装后,还是不能显示中文字体。我使用 gedit 编辑源码,其中文注释也为乱码。       后来,终于找到以下方法可以解决,需要两个中文支持的包: fonts-chinese-3.02-12.</div> </li> <li><a href="/article/1168.htm" title="触发器" target="_blank">触发器</a> <span class="text-muted">baalwolf</span> <a class="tag" taget="_blank" href="/search/%E8%A7%A6%E5%8F%91%E5%99%A8/1.htm">触发器</a> <div>触发器(trigger):监视某种情况,并触发某种操作。 触发器创建语法四要素:1.监视地点(table) 2.监视事件(insert/update/delete) 3.触发时间(after/before) 4.触发事件(insert/update/delete) 语法: create trigger triggerName after/before </div> </li> <li><a href="/article/1295.htm" title="JS正则表达式的i m g" target="_blank">JS正则表达式的i m g</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F/1.htm">正则表达式</a> <div>        g:表示全局(global)模式,即模式将被应用于所有字符串,而非在发现第一个匹配项时立即停止。         i:表示不区分大小写(case-insensitive)模式,即在确定匹配项时忽略模式与字符串的大小写。         m:表示</div> </li> <li><a href="/article/1422.htm" title="HTML5模式和Hashbang模式" target="_blank">HTML5模式和Hashbang模式</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/AngularJS/1.htm">AngularJS</a><a class="tag" taget="_blank" href="/search/Hashbang%E6%A8%A1%E5%BC%8F/1.htm">Hashbang模式</a><a class="tag" taget="_blank" href="/search/HTML5%E6%A8%A1%E5%BC%8F/1.htm">HTML5模式</a> <div>        我们可以用$locationProvider来配置$location服务(可以采用注入的方式,就像AngularJS中其他所有东西一样)。这里provider的两个参数很有意思,介绍如下。 html5Mode         一个布尔值,标识$location服务是否运行在HTML5模式下。 ha</div> </li> <li><a href="/article/1549.htm" title="[Maven学习笔记六]Maven生命周期" target="_blank">[Maven学习笔记六]Maven生命周期</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/maven/1.htm">maven</a> <div>从mvn test的输出开始说起   当我们在user-core中执行mvn test时,执行的输出如下:   /software/devsoftware/jdk1.7.0_55/bin/java -Dmaven.home=/software/devsoftware/apache-maven-3.2.1 -Dclassworlds.conf=/software/devs</div> </li> <li><a href="/article/1676.htm" title="【Hadoop七】基于Yarn的Hadoop Map Reduce容错" target="_blank">【Hadoop七】基于Yarn的Hadoop Map Reduce容错</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/hadoop/1.htm">hadoop</a> <div>运行于Yarn的Map Reduce作业,可能发生失败的点包括 Task Failure Application Master Failure Node Manager Failure Resource Manager Failure 1. Task Failure 任务执行过程中产生的异常和JVM的意外终止会汇报给Application Master。僵死的任务也会被A</div> </li> <li><a href="/article/1803.htm" title="记一次数据推送的异常解决端口解决" target="_blank">记一次数据推送的异常解决端口解决</a> <span class="text-muted">ronin47</span> <a class="tag" taget="_blank" href="/search/%E8%AE%B0%E4%B8%80%E6%AC%A1%E6%95%B0%E6%8D%AE%E6%8E%A8%E9%80%81%E7%9A%84%E5%BC%82%E5%B8%B8%E8%A7%A3%E5%86%B3/1.htm">记一次数据推送的异常解决</a> <div>   需求:从db获取数据然后推送到B         程序开发完成,上jboss,刚开始报了很多错,逐一解决,可最后显示连接不到数据库。机房的同事说可以ping 通。     自已画了个图,逐一排除,把linux 防火墙 和 setenforce 设置最低。    service iptables stop </div> </li> <li><a href="/article/1930.htm" title="巧用视错觉-UI更有趣" target="_blank">巧用视错觉-UI更有趣</a> <span class="text-muted">brotherlamp</span> <a class="tag" taget="_blank" href="/search/UI/1.htm">UI</a><a class="tag" taget="_blank" href="/search/ui%E8%A7%86%E9%A2%91/1.htm">ui视频</a><a class="tag" taget="_blank" href="/search/ui%E6%95%99%E7%A8%8B/1.htm">ui教程</a><a class="tag" taget="_blank" href="/search/ui%E8%87%AA%E5%AD%A6/1.htm">ui自学</a><a class="tag" taget="_blank" href="/search/ui%E8%B5%84%E6%96%99/1.htm">ui资料</a> <div>我们每个人在生活中都曾感受过视错觉(optical illusion)的魅力。 视错觉现象是双眼跟我们开的一个玩笑,而我们往往还心甘情愿地接受我们看到的假象。其实不止如此,视觉错现象的背后还有一个重要的科学原理——格式塔原理。 格式塔原理解释了人们如何以视觉方式感觉物体,以及图像的结构,视角,大小等要素是如何影响我们的视觉的。 在下面这篇文章中,我们首先会简单介绍一下格式塔原理中的基本概念,</div> </li> <li><a href="/article/2057.htm" title="线段树-poj1177-N个矩形求边长(离散化+扫描线)" target="_blank">线段树-poj1177-N个矩形求边长(离散化+扫描线)</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E7%BA%BF%E6%AE%B5%E6%A0%91/1.htm">线段树</a> <div>package com.ljn.base; import java.util.Arrays; import java.util.Comparator; import java.util.Set; import java.util.TreeSet; /** * POJ 1177 (线段树+离散化+扫描线),题目链接为http://poj.org/problem?id=1177 </div> </li> <li><a href="/article/2184.htm" title="HTTP协议详解" target="_blank">HTTP协议详解</a> <span class="text-muted">chicony</span> <a class="tag" taget="_blank" href="/search/http%E5%8D%8F%E8%AE%AE/1.htm">http协议</a> <div>引言                                 </div> </li> <li><a href="/article/2311.htm" title="Scala设计模式" target="_blank">Scala设计模式</a> <span class="text-muted">chenchao051</span> <a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a><a class="tag" taget="_blank" href="/search/scala/1.htm">scala</a> <div>Scala设计模式                我的话: 在国外网站上看到一篇文章,里面详细描述了很多设计模式,并且用Java及Scala两种语言描述,清晰的让我们看到各种常规的设计模式,在Scala中是如何在语言特性层面直接支持的。基于文章很nice,我利用今天的空闲时间将其翻译,希望大家能一起学习,讨论。翻译</div> </li> <li><a href="/article/2438.htm" title="安装mysql" target="_blank">安装mysql</a> <span class="text-muted">daizj</span> <a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/%E5%AE%89%E8%A3%85/1.htm">安装</a> <div>安装mysql   (1)删除linux上已经安装的mysql相关库信息。rpm  -e  xxxxxxx   --nodeps (强制删除)      执行命令rpm -qa |grep mysql 检查是否删除干净   (2)执行命令  rpm -i MySQL-server-5.5.31-2.el</div> </li> <li><a href="/article/2565.htm" title="HTTP状态码大全" target="_blank">HTTP状态码大全</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/http%E7%8A%B6%E6%80%81%E7%A0%81/1.htm">http状态码</a> <div>完整的 HTTP 1.1规范说明书来自于RFC 2616,你可以在http://www.talentdigger.cn/home/link.php?url=d3d3LnJmYy1lZGl0b3Iub3JnLw%3D%3D在线查阅。HTTP 1.1的状态码被标记为新特性,因为许多浏览器只支持 HTTP 1.0。你应只把状态码发送给支持 HTTP 1.1的客户端,支持协议版本可以通过调用request</div> </li> <li><a href="/article/2692.htm" title="asihttprequest上传图片" target="_blank">asihttprequest上传图片</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/ASIHTTPRequest/1.htm">ASIHTTPRequest</a> <div>NSURL *url =@"yourURL"; ASIFormDataRequest*currentRequest =[ASIFormDataRequest requestWithURL:url]; [currentRequest setPostFormat:ASIMultipartFormDataPostFormat];[currentRequest se</div> </li> <li><a href="/article/2819.htm" title="C语言中,关键字static的作用" target="_blank">C语言中,关键字static的作用</a> <span class="text-muted">e200702084</span> <a class="tag" taget="_blank" href="/search/C%2B%2B/1.htm">C++</a><a class="tag" taget="_blank" href="/search/c/1.htm">c</a><a class="tag" taget="_blank" href="/search/C%23/1.htm">C#</a> <div>在C语言中,关键字static有三个明显的作用: 1)在函数体,局部的static变量。生存期为程序的整个生命周期,(它存活多长时间);作用域却在函数体内(它在什么地方能被访问(空间))。 一个被声明为静态的变量在这一函数被调用过程中维持其值不变。因为它分配在静态存储区,函数调用结束后并不释放单元,但是在其它的作用域的无法访问。当再次调用这个函数时,这个局部的静态变量还存活,而且用在它的访</div> </li> <li><a href="/article/2946.htm" title="win7/8使用curl" target="_blank">win7/8使用curl</a> <span class="text-muted">geeksun</span> <a class="tag" taget="_blank" href="/search/win7/1.htm">win7</a> <div>1.  WIN7/8下要使用curl,需要下载curl-7.20.0-win64-ssl-sspi.zip和Win64OpenSSL_Light-1_0_2d.exe。 下载地址:  http://curl.haxx.se/download.html 请选择不带SSL的版本,否则还需要安装SSL的支持包   2.  可以给Windows增加c</div> </li> <li><a href="/article/3073.htm" title="Creating a Shared Repository; Users Sharing The Repository" target="_blank">Creating a Shared Repository; Users Sharing The Repository</a> <span class="text-muted">hongtoushizi</span> <a class="tag" taget="_blank" href="/search/git/1.htm">git</a> <div>转载自:   http://www.gitguys.com/topics/creating-a-shared-repository-users-sharing-the-repository/ Commands discussed in this section: git init –bare git clone git remote git pull git p</div> </li> <li><a href="/article/3200.htm" title="Java实现字符串反转的8种或9种方法" target="_blank">Java实现字符串反转的8种或9种方法</a> <span class="text-muted">Josh_Persistence</span> <a class="tag" taget="_blank" href="/search/%E5%BC%82%E6%88%96%E5%8F%8D%E8%BD%AC/1.htm">异或反转</a><a class="tag" taget="_blank" href="/search/%E9%80%92%E5%BD%92%E5%8F%8D%E8%BD%AC/1.htm">递归反转</a><a class="tag" taget="_blank" href="/search/%E4%BA%8C%E5%88%86%E4%BA%A4%E6%8D%A2%E5%8F%8D%E8%BD%AC/1.htm">二分交换反转</a><a class="tag" taget="_blank" href="/search/java%E5%AD%97%E7%AC%A6%E4%B8%B2%E5%8F%8D%E8%BD%AC/1.htm">java字符串反转</a><a class="tag" taget="_blank" href="/search/%E6%A0%88%E5%8F%8D%E8%BD%AC/1.htm">栈反转</a> <div>注:对于第7种使用异或的方式来实现字符串的反转,如果不太看得明白的,可以参照另一篇博客: http://josh-persistence.iteye.com/blog/2205768   /** * */ package com.wsheng.aggregator.algorithm.string; import java.util.Stack; /** </div> </li> <li><a href="/article/3327.htm" title="代码实现任意容量倒水问题" target="_blank">代码实现任意容量倒水问题</a> <span class="text-muted">home198979</span> <a class="tag" taget="_blank" href="/search/PHP/1.htm">PHP</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E5%80%92%E6%B0%B4/1.htm">倒水</a> <div>形象化设计模式实战             HELLO!架构                     redis命令源码解析   倒水问题:有两个杯子,一个A升,一个B升,水有无限多,现要求利用这两杯子装C</div> </li> <li><a href="/article/3454.htm" title="Druid datasource" target="_blank">Druid datasource</a> <span class="text-muted">zhb8015</span> <a class="tag" taget="_blank" href="/search/druid/1.htm">druid</a> <div>推荐大家使用数据库连接池 DruidDataSource. http://code.alibabatech.com/wiki/display/Druid/DruidDataSource DruidDataSource经过阿里巴巴数百个应用一年多生产环境运行验证,稳定可靠。 它最重要的特点是:监控、扩展和性能。 下载和Maven配置看这里: http</div> </li> <li><a href="/article/3581.htm" title="两种启动监听器ApplicationListener和ServletContextListener" target="_blank">两种启动监听器ApplicationListener和ServletContextListener</a> <span class="text-muted">spjich</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/%E6%A1%86%E6%9E%B6/1.htm">框架</a> <div>引言:有时候需要在项目初始化的时候进行一系列工作,比如初始化一个线程池,初始化配置文件,初始化缓存等等,这时候就需要用到启动监听器,下面分别介绍一下两种常用的项目启动监听器   ServletContextListener  特点: 依赖于sevlet容器,需要配置web.xml 使用方法: public class StartListener implements </div> </li> <li><a href="/article/3708.htm" title="JavaScript Rounding Methods of the Math object" target="_blank">JavaScript Rounding Methods of the Math object</a> <span class="text-muted">何不笑</span> <a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/Math/1.htm">Math</a> <div>    The next group of methods has to do with rounding decimal values into integers. Three methods — Math.ceil(),  Math.floor(), and  Math.round() — handle rounding in differen</div> </li> </ul> </div> </div> </div> <div> <div class="container"> <div class="indexes"> <strong>按字母分类:</strong> <a href="/tags/A/1.htm" target="_blank">A</a><a href="/tags/B/1.htm" target="_blank">B</a><a href="/tags/C/1.htm" target="_blank">C</a><a href="/tags/D/1.htm" target="_blank">D</a><a href="/tags/E/1.htm" target="_blank">E</a><a href="/tags/F/1.htm" target="_blank">F</a><a href="/tags/G/1.htm" target="_blank">G</a><a href="/tags/H/1.htm" target="_blank">H</a><a href="/tags/I/1.htm" target="_blank">I</a><a href="/tags/J/1.htm" target="_blank">J</a><a href="/tags/K/1.htm" target="_blank">K</a><a href="/tags/L/1.htm" target="_blank">L</a><a href="/tags/M/1.htm" target="_blank">M</a><a href="/tags/N/1.htm" target="_blank">N</a><a href="/tags/O/1.htm" target="_blank">O</a><a href="/tags/P/1.htm" target="_blank">P</a><a href="/tags/Q/1.htm" target="_blank">Q</a><a href="/tags/R/1.htm" target="_blank">R</a><a href="/tags/S/1.htm" target="_blank">S</a><a href="/tags/T/1.htm" target="_blank">T</a><a href="/tags/U/1.htm" target="_blank">U</a><a href="/tags/V/1.htm" target="_blank">V</a><a href="/tags/W/1.htm" target="_blank">W</a><a href="/tags/X/1.htm" target="_blank">X</a><a href="/tags/Y/1.htm" target="_blank">Y</a><a href="/tags/Z/1.htm" target="_blank">Z</a><a href="/tags/0/1.htm" target="_blank">其他</a> </div> </div> </div> <footer id="footer" class="mb30 mt30"> <div class="container"> <div class="footBglm"> <a target="_blank" href="/">首页</a> - <a target="_blank" href="/custom/about.htm">关于我们</a> - <a target="_blank" href="/search/Java/1.htm">站内搜索</a> - <a target="_blank" href="/sitemap.txt">Sitemap</a> - <a target="_blank" href="/custom/delete.htm">侵权投诉</a> </div> <div class="copyright">版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved. <!-- <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">京ICP备09083238号</a><br>--> </div> </div> </footer> <!-- 代码高亮 --> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shCore.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shLegacy.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shAutoloader.js"></script> <link type="text/css" rel="stylesheet" href="/static/syntaxhighlighter/styles/shCoreDefault.css"/> <script type="text/javascript" src="/static/syntaxhighlighter/src/my_start_1.js"></script> </body> </html>