lol一键秒选英雄(纯Python开发LOL英雄信息查询平台)

1 简介

今天的文章内容非常精彩实用,最后一部分会教大家纯Python编写出下面这样炫酷的应用(动图录制出来太大,所以压缩完之后看起来有点卡,但实际运行非常流畅推荐大家亲自运行体验):

lol一键秒选英雄(纯Python开发LOL英雄信息查询平台)(1)

这是我的系列教程「Python Dash快速web应用开发」的第十期,在上一期的教程中,我们针对Dash中常用的几种表单输入控件进行了介绍,结合以前学习过的其他部件,已经可以满足基本的网页表单提交需求。

而今天的教程我们将继续来学习Dash中有关表单控件的一些高级知识,get到这些知识之后,我们就有能力开发出更加完善和先进的网页表单功能。

lol一键秒选英雄(纯Python开发LOL英雄信息查询平台)(2)

2 Dash表单控件进阶

我们在上一期教程中已经对常见的几种具有不同功能的表单控件进行了比较详细的介绍,而在正式的开发网页表单时,不仅仅是将表单控件排列摆放出来那么简单随意,我们往往需要为控件添置一些补充内容,从而更好地引导用户使用它们,或是扩充出更多功能,这在Dash中我们可以借助dash_bootstrap_components的力量:

2.1 利用Form()、FormGroup()更好地组织表单

dash_bootstrap_components中的Form()与FormGroup()被设计用于更快捷地排布我们的表单控件,使用逻辑是先用FormGroup()组织好每一个表单控件,再将若干个FormGroup()形成的列表作为Form()的children即可,从下面这个简单的例子出发:

app1.py

importdash importdash_html_componentsashtml importdash_bootstrap_componentsasdbc app=dash.Dash(__name__) app.layout=html.Div( dbc.Container( dbc.Form( [ dbc.FormGroup( [ dbc.Label("用户名",html_for="username"), dbc.Input(id="username",placeholder="请输入用户名",autoComplete='off') ] ), dbc.FormGroup( [ dbc.Label("账号密码",html_for="password"), dbc.Input( type="password", id="password", placeholder="请输入密码", ), dbc.FormText( "密码必须同时包含大写字母、小写字母和数字!",color="secondary" ), ] ), dbc.FormGroup( [ dbc.Button('注册') ] ) ] ), style={ 'margin-top':'200px', 'max-width':'400px' } ) ) if__name__=='__main__': app.run_server(debug=True)

lol一键秒选英雄(纯Python开发LOL英雄信息查询平台)(3)

可以看到,在上面例子中的网页表单,共包含了两个输入框和一个按钮共三个控件,通过将控件组织在FormGroup() Form()的结构中,使得这些控件在布局上自成一体非常方便。

相信你也注意到我们有些FormGroup()中除了控件自身,还添置了一些额外的辅助性质的部件,常用的有:

  • 「dbc.Label()」

利用dbc.Label()部件,我们可以在对应控件之前添加说明文字,利用html_for参数可为其绑定具有某个id的控件,利用color参数可以快捷修改其颜色;

  • 「dbc.FormText()」

利用dbc.FormText()可以在表单控件之后为其添加格式美观的说明文字;

  • 「dbc.FormFeedback()」

dbc.FormFeedback()的作用比较有意思,它可以帮助我们简化对表单控件输入内容的验证过程,其参数valid同之前介绍过的Input()部件的valid参数,只不过这里我们在同一个FormGroup()中为指定表单控件添置valid参数相反的两种预设的FormFeedback()内容部件,接着只需要写个回调关联控件自身即可:

app2.py

importdash importdash_html_componentsashtml importdash_bootstrap_componentsasdbc fromdash.dependenciesimportInput,Output app=dash.Dash(__name__) app.layout=html.Div( dbc.Container( dbc.Form( [ dbc.FormGroup( [ dbc.Label("账号密码",html_for="password"), dbc.Input( id="password", placeholder="请输入密码", autoComplete='off' ), dbc.FormText( "密码至少同时包含大写字母、小写字母和数字!",color="secondary" ), dbc.FormFeedback( "密码格式满足要求!",valid=True ), dbc.FormFeedback( "密码格式不满足要求!", valid=False, ), ] ) ] ), style={ 'margin-top':'200px', 'max-width':'400px' } ) ) @app.callback( [Output('password','valid'), Output('password','invalid')], Input('password','value') ) defcheck_password_format(value): importre ifvalue: #检查是否满足密码格式要求 ifall([ re.search('[a-z]',value), re.search('[A-Z]',value), re.search('[0-9]',value), value.__len__()!=0 ]): returnTrue,False else: returnFalse,True returndash.no_update if__name__=='__main__': app.run_server(debug=True)

lol一键秒选英雄(纯Python开发LOL英雄信息查询平台)(4)

2.2 利用InputGroup()为表单控件添加说明

除了前面介绍的利用dbc.FormText()等部件为对应的表单控件生成外部说明文字之外,dash_bootstrap_components还提供了基于InputGroup()的一系列部件,使得我们可以方便地创建出与控件本身浑然一体的说明内容:

app3.py

importdash importdash_bootstrap_componentsasdbc importdash_html_componentsashtml app=dash.Dash(__name__) app.layout=html.Div( dbc.Container( [ dbc.InputGroup( [ dbc.InputGroupAddon("https://www.cnblogs.com/",addon_type="prepend"), dbc.Input(placeholder="输入博客园用户名") ] ), html.Br(), dbc.InputGroup( [ dbc.Input(placeholder="输入qq邮箱"), dbc.InputGroupAddon("@qq.com",addon_type="append") ] ) ], style={ 'margin-top':'200px', 'max-width':'400px' } ) ) if__name__=='__main__': app.run_server(debug=True)

效果如下,通过InputGroupAddon()可以很方便地为输入控件添加前缀或后缀说明:

lol一键秒选英雄(纯Python开发LOL英雄信息查询平台)(5)

3 动手写一个英雄联盟英雄资料查看器!

有了今天的知识内容基础,加上之前教程内容的铺垫,我们可以开始用Dash书写一些形式更加丰富多样的web应用,比如一个「在线英雄联盟英雄资料查看器」,后台通过爬取LOL官网的实时数据,实现全英雄资料查询,先来一睹效果如何吧~

lol一键秒选英雄(纯Python开发LOL英雄信息查询平台)(6)

可以看到效果非常不错,并且纯Python编写,下面我大致介绍一下整体思路:

1.「抓包」LOL官网,爬取全英雄名称与id信息,并继续抓包找到传递每个英雄单独详细信息的异步请求;

2.利用今天所学的Form()和FormGroup()轻松搭建出界面上方的三个控件;

3.编写回调,基于用户选择内容,以及「查询」按钮的点击情况,来异步渲染出下方Tabs() Tab()区域内容,其中大量使用到列表推导非常的方便;

4.最后「皮肤一览」区域的轮播图片结合了bootstrap的知识,对https://www.runoob.com/try/try.php?filename=trybs4_carousel#demo的例子进行了Dash化改写,也是个非常有用的技巧!

最后,限于篇幅,此处并没有直接放出全部代码,Github仓库:https://github.com/CNFeffery/DataScienceStudyNotes。

lol一键秒选英雄(纯Python开发LOL英雄信息查询平台)(7)

作者:Python大数据分析

原文链接:https://mp.weixin.qq.com/s/kR0gEGh_7HFm0LjA82yZYg

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页