11 Flask mega-tutorial 第11章 美化页面 Facelift

如需转载请注明出处。
win10 64位、Python 3.6.3、Notepad++、Chrome 67.0.3396.99(正式版本)(64 位)
注:作者编写时间2018-02-13,linux、python 3.5.2

以下内容均是加入自己的理解与增删,以记录学习过程。不限于翻译,部分不完全照搬作者Miguel Grinberg的博客,版权属于作者,感谢他提供免费学习的资料。

传送门
00 开篇 01 Hello world 02 模板 03 Web表单
04 数据库 05 用户登录 06 个人资料和头像 07 错误处理
08 关注 09 分页 10 支持QQ邮箱 11 美化页面
12 时间和日期 13 I18n和L10n 翻译成中文 zh-CN 14 Ajax(百度翻译API 15 更好的App结构(蓝图)
16 全文搜索 17 部署到腾讯云Ubuntu 18 部署到Heroku 19 部署到Docker容器
20 JavaScript魔法 21 用户通知 22 后台工作(Redis) 23 应用程序编程接口(API)
本章将学习基于 Bootstrap用户界面框架的模板替换基础的HTML模板。(bootstrap,译作 引导

这个Microblog应用程序已有一段时间了,或许已经注意到,并没有花时间来美化它的页面。所有的模板是使用的基础样式,没有自定义样式。这对于我们来说非常有用,可以专注于应用程序的实际逻辑,不用分心去编写好看的HTML和CSS代码。

目前已经专注于应用程序的后端部分有一段时间了。因此,本章将暂停一下,并花一些时间来学习 如何使应用程序看起来更加精致、专业。

本章将与之前的章节略有不同,因为不会像往常那样详细地关注Python方面。创建漂亮的网页是一个很大的主题,而与Python web后端开发很大程度上无关,因此将讨论一些基本指导和想法,将重新设计应用的外观来研究和学习它。

CSS框架

虽然我们可以说 编码很难,但与网页设计师相比,我们的痛苦还是无足轻重的,毕竟网页设计师必须让网页在所有Web浏览器上呈现良好一致外观的模板。近年来,变得越来越好,但在某些浏览器上仍然存在一些模糊的错误或奇怪的设定,使得设计网页的任务还是很困难。如果还要兼容屏幕限制设备(如平板电脑、智能手机)上的浏览器,则更加困难。

如果你像我一样,只是一个想创建规范网页的开发人员,没有时间或兴趣去学习底层机制,并通过编写原生HTML和CSS来实现它,那么唯一可行的解决方案是使用CSS框架来简化任务。通过这条路径,将失去一些操作自由,但另一方面,我们的网页在所有浏览器中会看起来很不错,而也不需要花费太多精力。CSS框架为普通类型的用户界面元素提供了高级CSS类的集合,其中包含预定义样式。这些框架中的大多数还为 不能使用HTML和CSS严格执行的操作提供JavaScript插件。

介绍Bootstrap

最受欢迎的一个CSS框架是由Twitter建立的Bootstrap。如果想看使用这个框架设计的页面类型,可查看文档中的示例。

使用Bootstrap为网页设置样式的好处:

  1. 在所有主流Web浏览器上看起来相似;
  2. 处理台式机、平板电脑、手机屏幕尺寸;
  3. 可定制布局;
  4. 风格精美的导航栏、表单、按钮、提示、弹出窗口等。

使用Bootstrap最直接方法是在基础模板中导入 bootstrap.min.css文件。可以下载这个文件副本,并将其添加到项目中;也可以直接从CDN导入(这里查看)。然后,可以根据文档开始使用它提供的通用CSS类。还可以导入包含框架JavaScript代码的bootstrap.min.js文件,以便使用更高级的功能。

幸运的是,有一个名为 Flask-Bootstrap的Flask扩展,它提供一个随时可用的基本模板,它安装了Bootstrap框架。安装这个扩展:版本3.3.7.1;附带安装dominate 2.3.1(用于使用优雅的DOM API创建和操作HTML文档)、visitor 0.1.3(一个微型Pythonic访客实现)。

(venv) D:\microblog>pip install flask-bootstrap
Collecting flask-bootstrap
  Using cached https://files.pythonhosted.org/packages/88/53/958ce7c2aa26280b7fd7f3eecbf13053f1302ee2acb1db58ef32e1c23c2a/Flask-Bootstrap-3.3.7.1.tar.gz
Requirement already satisfied: Flask>=0.8 in d:\microblog\venv\lib\site-packages (from flask-bootstrap)
Collecting dominate (from flask-bootstrap)
  Using cached https://files.pythonhosted.org/packages/43/b2/3b7d67dd59dab93ae08569384b254323516e8868b453eea5614a53835baf/dominate-2.3.1.tar.gz
Collecting visitor (from flask-bootstrap)
  Using cached https://files.pythonhosted.org/packages/d7/58/785fcd6de4210049da5fafe62301b197f044f3835393594be368547142b0/visitor-0.1.3.tar.gz
Requirement already satisfied: click>=5.1 in d:\microblog\venv\lib\site-packages (from Flask>=0.8->flask-bootstrap)
Requirement already satisfied: itsdangerous>=0.24 in d:\microblog\venv\lib\site-packages (from Flask>=0.8->flask-bootstrap)
Requirement already satisfied: Werkzeug>=0.14 in d:\microblog\venv\lib\site-packages (from Flask>=0.8->flask-bootstrap)
Requirement already satisfied: Jinja2>=2.10 in d:\microblog\venv\lib\site-packages (from Flask>=0.8->flask-bootstrap)
Requirement already satisfied: MarkupSafe>=0.23 in d:\microblog\venv\lib\site-packages (from Jinja2>=2.10->Flask>=0.8->flask-bootstrap)
Installing collected packages: dominate, visitor, flask-bootstrap
  Running setup.py install for dominate ... done
  Running setup.py install for visitor ... done
  Running setup.py install for flask-bootstrap ... done
Successfully installed dominate-2.3.1 flask-bootstrap-3.3.7.1 visitor-0.1.3

使用Flask-Bootstrap

Flask-Bootstrap和大多数其他Flask扩展一样,需要进行初始化:

app/__init__.py:添加Flask-Bootstrap实例

# ...
from flask_bootstrap import Bootstrap

app = Flask(__name__)
# ...
mail = Mail(app)
bootstrap = Bootstrap(app)

#...

初始化扩展后,bootstrap/base.html模板变为可用,并可以使用extends子句从应用程序模板中引用。

但是记得,我已经使用了extends子句继承自己的基础模板,这允许将页面的公共部分放在一个地方。我的 base.html模板定义了导航栏,其中包含一些链接,还导出了一个content块。目前为止,应用程序中所有其他模板都是从基础模板继承,并为content块提供页面的主要内容。

那么,该如何适应 Bootstrap基础模板呢?想法是使用三级层次结构,而不是两层。bootstrap/base.html模板提供页面的基本结构,其中包含Bootstrap框架文件。这个模板 为了派生模板导出几个块,如titlenavbarcontent(查看完整的 块列表)。我将更改我的base.html模板,让它从bootstrap/base.html模板派生,并为titlenavbarcontent块提供实现。反过来,base.html将为了它派生模板去定义页面内容而导出自己的app_content块。

下方将看到base.html在修改后如何从Bootstrap基础模板继承。
app/templates/base.html:重新设计基础模板

{% extends "bootstrap/base.html" %}

{% block title %}
	{% if title %}
		{{ title }} - Microblog
	{% else %}
		Welcome to Microblog
	{% endif %}
{% endblock %}

{% block navbar %}
	
{% endblock %}

{% block content %}
	
{% with messages = get_flashed_messages() %} {% if messages %} {% for message in messages %} {% endfor %} {% endif %} {% endwith %} {# application content needs to be provided in the app_content block #} {% block app_content %}{% endblock %}
{% endblock %}

在上述代码中,可看到如何从bootstrap/base.html派生这个模板,然后分别实现页面标题、导航栏、页面内容 三个块。

title 块 使用 </code>标签 定义将用于页面标题的文本。对于个块,只是移动了在原始基础模板中<code><title></code>标签内的逻辑。</p> <p><code>navbar 块</code> 是可选块,可用于定义导航栏。对于这个块,在Bootstrap导航栏文档中的改写了这个示例,以便它在左端包含站点标记,接着是 Home 和Explore链接。然后,添加了与页面右边框对齐的Profile和Login或Logout链接。</p> <p>最后,在<code>content块</code>中定义了一个顶级容器,在其中编写了渲染 闪烁消息的逻辑,现在它们显示为Bootstrap警报。接着是一个新的<code>app_content块</code>,它被定义为 只有派生模板才能定义它们自己的内容。</p> <p>所有页面模板的原始版本 都在名为<code>content</code>的块中定义它们的内容。如上所示,名为<code>content</code>的块被Flask-Bootstrap所使用,因此将内容块 重命名为<code>app_content</code>。所以,我们所有的模板都必须重命名才能去使用app_content块 作为它们的内容块。例如,如下是<code>404.html</code>模板 如何修改版本的演示:</p> <pre><code>{% extends "base.html" %} {% block app_content %} <h1>File Not Found</h1> <p> <a href="{{ url_for('index') }}">Back</a> </p> {% endblock %} </code></pre> <p>剩余的所有其他模板一一按上例修改即可。</p> <h1>渲染Bootstarp表单</h1> Flask-Bootstrap有一个很棒的工作是渲染表单。Flask-Bootstrap不用逐一设置表单字段的样式,而是附带一个宏(macro),它接受一个Flask-WTF表单对象作为参数,并使用Bootstrap样式呈现完整的表单。 <p>下方将看到重新设计的<code>register.html</code>模板作为一个示例:<br> <b>app/templates/register.html</b>:</p> <pre><code>{% extends "base.html" %} {% import 'bootstrap/wtf.html' as wtf %} {% block app_content %} <h1>Register</h1> <div class="row"> <div class="col-md-4"> {{ wtf.quick_form(form) }} </div> </div> {% endblock %} </code></pre> <p>上述代码中,在顶部声明的<code>import</code>工作原理与在模板上边的一个Python <code>import</code>类似。这还添加了一个<code>wtf.quick_form()</code>宏,它在一行简单代码中呈现完整的表单,包括支持显示验证错误,并且所有样式都适合Bootstrap框架。</p> <p>以下展示为应用程序中的<code>其他表单</code>所做的更改:<br> <b>app/templates/edit_profile.html</b></p> <pre><code>{% extends "base.html" %} {% import 'bootstrap/wtf.html' as wtf %} {% block app_content %} <h1>Edit Profile</h1> <div class="row"> <div class="col-md-4"> {{ wtf.quick_form(form) }} </div> </div> {% endblock %} </code></pre> <p><b>app/templates/index.html</b></p> <pre><code>{% extends "base.html" %} {% import 'bootstrap/wtf.html' as wtf %} {% block app_content %} <h1>Hello,{{ current_user.username }}!</h1> {% if form %} {{ wtf.quick_form(form) }} <br> {% endif %} {% for post in posts %} {% include '_post.html' %} {% endfor %} <nav aria-label="..."> <ul class="pager"> <li class="previous{% if not prev_url %} disabled{% endif %}"> <a href="{{ prev_url or '#' }}"> <span aria-hidden="true">←</span> Newer posts </a> </li> <li class="next{% if not next_url %} disabled{% endif %}"> <a href="{{ next_url or '#' }}"> Older posts <span aria-hidden="true">→</span> </a> </li> </ul> </nav> {% endblock %} </code></pre> <p><b>app/templates/login.html</b></p> <pre><code>{% extends "base.html" %} {% import 'bootstrap/wtf.html' as wtf %} {% block app_content %} <h1>Sign In</h1> <div class="row"> <div class="col-md-4"> {{ wtf.quick_form(form) }} </div> </div> <br> <p>New User? <a href="{{ url_for('register') }}">Click to Register!</a></p> <p> Forgot Your Password? <a href="{{ url_for('reset_password_request') }}">Click to Reset It</a> </p> {% endblock %} </code></pre> <p><b>app/templates/reset_password.html</b></p> <pre><code>{% extends "base.html" %} {% import 'bootstrap/wtf.html' as wtf %} {% block app_content %} <h1>Reset Your Password</h1> <div class="row"> <div class="col-md-4"> {{ wtf.quick_form(form) }} </div> </div> {% endblock %} </code></pre> <p><b>app/templates/reset_password_request.html</b></p> <pre><code>{% extends "base.html" %} {% import 'bootstrap/wtf.html' as wtf %} {% block app_content %} <h1>Reset Password</h1> <div class="row"> <div class="col-md-4"> {{ wtf.quick_form(form) }} </div> </div> {% endblock %} </code></pre> <p><b>app/templates/user.html</b></p> <pre><code>{% extends "base.html" %} {% block app_content %} <table class="table table-hover"> <tr> <td width="256px"><img src="{{ user.avatar(256) }}"></td> <td> <h1>User:{{ user.username }}</h1> {% if user.about_me %} <p>{{ user.about_me }}</p> {% endif %} {% if user.last_seen %} <p>Last seen on:{{ user.last_seen }}</p> {% endif %} {% if user == current_user %} <p> <a href="{{ url_for('edit_profile') }}">Edit your profile</a> </p> {% elif not current_user.is_following(user) %} <p> <a href="{{ url_for('follow', username=user.username) }}">Follow</a> </p> {% else %} <p> <a href="{{ url_for('unfollow', username=user.username) }}">Unfollow</a> </p> {% endif %} </td> </tr> </table> {% for post in posts %} {% include '_post.html' %} {% endfor%} <nav aria-label="..."> <ul class="pager"> <li class="previous{% if not prev_url %} disabled{% endif %}"> <a href="{{ prev_url or '#' }}"> <span aria-hidden="true">←</span> Newer posts </a> </li> <li class="next{% if not next_url %} disabled{% endif %}"> <a href="{{ next_url or '#' }}"> Older posts <span aria-hidden="true">→</span> </a> </li> </ul> </nav> {% endblock%} </code></pre> <h1>博客帖子的渲染</h1> 呈现单个博客帖子的表示逻辑被抽象为 名为`_post.html`的子模板。对其小调整,以便在Bootstrap下看起来更好。 <b>app/templates/_post.html</b>: <pre><code><table class="table table-hover"> <tr> <td width="70px"> <a href="{{ url_for('user', username=post.author.username) }}"> <img src="{{ post.author.avatar(70) }}" /> </a> </td> <td> <a href="{{ url_for('user', username=post.author.username) }}"> {{ post.author.username }} </a> says: <br> {{ post.body }} </td> </tr> </table> </code></pre> <h1>渲染分页链接</h1> 分页链接是Bootstrap提供支持的另一个领域。为此,再一次参考Bootstrap[文档](https://getbootstrap.com/docs/3.3/components/#optional-disabled-state),并调整其中一个示例。 <b>app/templates/index.html</b>:重新设计的分页链接 ``` ... <nav> <ul class="pager"> <li class="previous{% if not prev_url %} disabled{% endif %}"> ← Newer posts </li> <li><pre><code> <li class="next{% if not next_url %} disabled{% endif %}"> <a href="{{ next_url or '#' }}"> Older posts <span aria-hidden="true">→</span> </a> </li> </ul> </nav> </code></pre> </li> </ul> </nav> <p>{% endblock %}</p> <pre><code>不过注意,在上述实现中,当某个方向没有更多内容时,将运用禁用状态,而不是隐藏下一个或上一个链接,这将使链接显示为灰色。 类似的更改也需要运用于`user.html`,这个更改在上一小节上展示了。 最终效果呈现: ![这里写图片描述](https://img-blog.csdn.net/20180822201005329?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zODI1NjQ3NA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70) 目前为止,项目结构: <pre>microblog/ app/ templates/ email/ reset_password.html reset_password.txt _post.html 404.html 500.html base.html edit_profile.html index.html login.html register.html reset_password.html reset_password_request.html user.html __init__.py email.py errors.py forms.py models.py routes.py logs/ microblog.log migrations/ venv/ app.db config.py microblog.py tests.py </pre> 参考: [作者博客](https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-xi-facelift) <font color=red>如需转载请注明出处。</font> </code></pre> </div> </div> </div> </div> </div> <!--PC和WAP自适应版--> <div id="SOHUCS" sid="1590486847476310016"></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">你可能感兴趣的:(Python,3.X,flask,Flask,mega-tutorial,Facelift,flask,flask,web,python,web开发)</h4> <div id="paradigm-article-related"> <div class="recommend-post mb30"> <ul class="widget-links"> <li><a href="/article/1833487741132828672.htm" title="C# WinForm实现WebService接口进行图片上传下载" target="_blank">C# WinForm实现WebService接口进行图片上传下载</a> <span class="text-muted">诡道荒行</span> <div>本文还有配套的精品资源,点击获取简介:本文深入介绍了在C#WinForm应用程序中使用WebService接口连接服务器,实现图片的上传和下载功能。通过理解WebService基础,利用WinForm工具创建用户界面,并实现客户端与WebService的连接,我们详细探讨了图片上传与下载的具体步骤,包括文件选择、数据转换、接口调用,以及异常处理和进度显示。同时,还强调了安全性与性能优化的重要性,确</div> </li> <li><a href="/article/1833482574731767808.htm" title="类方法、类实例方法和类静态方法(Python)" target="_blank">类方法、类实例方法和类静态方法(Python)</a> <span class="text-muted">Qh果壳</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> <div>目录1.类方法(ClassMethod)2.类实例方法(InstanceMethod)3.类静态方法(StaticMethod)在Python中,类方法、类实例方法和类静态方法是与类相关联的三种不同类型的方法。1.类方法(ClassMethod):类方法是通过装饰器@classmethod来定义的,它的第一个参数是类本身(通常被命名为"cls"),而不是实例。类方法可以通过类名调用,也可以通过实例</div> </li> <li><a href="/article/1833481312447590400.htm" title="python面试知识汇总" target="_blank">python面试知识汇总</a> <span class="text-muted">m0_61721020</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a> <div>读写锁,不同点,应用场景互斥锁:mutex,用于保证在任何时刻,都只能有一个线程访问该对象。当获取锁操作失败时,线程会进入睡眠,等待锁释放时被唤醒自旋锁:spinlock,在任何时刻同样只能有一个线程访问对象。但是当获取锁操作失败时,不会进入睡眠,而是会在原地自旋,直到锁被释放。这样节省了线程从睡眠状态到被唤醒期间的消耗,在加锁时间短暂的环境下会极大的提高效率。但如果加锁时间过长,则会非常浪费CP</div> </li> <li><a href="/article/1833480808011231232.htm" title="【Python笔记】向量:@classmethod与 @staticmethod。零基础" target="_blank">【Python笔记】向量:@classmethod与 @staticmethod。零基础</a> <span class="text-muted">万物皆可.C</span> <a class="tag" taget="_blank" href="/search/Python%E7%AC%94%E8%AE%B0/1.htm">Python笔记</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a> <div>类成员比较@classmethod与@staticmethod共同点:两个都是装饰器,装饰的成员函数可以通过类名.方法名(…)来调用区别:最显著的特点是classmethod需要传递一个参数cls,而staticmethod不需要。因此可以访问、修改类的属性,类的方法,实例化对象等,避免硬编码;而staticmethod不行,classmethod可以判断出自己是通过基类被调用,还是通过某个子类被</div> </li> <li><a href="/article/1833479296862220288.htm" title="深入探索从ES6到ES2023" target="_blank">深入探索从ES6到ES2023</a> <span class="text-muted">hai40587</span> <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/ecmascript/1.htm">ecmascript</a> <div>从ES6到ES2023,我们深入探索ECMAScript(简称ES)的演变与发展,了解这一JavaScript标准背后的技术革新和进步。ECMAScript作为JavaScript的标准化版本,每年都在不断推出新版本,为开发者带来更加丰富和强大的功能。本文将从ES6的引入开始,逐步介绍到最新的ES2023,同时探讨这些新特性对现代Web开发的影响。ECMAScript简介与JavaScript的关</div> </li> <li><a href="/article/1833477529952940032.htm" title="《Python 面试热门问题五》" target="_blank">《Python 面试热门问题五》</a> <span class="text-muted">陈在天box</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> <div>一、引言Python作为一种广泛应用的高级编程语言,在各个领域都有着重要的地位。在面试中,Python相关的问题常常涉及到语言的基础知识、编程技巧、常用库的使用以及实际项目经验等方面。本文将围绕五个热门的Python面试问题进行深入探讨,帮助读者更好地准备Python面试,提升自己的编程能力和竞争力。二、问题一:Python的数据类型有哪些?(一)基本数据类型数字类型整数(int):Python中</div> </li> <li><a href="/article/1833477530372370432.htm" title="《Nginx 负载均衡详解》" target="_blank">《Nginx 负载均衡详解》</a> <span class="text-muted">陈在天box</span> <a class="tag" taget="_blank" href="/search/nginx/1.htm">nginx</a><a class="tag" taget="_blank" href="/search/%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1/1.htm">负载均衡</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a> <div>一、引言在当今互联网时代,随着业务的不断发展和用户量的持续增长,单一服务器往往难以满足高并发的访问需求。为了提高系统的可用性、可靠性和性能,负载均衡技术应运而生。Nginx作为一款高性能的Web服务器和反向代理服务器,提供了强大的负载均衡功能。本文将深入探讨Nginx负载均衡的原理、配置方法、算法以及实际应用中的注意事项,帮助读者更好地理解和运用Nginx负载均衡技术。二、负载均衡概述(一)负载均</div> </li> <li><a href="/article/1833472993293070336.htm" title="HTML 文本标签" target="_blank">HTML 文本标签</a> <span class="text-muted">一壶浊酒..</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E5%BC%80%E5%8F%91/1.htm">前端开发</a><a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a> <div>一个静态页面绝大部分都是由文字、图片、超链接、音频、视频组成。动态页面和静态页面的区别在于:是否与服务器进行数据交互标题标签这是一级标题这是二级标题这是三级标题这是四级标题这是五级标题这是六级标题web前端开发床前明月光,疑是地上霜。举头望明月,低头思故乡这是普通文本这是粗体文本这是粗体文本斜体文本斜体文本斜体文本--->(a+b)2=a2+b2+2abH2SO4是指硫酸分子水果原价:6元现在:5</div> </li> <li><a href="/article/1833472992869445632.htm" title="python(64) 内存的几个现象,主动释放内存" target="_blank">python(64) 内存的几个现象,主动释放内存</a> <span class="text-muted">python开发笔记</span> <a class="tag" taget="_blank" href="/search/Python/1.htm">Python</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a> <div>1.主动释放内存的方式在Python中使用gc.collect()方法清除内存使用del语句清除Python中的内存gc.collect(generation=2)方法用于清除或释放Python中未引用的内存。未引用的内存是无法访问且无法使用的内存。可选参数generation是一个整数,值的范围是0到2。它使用gc.collect()方法指定要收集的对象的生成。在Python中,寿命短的对象存储</div> </li> <li><a href="/article/1833471858285047808.htm" title="《响应式 Web 设计:纯 HTML 和 CSS 的实现技巧》" target="_blank">《响应式 Web 设计:纯 HTML 和 CSS 的实现技巧》</a> <span class="text-muted">陈在天box</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</a> <div>一、引言在当今数字化时代,人们使用各种不同的设备访问网页,包括台式电脑、笔记本电脑、平板电脑和智能手机等。为了确保网页在不同设备上都能提供良好的用户体验,响应式Web设计变得至关重要。响应式Web设计是一种能够根据设备屏幕大小和分辨率自动调整布局和样式的设计方法。本文将深入探讨如何使用纯HTML和CSS实现响应式Web设计,分享一些实用的技巧和最佳实践。二、响应式Web设计的重要性(一)满足不同设</div> </li> <li><a href="/article/1833470724686311424.htm" title="Python的Pillow(图像处理库)非常详细的学习笔记" target="_blank">Python的Pillow(图像处理库)非常详细的学习笔记</a> <span class="text-muted">深蓝海拓</span> <a class="tag" taget="_blank" href="/search/%E6%9C%BA%E5%99%A8%E8%A7%86%E8%A7%89/1.htm">机器视觉</a><a class="tag" taget="_blank" href="/search/pillow%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/1.htm">pillow学习笔记</a><a class="tag" taget="_blank" href="/search/pillow/1.htm">pillow</a><a class="tag" taget="_blank" href="/search/%E8%AE%A1%E7%AE%97%E6%9C%BA%E8%A7%86%E8%A7%89/1.htm">计算机视觉</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%9B%BE%E5%83%8F%E5%A4%84%E7%90%86/1.htm">图像处理</a> <div>Python的Pillow库是一个非常强大的图像处理库。安装Pillow库:在终端或命令行中输入以下命令来安装Pillow:pipinstallpillow安装后查看是否安装成功以及当前版本pipshowPillow升级库:pipinstallpillow--upgrade 一些基础的应用1、图像文件方面的:打开文件1)直接打开文件:这种方式是最常见的直接打开图片文件的方法,以文件路径作为参数,P</div> </li> <li><a href="/article/1833470345600921600.htm" title="使用docker部署考试系统" target="_blank">使用docker部署考试系统</a> <span class="text-muted">汪公子492</span> <a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a> <div>web--拉取nginx--挂载项目文档dist--dockerrun-itd-v/root/pes/web/dist/:/usr/share/nginx/html-p80:80nginx:latest配置mysql服务--拉取mysql:5.7.44镜像--创建容器测试dockerrun-itd-p3306:3306-eMYSQL_ROOT_PASSWORD=rootmysql:5.7.44do</div> </li> <li><a href="/article/1833469589447602176.htm" title="python中csv文件的详细操作" target="_blank">python中csv文件的详细操作</a> <span class="text-muted">GY-1997</span> <a class="tag" taget="_blank" href="/search/python%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%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>在Python中,可以使用内置的csv模块来操作CSV文件。以下是一些常见的CSV文件操作示例:1.读取CSV文件:importcsvwithopen('file.csv','r')asfile:reader=csv.reader(file)forrowinreader:print(row)2.写入CSV文件:importcsvdata=[['Name','Age','City'],['John'</div> </li> <li><a href="/article/1833466437298122752.htm" title="Web安全之CSRF攻击详解与防护" target="_blank">Web安全之CSRF攻击详解与防护</a> <span class="text-muted">J老熊</span> <a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a><a class="tag" taget="_blank" href="/search/Web%E5%AE%89%E5%85%A8/1.htm">Web安全</a><a class="tag" taget="_blank" href="/search/web%E5%AE%89%E5%85%A8/1.htm">web安全</a><a class="tag" taget="_blank" href="/search/csrf/1.htm">csrf</a><a class="tag" taget="_blank" href="/search/%E5%AE%89%E5%85%A8/1.htm">安全</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a> <div>在互联网应用中,安全性问题是开发者必须时刻关注的核心内容之一。跨站请求伪造(Cross-SiteRequestForgery,CSRF),是一种常见的Web安全漏洞。通过CSRF攻击,黑客可以冒用受害者的身份,发送恶意请求,执行诸如转账、订单提交等操作,导致严重的安全后果。本文将详细讲解CSRF攻击的原理及其防御方法,结合电商交易系统的场景给出错误和正确的示范代码,并分析常见的安全问题与解决方案,</div> </li> <li><a href="/article/1833465679949426688.htm" title="成为数据分析师的必要条件" target="_blank">成为数据分析师的必要条件</a> <span class="text-muted">HsuHeinrich</span> <a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/1.htm">数据分析</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/1.htm">数据分析</a> <div>开篇成为数据分析师的必要条件作为一名成熟的数据分析师,那必然是要头顶Python,脚踩SQL,左手一个Tableau,右手一个Excel。能取数,会报表,埋点AB两不误,分析落地显价值。那在日常工作中具体需要具备哪些技能呢?笔者根据个人工作学习,对自己做了个技能画像。接下来,笔者将从工具应用、理论基础、数字基建、分析思维四个方面介绍数据分析的必要条件。对其中一些基本技能附上基础教程,帮助初学者迈进</div> </li> <li><a href="/article/1833463411023900672.htm" title="01 Web基础与HTTP协议" target="_blank">01 Web基础与HTTP协议</a> <span class="text-muted">子非鱼   </span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/http/1.htm">http</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%8D%8F%E8%AE%AE/1.htm">网络协议</a> <div>1.1Web基础本章将介绍Web基础知识,包括域名的概念、DNS原理、静态网页和动态网页的相关知识。1.1.1.域名概述1.域名的概念ip地址不易记忆2.早期使用host文件解析域名主机名重复主机维护困难3.DNS分布式层次式4.域名空间结构根域顶级域组织域国家域二级域名FQDN=主机名.DNS后缀1.2网页的概念1.2.1网页纯文本格式文件编写语言为HTNL在用户的浏览器中被‘翻译’成网页形成显</div> </li> <li><a href="/article/1833461897542856704.htm" title="【.NET全栈】ASP.NET开发Web应用——ADO.NET数据访问技术" target="_blank">【.NET全栈】ASP.NET开发Web应用——ADO.NET数据访问技术</a> <span class="text-muted">JosieBook</span> <a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/.NET%E5%85%A8%E6%A0%88/1.htm">.NET全栈</a><a class="tag" taget="_blank" href="/search/.net/1.htm">.net</a><a class="tag" taget="_blank" href="/search/asp.net/1.htm">asp.net</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a> <div>文章目录前言一、ADO.NET基础1、ADO.NET架构2、ADO.NET数据提供者二、连接数据库1、SqlConnection数据库连接类2、使用SqlConnectionStringBuilder连接字符串3、关闭和释放连接4、在web.config配置文件中保存连接字符串5、连接池技术三、与数据库交互1、使用SqlCommand操作数据库2、为SqlCommand传递参数3、使用SqlCom</div> </li> <li><a href="/article/1833461392666095616.htm" title="Python+requests+pytest+openpyxl+allure+loguru框架详解" target="_blank">Python+requests+pytest+openpyxl+allure+loguru框架详解</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/pytest/1.htm">pytest</a> <div>一、框架目录结构1)tools目录用来放公共方法存储,如发送接口以及读取测试数据的方法,响应断言数据库断言前置sql等方法;2)datas目录用例存储接口用例的测试数据,我是用excel来存储的数据,文件数据图片数据等;3)testcases目录用来存放测试用例,一个python文件对应一个接口模块的测试用例,不同接口分别别多个不同的python文件;4)outputs里有reports和logs</div> </li> <li><a href="/article/1833460761989574656.htm" title="python 3D体感游戏" target="_blank">python 3D体感游戏</a> <span class="text-muted">雨轩智能</span> <a class="tag" taget="_blank" href="/search/Unity3D%E6%95%99%E7%A8%8B/1.htm">Unity3D教程</a><a class="tag" taget="_blank" href="/search/%E6%B8%B8%E6%88%8F/1.htm">游戏</a><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> <div>python和Unity制作的3D体感游戏初步,python获取手势关键点控制Uinty场景中游戏物体,实现3D场景游戏,python代码如下fromcvzone.HandTrackingModuleimportHandDetectorimportcv2importsocketcap=cv2.VideoCapture(0)cap.set(3,1280)cap.set(4,720)success,i</div> </li> <li><a href="/article/1833460633916502016.htm" title="Matter.js:Web开发者的2D物理引擎" target="_blank">Matter.js:Web开发者的2D物理引擎</a> <span class="text-muted">我码玄黄</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E6%BA%90/1.htm">开源</a><a class="tag" taget="_blank" href="/search/github/1.htm">github</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><a class="tag" taget="_blank" href="/search/canvas/1.htm">canvas</a><a class="tag" taget="_blank" href="/search/%E7%89%A9%E7%90%86%E5%BC%95%E6%93%8E/1.htm">物理引擎</a> <div>Matter.js:Web开发者的2D物理引擎前言在现代网页开发中,交互性和动态效果是提升用户体验的关键因素。Matter.js,一个专为网页设计的2D物理引擎,为开发者提供了一种简单而强大的方式,来实现复杂的物理交互效果。无论是模拟重力、碰撞还是复杂的物体运动,Matter.js都能轻松应对。本文将带你深入了解Matter.js,并提供实际的代码示例,让你一窥其强大功能。官网:https://b</div> </li> <li><a href="/article/1833456971253116928.htm" title="Spring boot 项目作为客户端调用 服务端websocket" target="_blank">Spring boot 项目作为客户端调用 服务端websocket</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/boot/1.htm">boot</a><a class="tag" taget="_blank" href="/search/websocket/1.htm">websocket</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a> <div>文章目录java客户端请求websocketSpringboot导入包客户端调用方法测试执行方法connectWebSocketHandshakeMessagesendHandshakeWebSocketConfig.queue.take方法对应实体类配置yaml资源WebSocketConfig配置类注入配置websocketUrl:LinkedBlockingQueueLinkedBlocki</div> </li> <li><a href="/article/1833456844820017152.htm" title="推荐一个跨平台的Unity插件——UnityPython" target="_blank">推荐一个跨平台的Unity插件——UnityPython</a> <span class="text-muted">夏磊讳</span> <div>推荐一个跨平台的Unity插件——UnityPythonunity-pythonPythonpluginforUnity3D.项目地址:https://gitcode.com/gh_mirrors/un/unity-python在游戏开发领域,尤其是Unity引擎的爱好者中,能够灵活运用多种编程语言进行创作无疑是提高效率和创新力的一大助力。今天要向大家介绍的UnityPython,正是这样一个能让</div> </li> <li><a href="/article/1833456466892255232.htm" title="UnityPython:在Unity中无缝运行Python代码" target="_blank">UnityPython:在Unity中无缝运行Python代码</a> <span class="text-muted">岑晔含Dora</span> <div>UnityPython:在Unity中无缝运行Python代码unity-pythonPythonpluginforUnity3D.项目地址:https://gitcode.com/gh_mirrors/un/unity-python注意:这个项目已不再维护。但如果你想了解过去如何在Unity中集成Python的方案,那么请继续阅读。项目介绍UnityPython是一个为Unity3D开发的游戏引</div> </li> <li><a href="/article/1833456338043236352.htm" title="Unity-Python 项目使用指南" target="_blank">Unity-Python 项目使用指南</a> <span class="text-muted">秋或依</span> <div>Unity-Python项目使用指南unity-pythonPythonpluginforUnity3D.项目地址:https://gitcode.com/gh_mirrors/un/unity-python项目介绍Unity-Python是一个开源项目,旨在为Unity游戏引擎提供Python脚本支持。该项目通过集成Python解释器,使得开发者可以在Unity中使用Python进行游戏逻辑的编</div> </li> <li><a href="/article/1833456211714994176.htm" title="探索Unity3D的新边界:Unity3D-Python-Editor" target="_blank">探索Unity3D的新边界:Unity3D-Python-Editor</a> <span class="text-muted">孔岱怀</span> <div>探索Unity3D的新边界:Unity3D-Python-Editor1、项目介绍在游戏开发的世界中,Unity3D以其强大的功能和易用性赢得了开发者们的青睐。然而,当我们的开发需求变得越来越复杂时,内置的C#语言可能无法满足所有需求。Unity3D-Python-Editor是一个创新的开源项目,它将Python集成到Unity3D环境中,利用IronPython库提供了一个友好且高效的Pyth</div> </li> <li><a href="/article/1833454700222050304.htm" title="Go Web 编程 PDF" target="_blank">Go Web 编程 PDF</a> <span class="text-muted">book_longker</span> <a class="tag" taget="_blank" href="/search/%E8%B5%84%E6%BA%90/1.htm">资源</a><a class="tag" taget="_blank" href="/search/golang/1.htm">golang</a><a class="tag" taget="_blank" href="/search/pdf/1.htm">pdf</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>GoWeb开发必读:《BuildingWebApplicationswithGo》PDF资源分享找寻良久,终于寻得这本珍贵资源!现在我免费分享给大家你是否正在学习Go语言开发Web应用?是否想要提升Go并发编程能力?这本书绝对不容错过!关于这本书《BuildingWebApplicationswithGo》是一本非常实用的GoWeb开发指南:以构建网络论坛为案例,全面讲解GoWeb开发️深入剖析请</div> </li> <li><a href="/article/1833451666716848128.htm" title="精准打击:Conda中conda remove命令的高效使用指南" target="_blank">精准打击:Conda中conda remove命令的高效使用指南</a> <span class="text-muted">2401_85743969</span> <a class="tag" taget="_blank" href="/search/conda/1.htm">conda</a> <div>精准打击:Conda中condaremove命令的高效使用指南在Python项目开发中,Conda作为Anaconda发行版中的包管理器,不仅用于安装和管理包,还提供了强大的环境管理功能。随着项目的发展,有时需要从环境中移除不再需要的包。condaremove命令是Conda提供的一个关键工具,它允许用户从当前环境中移除特定的包。本文将详细介绍如何在Conda中使用condaremove命令,并通</div> </li> <li><a href="/article/1833451539763654656.htm" title="在Docker容器中部署Flask应用:一步步的实践指南" target="_blank">在Docker容器中部署Flask应用:一步步的实践指南</a> <span class="text-muted">2401_85743969</span> <a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/dnn/1.htm">dnn</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a> <div>引言Docker是一种流行的容器化技术,它允许开发者将应用及其依赖打包到一个轻量级、可移植的容器中。Flask是一个用Python编写的轻量级Web应用框架。Gunicorn是一个PythonWSGIHTTP服务器,用于生产环境。本文将详细介绍如何在Docker容器中运行Flask应用,包括使用Gunicorn作为服务器。Docker容器化的优势环境一致性:确保应用在不同环境中的一致性。开发与生产</div> </li> <li><a href="/article/1833448767156744192.htm" title="【.NET全栈】ASP.NET开发Web应用——LINQ技术" target="_blank">【.NET全栈】ASP.NET开发Web应用——LINQ技术</a> <span class="text-muted">JosieBook</span> <a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/.NET%E5%85%A8%E6%A0%88/1.htm">.NET全栈</a><a class="tag" taget="_blank" href="/search/.net/1.htm">.net</a><a class="tag" taget="_blank" href="/search/asp.net/1.htm">asp.net</a><a class="tag" taget="_blank" href="/search/linq/1.htm">linq</a> <div>文章目录一、LINQ基础1、LINQ简介2、延迟执行3、LINQ表达式简介1、基本查询语法2、投影新对象3、过滤和排序4、分组和聚合5、联合查询二、LINQtoDataSet操作内存表1、LINQtoDataSet简介2、类型化DataSet三、LINQtoSQL操作数据库1、数据实体类2、DataContext类介绍3、在ASP.NET中应用LINQtoSQL4、自动生成数据实体类5、生成存储过</div> </li> <li><a href="/article/1833448262745550848.htm" title="如何快速上手Python,成为一名数据分析师" target="_blank">如何快速上手Python,成为一名数据分析师</a> <span class="text-muted">Want595</span> <a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/%E5%9B%BE%E4%B9%A6%E6%8E%A8%E8%8D%90/1.htm">图书推荐</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/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>目录写在前面推荐图书推荐理由粉丝福利写在最后写在前面520快乐!喜欢Python的小伙伴有福啦,本期博主给大家推荐一本入门Python的热门书籍,快来看看吧~推荐图书《Python数据分析快速上手》(王靖,商艳红,张洪波,卢军)【摘要书评试读】-京东图书编辑推荐Python作为一种强大且易于学习的编程语言,已经成为数据分析的首选工具。《Python数据分析快速上手》是一本为初学者、职场人士以及对数</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>