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/1902817320892428288.htm" title="python 数据可视化TVTK库安装与使用" target="_blank">python 数据可视化TVTK库安装与使用</a> <span class="text-muted">范哥来了</span> <a class="tag" taget="_blank" href="/search/%E4%BF%A1%E6%81%AF%E5%8F%AF%E8%A7%86%E5%8C%96/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>TVTK(Traits-basedVisualizationToolKit)是一个基于Python的可视化库,它为VTK(VisualizationToolkit)提供了一个更易于使用的接口。VTK本身是非常强大的可视化工具,但使用起来可能稍微复杂一些,而TVTK通过简化API来提高易用性。下面我将指导您如何安装TVTK以及一个简单的示例来展示其基本用法。安装TVTKTVTK可以通过pip轻松安装</div> </li> <li><a href="/article/1902817194677432320.htm" title="python web开发flask库安装与使用" target="_blank">python web开发flask库安装与使用</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%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/flask/1.htm">flask</a> <div>要在Python中使用Flask进行Web开发,首先需要安装Flask库。Flask是一个轻量级的Web框架,它使开发者能够快速构建网站或web服务。下面是安装Flask和创建一个简单的Flask应用程序的基本步骤。安装Flask确保您的环境中已经安装了Python(推荐版本3.7或更高)。接着,您可以通过pip来安装Flask。打开命令行工具(如终端或命令提示符),然后执行以下命令:pipins</div> </li> <li><a href="/article/1902816564596502528.htm" title="Pytorch使用手册—扩展 TorchScript 使用自定义 C++ 操作符(专题五十三)" target="_blank">Pytorch使用手册—扩展 TorchScript 使用自定义 C++ 操作符(专题五十三)</a> <span class="text-muted">AI专题精讲</span> <a class="tag" taget="_blank" href="/search/Pytorch%E5%85%A5%E9%97%A8%E5%88%B0%E7%B2%BE%E9%80%9A/1.htm">Pytorch入门到精通</a><a class="tag" taget="_blank" href="/search/pytorch/1.htm">pytorch</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a> <div>提示本教程自PyTorch2.4起已弃用。有关PyTorch自定义操作符的最新指南,请参阅PyTorch自定义操作符。PyTorch1.0版本引入了一种名为TorchScript的新编程模型。TorchScript是Python编程语言的一个子集,可以被TorchScript编译器解析、编译和优化。此外,编译后的TorchScript模型可以选择序列化为磁盘文件格式,随后你可以从纯C++(以及Py</div> </li> <li><a href="/article/1902815934175834112.htm" title="Web Component 教程(六):基于 Stencil 脚手架开发 Web Component" target="_blank">Web Component 教程(六):基于 Stencil 脚手架开发 Web Component</a> <span class="text-muted">乐闻x</span> <a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/Component/1.htm">Component</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0%E8%AE%B0%E5%BD%95/1.htm">学习记录</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/web/1.htm">web</a><a class="tag" taget="_blank" href="/search/component/1.htm">component</a><a class="tag" taget="_blank" href="/search/stencli/1.htm">stencli</a> <div>前言在现代前端开发中,WebComponent是一种逐渐受到关注的技术,它允许我们创建可以在任何框架或库(如React,Angular,Vue等)中使用的可重用组件。而Stencil是一个强大的开发工具,它帮助我们轻松构建这些WebComponent,使开发过程更高效、更简洁。那么,究竟如何使用Stencil来开发WebComponent呢?今天,我们就来探索这一主题,从安装和设置,到创建和使用组</div> </li> <li><a href="/article/1902814925676408832.htm" title="React Material Components Web 使用教程" target="_blank">React Material Components Web 使用教程</a> <span class="text-muted">计煦能Leanne</span> <div>ReactMaterialComponentsWeb使用教程react-mdc-webMaterialDesignComponentsforReact项目地址:https://gitcode.com/gh_mirrors/re/react-mdc-web项目介绍ReactMaterialComponentsWeb(简称react-mdc-web)是一个基于Google的MaterialDesign</div> </li> <li><a href="/article/1902814547165638656.htm" title="基于Wasm的边缘计算Pandas:突破端侧AI的最后一公里——让数据分析在手机、IoT设备上飞驰" target="_blank">基于Wasm的边缘计算Pandas:突破端侧AI的最后一公里——让数据分析在手机、IoT设备上飞驰</a> <span class="text-muted">Eqwaak00</span> <a class="tag" taget="_blank" href="/search/Pandas/1.htm">Pandas</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/wasm/1.htm">wasm</a><a class="tag" taget="_blank" href="/search/%E8%BE%B9%E7%BC%98%E8%AE%A1%E7%AE%97/1.htm">边缘计算</a><a class="tag" taget="_blank" href="/search/pandas/1.htm">pandas</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a><a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/1.htm">深度学习</a> <div>引言:边缘计算的算力觉醒在智能家居设备每秒产生数万条传感器数据、手机App需要实时分析用户行为的今天,传统云计算模式面临高延迟、隐私风险、带宽成本三大挑战。本文将揭示如何通过WebAssembly(Wasm)+Pandas的技术组合,在边缘设备上实现零云端依赖的实时数据分析,并通过智慧工厂设备预测性维护案例,展示从理论到工程的全链路实现。一、技术架构设计1.1边缘计算范式演进mermaid:gra</div> </li> <li><a href="/article/1902808876462436352.htm" title="Pybind11教程:从零开始打造 Python 的 C++ 小帮手" target="_blank">Pybind11教程:从零开始打造 Python 的 C++ 小帮手</a> <span class="text-muted">Yc9801</span> <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>参考官网文档:https://pybind11.readthedocs.io/en/stable/index.html一、Pybind11是什么?想象你在Python里写了个计算器,但跑得太慢,想用C++提速,又不想完全抛弃Python。Pybind11就像一座桥,把C++的高性能代码“嫁接”到Python里。你可以用Python调用C++函数,就像请了个跑得飞快的帮手来干活。主要功能:绑定函数:</div> </li> <li><a href="/article/1902808498547257344.htm" title="python自定义函数的参数有多种类型_python自定义函数的参数之四种表现形式" target="_blank">python自定义函数的参数有多种类型_python自定义函数的参数之四种表现形式</a> <span class="text-muted">weixin_39860755</span> <div>(1)defa(x,y):printx,y这是最常见的定义方式,调用该函数,a(1,2)则x取1,y取2,形参与实参相对应,如果a(1)或者a(1,2,3)则会报错(2)defa(x,y=3):printx,y提供了默认值,调用该函数,a(1,2)同样还是x取1,y取2,但是如果a(1),则不会报错了。上面这俩种方式,还可以更换参数位置,比如a(y=4,x=3)用这种形式也是可以的如果是defa(</div> </li> <li><a href="/article/1902806099698970624.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/python/1.htm">python</a> <div>在Python中文件操作是一项基础且重要的功能,它主要包括打开、读写、关闭等操作。1.打开文件使用open()函数来打开文件,其基本语法如下: f=open(file_path,mode,encoding=None)f:是open函数的文件对象,拥有属性和方法。file_path:文件的路径,可以是相对路径或绝对路径。mode:打开文件的模式,常见的模式有:r:以只读模式打开文件,文件指针会放在文</div> </li> <li><a href="/article/1902805809620905984.htm" title="Windows使用Browser Use笔记" target="_blank">Windows使用Browser Use笔记</a> <span class="text-muted"></span> <a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BDai%E5%BC%80%E5%8F%91/1.htm">人工智能ai开发</a> <div>相关文档:https://docs.browser-use.com/quickstart首先安装UV命令行cmdpowershell-ExecutionPolicyByPass-c"irmhttps://astral.sh/uv/install.ps1|iex"设置环境变量setPath=C:\xx\.local\bin;%Path%查看版本uv-V查看可用和已安装的Python版本uvpytho</div> </li> <li><a href="/article/1902805810908557312.htm" title="实现应用跳转功能鸿蒙示例代码" target="_blank">实现应用跳转功能鸿蒙示例代码</a> <span class="text-muted"></span> <div>本文原创发布在华为开发者社区。介绍本示例介绍了应用跳转的多个场景案例。跳转短信、浏览器、设置、相机、拨号、应用市场等系统应用和已知bundlename、abilityname的三方应用。跳转相机拍照后返回照片展示。跳转三方应用,模拟简易支付。跳转web页,拉起相机和三方应用。实现应用跳转功能源码链接效果预览使用说明打开应用,展示一列按钮,点击不同按钮会进行不同应用的跳转。有些跳转需要权限,每次跳转</div> </li> <li><a href="/article/1902803957177184256.htm" title="查看 CUDA cudnn 版本 查看Navicat GPU版本" target="_blank">查看 CUDA cudnn 版本 查看Navicat GPU版本</a> <span class="text-muted">FergusJ</span> <a class="tag" taget="_blank" href="/search/%E5%A4%87%E4%BB%BD/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>查看显卡型号:lspci|grepVGA(lspci是linux查看硬件信息的命令),屏幕会打印出主机的集显几独显信息python中查看显卡型号fromtensorflow.python.clientimportdevice_libdevice_lib.list_local_devices()</div> </li> <li><a href="/article/1902802570108268544.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/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/pycharm/1.htm">pycharm</a> <div>目录1.位置参数(PositionalArguments)2.关键字参数(KeywordArguments)3.默认参数(DefaultArguments)4.可变参数(VariablePositionalArguments)5.关键字可变参数(VariableKeywordArguments)6.特殊用法:传递列表或字典作为参数Python中函数的参数使用形式非常灵活,主要包括以下几种类型:位置</div> </li> <li><a href="/article/1902800176574164992.htm" title="【附JS、Python、C++题解】Leetcode面试150题(7)" target="_blank">【附JS、Python、C++题解】Leetcode面试150题(7)</a> <span class="text-muted">moz与京</span> <a class="tag" taget="_blank" href="/search/leetcode%E6%95%B4%E7%90%86/1.htm">leetcode整理</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a> <div>一、题目167.两数之和II-输入有序数组给你一个下标从1开始的整数数组numbers,该数组已按非递减顺序排列,请你从数组中找出满足相加之和等于目标数target的两个数。如果设这两个数分别是numbers[index1]和numbers[index2],则1targetIndex(vectornums,inttarget){intlength=nums.size();if(length<2){</div> </li> <li><a href="/article/1902796387301519360.htm" title="编程-设计模式 30:拦截过滤器模式(Interceptor Filter Pattern)" target="_blank">编程-设计模式 30:拦截过滤器模式(Interceptor Filter Pattern)</a> <span class="text-muted">漆黑的莫莫</span> <a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">编程设计模式</a><a class="tag" taget="_blank" href="/search/J2EE%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">J2EE设计模式</a><a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a> <div>设计模式30:拦截过滤器模式(InterceptorFilterPattern)定义与目的定义:拦截过滤器模式是一种用于Web应用程序中的模式,它提供了一种机制来拦截请求和响应,并在它们到达目标处理程序之前执行一些预处理任务,在响应返回客户端之前执行一些后处理任务。目的:该模式的主要目的是通过将请求处理逻辑与请求的预处理和后处理任务分离,提高应用程序的模块化程度和可维护性。实现示例假设我们有一个简</div> </li> <li><a href="/article/1902794109911887872.htm" title="量化交易api有哪些类型?如何选择适合自己的量化交易api?" target="_blank">量化交易api有哪些类型?如何选择适合自己的量化交易api?</a> <span class="text-muted">股票程序化交易接口</span> <a class="tag" taget="_blank" href="/search/%E9%87%8F%E5%8C%96%E4%BA%A4%E6%98%93/1.htm">量化交易</a><a class="tag" taget="_blank" href="/search/%E8%82%A1%E7%A5%A8API%E6%8E%A5%E5%8F%A3/1.htm">股票API接口</a><a class="tag" taget="_blank" href="/search/Python%E8%82%A1%E7%A5%A8%E9%87%8F%E5%8C%96%E4%BA%A4%E6%98%93/1.htm">Python股票量化交易</a><a class="tag" taget="_blank" href="/search/%E5%8C%BA%E5%9D%97%E9%93%BE/1.htm">区块链</a><a class="tag" taget="_blank" href="/search/%E9%87%8F%E5%8C%96%E4%BA%A4%E6%98%93/1.htm">量化交易</a><a class="tag" taget="_blank" href="/search/api%E7%B1%BB%E5%9E%8B/1.htm">api类型</a><a class="tag" taget="_blank" href="/search/%E9%80%89%E6%8B%A9/1.htm">选择</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E8%8E%B7%E5%8F%96/1.htm">数据获取</a><a class="tag" taget="_blank" href="/search/%E8%82%A1%E7%A5%A8%E9%87%8F%E5%8C%96%E6%8E%A5%E5%8F%A3/1.htm">股票量化接口</a><a class="tag" taget="_blank" href="/search/%E8%82%A1%E7%A5%A8API%E6%8E%A5%E5%8F%A3/1.htm">股票API接口</a> <div>Python股票接口实现查询账户,提交订单,自动交易(1)Python股票程序交易接口查账,提交订单,自动交易(2)股票量化,Python炒股,CSDN交流社区>>>量化交易API的主要类型量化交易依赖大量数据,数据获取型API就显得尤为重要。这种类型的API能够连接到各种数据源,如股票市场数据、期货数据等。它可以为交易者提供实时价格数据、历史数据等。一些API能从各大证券交易所获取股票的最新成交</div> </li> <li><a href="/article/1902793726179209216.htm" title="浏览器的组成、渲染过程及缓存机制" target="_blank">浏览器的组成、渲染过程及缓存机制</a> <span class="text-muted">全马必破三</span> <a class="tag" taget="_blank" href="/search/%E6%B5%8F%E8%A7%88%E5%99%A8/1.htm">浏览器</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/edge%E6%B5%8F%E8%A7%88%E5%99%A8/1.htm">edge浏览器</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>浏览器的主要功能是将用户选择的web资源呈现出来,它需要从服务器请求资源,并将其显示在浏览器窗口中。用户用URI(UniformResourceIdentifier统一资源标识符)来指定所请求资源的位置浏览器的组成浏览器可以分为两部分,shell和内核。其中shell的种类相对比较多,内核则比较少。也有一些浏览器并不区分外壳和内核。从Mozilla将Gecko独立出来后,才有了外壳和内核的明确划分</div> </li> <li><a href="/article/1902786420473393152.htm" title="python读取excel数据和提取图片" target="_blank">python读取excel数据和提取图片</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/excel/1.htm">excel</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.引言1.1日常工作中Excel的使用在现代办公环境中,Excel(电子表格软件)是数据管理和分析的重要工具之一。无论是财务报表、销售数据、项目管理还是日常报告,Excel都扮演着不可或缺的角色。其强大的数据处理能力、灵活的格式设置以及丰富的图表功能,使得Excel成为各行各业专业人士的首选工具。Excel的主要功能包括:数据录入与管理:用户可以轻松输入、编辑和管理大量数据。数据分析:通过内置的</div> </li> <li><a href="/article/1902784778076221440.htm" title="从 0 开始使用 cursor 开发一个移动端跨平台应用程序" target="_blank">从 0 开始使用 cursor 开发一个移动端跨平台应用程序</a> <span class="text-muted">沐怡旸</span> <a class="tag" taget="_blank" href="/search/react/1.htm">react</a><a class="tag" taget="_blank" href="/search/native/1.htm">native</a> <div>1.安装必要的工具和环境在开始之前,确保你的开发环境已经安装了以下工具:a.安装Node.js和npmReactNative依赖Node.js和npm(NodePackageManager)。你可以从Node.js官网下载并安装最新版本。b.安装PythonReactNative的Android开发需要Python。确保你已经安装了Python2.7或Python3.x。c.安装Java环境Rea</div> </li> <li><a href="/article/1902782132548333568.htm" title="2020年第十一届蓝桥杯python组省赛" target="_blank">2020年第十一届蓝桥杯python组省赛</a> <span class="text-muted">Ruoki~</span> <a class="tag" taget="_blank" href="/search/%E8%93%9D%E6%A1%A5%E6%9D%AFpython%E7%9C%9F%E9%A2%98/1.htm">蓝桥杯python真题</a><a class="tag" taget="_blank" href="/search/%E8%93%9D%E6%A1%A5%E6%9D%AF/1.htm">蓝桥杯</a><a class="tag" taget="_blank" href="/search/%E8%81%8C%E5%9C%BA%E5%92%8C%E5%8F%91%E5%B1%95/1.htm">职场和发展</a> <div>前言:python最简单的一套题了,适合小白入门练手目录填空题门牌制作寻找2020跑步锻炼蛇形填数排序编程大题成绩统计单词分析数字三角形平面切分装饰珠填空题门牌制作题目:小蓝要为一条街的住户制作门牌号。这条街一共有2020位住户,门牌号从1到2020编号。小蓝制作门牌的方法是先制作0到9这几个数字字符,最后根据需要将字符粘贴到门牌上,例如门牌1017需要依次粘贴字符1、0、1、7,即需要1个字符0</div> </li> <li><a href="/article/1902771165055741952.htm" title="详解如何通过Python的BeautifulSoup爬虫+NLP标签提取+Dijkstra规划路径和KMeans聚类分析帮助用户规划旅行路线" target="_blank">详解如何通过Python的BeautifulSoup爬虫+NLP标签提取+Dijkstra规划路径和KMeans聚类分析帮助用户规划旅行路线</a> <span class="text-muted">mosquito_lover1</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/beautifulsoup/1.htm">beautifulsoup</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a><a class="tag" taget="_blank" href="/search/kmeans/1.htm">kmeans</a><a class="tag" taget="_blank" href="/search/%E8%87%AA%E7%84%B6%E8%AF%AD%E8%A8%80%E5%A4%84%E7%90%86/1.htm">自然语言处理</a> <div>系统模块:数据采集模块(爬虫):负责从目标网站抓取地点数据(如名称、经纬度、描述等)数据预处理模块(标签算法):对抓取到的地点数据进行清洗和分类。根据地点特征(如经纬度、描述文本)打上标签(如“适合家庭”、“适合冒险”)。地理数据处理模块(地图API):使用地图API获取地点的详细信息(如地址、距离、路径等)。计算地点之间的距离或路径。路径规划模块:根据用户输入的起点和终点,规划最优路径。支持多种</div> </li> <li><a href="/article/1902762716251090944.htm" title="Python 问题:ModuleNotFoundError: No module named ‘matplotlib‘" target="_blank">Python 问题:ModuleNotFoundError: No module named ‘matplotlib‘</a> <span class="text-muted">我命由我12345</span> <a class="tag" taget="_blank" href="/search/Python/1.htm">Python</a><a class="tag" taget="_blank" href="/search/-/1.htm">-</a><a class="tag" taget="_blank" href="/search/%E9%97%AE%E9%A2%98%E6%B8%85%E5%8D%95/1.htm">问题清单</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/matplotlib/1.htm">matplotlib</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/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/c%23/1.htm">c#</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a> <div>问题与处理策略1、问题描述importmatplotlib.pyplotaspltfig,ax=plt.subplots()ax.plot([1,2,3,4],[1,4,2,3])plt.show()执行上述代码,报如下错误ModuleNotFoundError:Nomodulenamed'matplotlib'#翻译ModuleNotFoundation错误:没有名为matplotlib的模块2</div> </li> <li><a href="/article/1902762462684442624.htm" title="抖音用户视频批量下载工具开发全解析" target="_blank">抖音用户视频批量下载工具开发全解析</a> <span class="text-muted">木觞清</span> <a class="tag" taget="_blank" href="/search/%E9%9F%B3%E8%A7%86%E9%A2%91/1.htm">音视频</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a> <div>一、逆向工程原理剖析1.1抖音Web端防护体系抖音采用五层防御机制保护数据接口:graphLRA[浏览器指纹检测]-->B[请求参数签名]B-->C[Cookie动态验证]C-->D[请求频率限制]D-->E[IP信誉评级]1.2核心参数解密参数名称作用原理生成方式有效期x-bogus请求签名防篡改前端JS生成(需反混淆)5分钟msToken设备会话标识首次访问自动生成30分钟__ac_signa</div> </li> <li><a href="/article/1902760567291047936.htm" title="Python函数专题:引用传参" target="_blank">Python函数专题:引用传参</a> <span class="text-muted">圣逸</span> <a class="tag" taget="_blank" href="/search/%E4%BB%8E%E5%85%A5%E9%97%A8%E5%88%B0%E7%B2%BE%E9%80%9APython%E8%AF%AD%E8%A8%80/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><a class="tag" taget="_blank" href="/search/Python%E5%85%A5%E9%97%A8/1.htm">Python入门</a><a class="tag" taget="_blank" href="/search/%E7%B2%BE%E9%80%9Apython/1.htm">精通python</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a> <div>在Python编程中,函数是一个非常重要的概念。函数不仅能提高代码的可重用性,还能够使代码结构更加清晰。在函数的设计和使用中,参数的传递方式是一个关键的因素。Python中的参数传递有两种主要形式:值传递和引用传递。虽然Python的参数传递机制有时被称为"引用传递",但实际上它更接近于"对象引用传递"。本文将深入探讨Python中的引用传参及其相关概念。一、基本概念在讨论引用传参之前,首先要理解</div> </li> <li><a href="/article/1902759434283708416.htm" title="python函数支持哪些参数类型_Python函数的几种参数类型" target="_blank">python函数支持哪些参数类型_Python函数的几种参数类型</a> <span class="text-muted">weixin_39965283</span> <div>以下代码均以Python3为基础理解。初识Python函数大部分常见的语言如C、Java、PHP、C#、JavaScript等属于C系语言,Python不属于他们中的一员(ruby亦然)。在这些语言中,Python也属于比较新奇的一派,就函数来说,它没有大括号,用def关键字定义一个函数,定义后用:然后换行tab指定函数函数的范围,当然也不存在什么分号。作为一个函数,那个它肯定是有参数的,Pyth</div> </li> <li><a href="/article/1902758426983854080.htm" title="python自定义函数的参数有多种类型_Python实现自定义函数的5种常见形式分析" target="_blank">python自定义函数的参数有多种类型_Python实现自定义函数的5种常见形式分析</a> <span class="text-muted">weixin_39632728</span> <div>Python自定义函数是以def开头,空一格之后是这个自定义函数的名称,名称后面是一对括号,括号里放置形参列表,结束括号后面一定要有冒号“:”,函数的执行体程序代码也要有适当的缩排。Python自定义函数的通用语法是:def函数名称(形参列表):执行体程序代码Python自定义函数的5种常见形式:1、标准自定义函数:形参列表是标准的tuple数据类型>>>defabvedu_add(x,y):pr</div> </li> <li><a href="/article/1902756283749036032.htm" title="深入了解Python的shutil模块" target="_blank">深入了解Python的shutil模块</a> <span class="text-muted">上官美丽</span> <a class="tag" taget="_blank" href="/search/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/1.htm">技术分享</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a> <div>在Python编程中,处理文件和目录是一个常见的需求。而shutil模块就像一个得力助手,专门用于文件和目录的操作!这篇文章将带你深入探索shutil模块的各种功能,让你在管理文件时游刃有余。什么是shutil模块?shutil是Python的一个标准库,主要用于高效地处理文件和目录。这个模块提供了很多有用的功能,比如复制、移动、删除文件,甚至可以压缩和解压文件!无论你是要整理文档、备份数据,还是</div> </li> <li><a href="/article/1902755272053551104.htm" title="Django ORM自定义排序的实用示例" target="_blank">Django ORM自定义排序的实用示例</a> <span class="text-muted">上官美丽</span> <a class="tag" taget="_blank" href="/search/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/1.htm">技术分享</a><a class="tag" taget="_blank" href="/search/django/1.htm">django</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/sqlite/1.htm">sqlite</a> <div>在使用Django进行开发时,ORM(对象关系映射)是一个非常强大的工具。它让我们可以用Python代码直接操作数据库,而不需要写SQL语句。当我们需要对数据进行排序时,DjangoORM同样提供了丰富的功能。今天,我们就来聊聊如何在Django中实现自定义排序,帮助你更好地管理和展示数据!理解DjangoORM的排序功能DjangoORM提供了order_by()方法,允许我们对查询集进行排序。</div> </li> <li><a href="/article/1902753506352230400.htm" title="Python for循环详解" target="_blank">Python for循环详解</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/ide/1.htm">ide</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/pycharm/1.htm">pycharm</a> <div>目录一、基本语法二、用法示例1、遍历字符串2、遍历列表3、遍历元组4、遍历字典5、使用range()函数6、使用enumerate()函数7、嵌套循环8、break和continue语句9、else子句三、优点四、缺点在Python中,for循环是一种用于迭代可迭代对象(如列表、元组、字典、集合、字符串或任何实现了迭代协议的对象)的语句,它允许按顺序访问可迭代对象中的每个元素,并对每个元素执行一组</div> </li> <li><a href="/article/1902752875470188544.htm" title="Python:区块链 Blockchain 入门的技术指南" target="_blank">Python:区块链 Blockchain 入门的技术指南</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/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%8C%BA%E5%9D%97%E9%93%BE/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>1、简述区块链(Blockchain)是一种去中心化、不可篡改的分布式账本技术,最初因比特币而广为人知。如今,区块链已发展成为一种可以应用于金融、供应链管理、智能合约等多个领域的技术。本文将简要介绍区块链的基本概念和原理,并通过Python实现一个简化的区块链原型,帮助您快速上手区块链的实践。2、基本原理区块链是一种链式结构,由多个“区块”串联而成。每个区块中包含若干交易信息,并通过加密哈希指向前</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>