×

基于Python的Web应用开发实战PDF电子书免费下载

消耗积分:5 | 格式:pdf | 大小:16.88 MB | 2019-10-27

天街草雨

分享资料个

  本书共分三部分,全面介绍如何基于 Python 微框架 Flask 进行 Web 开发。第一部分是 Flask 简介,介绍使用 Flask 框架及扩展开发 Web 程序的必备基础知识 ;第二部分则给出一个实例,真正带领大家一步步开发完整的博客和社交应用 Flasky,从而将前述知识融会贯,付诸实践。第三部分介绍了发布应用之前必须考虑的事项,如单元测试策略、性能分析技术、Flask 程序的部署方式等。本书适合熟悉 Python 编程,有意通过 Flask 全面掌控 Web 开发的程序员学习参考。

  和其他框架相比,Flask 之所以能脱颖而出,原因在于它让开发者做主,使其能对程序具有全面的创意控制。或许你曾听过“和框架斗争”这一说法。在大多数框架中,当你决定使用的解决方案不受框架官方支持时就会发生这种情况。你可能想使用不同的数据库引擎或者不同的用户认证方法。但是,这种偏离框架开发者设定路线的做法往往会给你带来很多麻烦。 Flask 就不一样了。你喜欢关系型数据库?很好。Flask 支持所有的关系型数据库。或许你更喜欢使用 NoSQL 数据库?没问题,Flash 也支持。想使用自己开发的数据库引擎?根本用不到数据库?依然没问题。在 Flask 中,你可以自主选择程序的组件,如果找不到合适的,还可以自己开发。就这么简单。 Flask 之所以能给用户提供这么大的自由度,关键在于其开发伊始就考虑到了扩展性。 Flask 提供了一个强健的核心,其中包含每个 Web 程序都需要的基本功能,而其他功能则交给行业系统中的众多第三方扩展,当然,你也可以自行开发。在本书中,我展示自己使用 Flask 开发 Web 程序的工作流程。我不觉得这是使用 Flask 开发程序的唯一正确方式。你应该把我的选择作为一种推荐方式,而不是真理。大部分软件开发类图书都使用短而精的示例代码,孤立地演示所介绍技术的功能,让读者自己去思考如何使用“胶水”代码把这些不同的功能结合起来,从而开发出完整可用的程序。在本书中,我采用了完全不同的方式。我使用的示例代码都摘自同一个程序,开始时很简单,后续逐章进行扩展。最初这个程序只有几行代码,最后将变成功能完善的博客和社交网络程序。

 

  本书结构

  本书分为三部分。

  第一部分 Flask 简介 简要介绍如何使用 Flask 框架及其一些扩展开发 Web 程序。

  • 第 1 章 说明如何安装和设置 Flask 框架;

  • 第 2 章 通过一个简单的程序介绍如何使用 Flask;

  • 第 3 章 介绍如何在 Flask 程序中使用模板;

  • 第 4 章 介绍 Web 表单;

  • 第 5 章 介绍数据库;

  • 第 6 章 介绍如何实现电子邮件支持;

  • 第 7 章 提供一个可供中大型程序使用的程序结构。

  第二部分 实例:社交博客程序 开发 Flasky,这是我为本书开发的开源博客和社交网络程序。

  • 第 8 章 实现用户认证系统;

  • 第 9 章 实现用户角色和权限;

  • 第 10 章 实现用户资料页;

  • 第 11 章 开发博客界面;前言 | XIII

  • 第 12 章 实现关注功能;

  • 第 13 章 实现博客文章的用户评论功能;

  • 第 14 章 实现应用编程接口(Application Programming Interface,API)。

  第三部分 成功在望 介绍与开发程序没有直接关系,但在程序发布之前要考虑的事项。

  • 第 15 章 详细说明各种单元测试策略;

  • 第 16 章 简要介绍性能分析技术;

  • 第 17 章 说明 Flask 程序的部署方式,包含传统方式和云方式;

  • 第 18 章 列出其他资源。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !

'+ '

'+ '

'+ ''+ '
'+ ''+ ''+ '
'+ ''+ '' ); $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code ==5){ $(pop_this).attr('href',"/login/index.html"); return false } if(data.code == 2){ //跳转到VIP升级页面 window.location.href="//m.obk20.com/vip/index?aid=" + webid return false } //是会员 if (data.code > 0) { $('body').append(htmlSetNormalDownload); var getWidth=$("#poplayer").width(); $("#poplayer").css("margin-left","-"+getWidth/2+"px"); $('#tips').html(data.msg) $('.download_confirm').click(function(){ $('#dialog').remove(); }) } else { var down_url = $('#vipdownload').attr('data-url'); isBindAnalysisForm(pop_this, down_url, 1) } }); }); //是否开通VIP $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code == 2 || data.code ==5){ //跳转到VIP升级页面 $('#vipdownload>span').text("开通VIP 免费下载") return false }else{ // 待续费 if(data.code == 3) { vipExpiredInfo.ifVipExpired = true vipExpiredInfo.vipExpiredDate = data.data.endoftime } $('#vipdownload .icon-vip-tips').remove() $('#vipdownload>span').text("VIP免积分下载") } }); }).on("click",".download_cancel",function(){ $('#dialog').remove(); }) var setWeixinShare={};//定义默认的微信分享信息,页面如果要自定义分享,直接更改此变量即可 if(window.navigator.userAgent.toLowerCase().match(/MicroMessenger/i) == 'micromessenger'){ var d={ title:'基于Python的Web应用开发实战PDF电子书免费下载',//标题 desc:$('[name=description]').attr("content"), //描述 imgUrl:'https://'+location.host+'/static/images/ele-logo.png',// 分享图标,默认是logo link:'',//链接 type:'',// 分享类型,music、video或link,不填默认为link dataUrl:'',//如果type是music或video,则要提供数据链接,默认为空 success:'', // 用户确认分享后执行的回调函数 cancel:''// 用户取消分享后执行的回调函数 } setWeixinShare=$.extend(d,setWeixinShare); $.ajax({ url:"//www.obk20.com/app/wechat/index.php?s=Home/ShareConfig/index", data:"share_url="+encodeURIComponent(location.href)+"&format=jsonp&domain=m", type:'get', dataType:'jsonp', success:function(res){ if(res.status!="successed"){ return false; } $.getScript('https://res.wx.qq.com/open/js/jweixin-1.0.0.js',function(result,status){ if(status!="success"){ return false; } var getWxCfg=res.data; wx.config({ //debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId:getWxCfg.appId, // 必填,公众号的唯一标识 timestamp:getWxCfg.timestamp, // 必填,生成签名的时间戳 nonceStr:getWxCfg.nonceStr, // 必填,生成签名的随机串 signature:getWxCfg.signature,// 必填,签名,见附录1 jsApiList:['onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ','onMenuShareWeibo','onMenuShareQZone'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); wx.ready(function(){ //获取“分享到朋友圈”按钮点击状态及自定义分享内容接口 wx.onMenuShareTimeline({ title: setWeixinShare.title, // 分享标题 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享给朋友”按钮点击状态及自定义分享内容接口 wx.onMenuShareAppMessage({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 type: setWeixinShare.type, // 分享类型,music、video或link,不填默认为link dataUrl: setWeixinShare.dataUrl, // 如果type是music或video,则要提供数据链接,默认为空 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ”按钮点击状态及自定义分享内容接口 wx.onMenuShareQQ({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口 wx.onMenuShareWeibo({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ空间”按钮点击状态及自定义分享内容接口 wx.onMenuShareQZone({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); }); }); } }); } function openX_ad(posterid, htmlid, width, height) { if ($(htmlid).length > 0) { var randomnumber = Math.random(); var now_url = encodeURIComponent(window.location.href); var ga = document.createElement('iframe'); ga.src = 'https://www1.elecfans.com/www/delivery/myafr.php?target=_blank&cb=' + randomnumber + '&zoneid=' + posterid+'&prefer='+now_url; ga.width = width; ga.height = height; ga.frameBorder = 0; ga.scrolling = 'no'; var s = $(htmlid).append(ga); } } openX_ad(828, '#berry-300', 300, 250);