Flask之旅FlaskWeb开发基于Python的Web应用开发实战学习笔记.doc
《Flask之旅FlaskWeb开发基于Python的Web应用开发实战学习笔记.doc》由会员分享,可在线阅读,更多相关《Flask之旅FlaskWeb开发基于Python的Web应用开发实战学习笔记.doc(27页珍藏版)》请在咨信网上搜索。
1、Flask之旅Flask Web开发:基于Python的Web应用开发实战学习笔记1 虚拟环境2016-6-8书上介绍了 virtualenv,每个venv都会拷贝一份packages到项目 /venv目录。plain view plain copy1.virtualenv venv 2.venvScriptsactivate.bat 3.(venv) $ pip freeze requirements.txt 4.(venv) $ pip install -r requirements.txt 5.pip list -outdated 6.pip install -upgarade 比较了一
2、下conda管理环境,可能conda更胜一筹:点击打开链接或者用 virtualenvwrapper: 点击打开链接plain view plain copy1.git tag 列出所有打tag的分支 2.git checkout 切换到tag 3.git reset -hard 不保留修改 .gitignore:指定哪些文件或目录不作同步,比如 ./venv/,*.pyc,数据库文件.sqlite3, .mysql推荐IDE: PyCharm 2016.1导入已有的virtualenv: File - Setting - Project Interprater - 选择项目目录下的/venv
3、/Python特点:- new Flask Project- jump between View funcion and Templates- Git2 基本结构初始化:python view plain copy1.# -*- coding: utf-8 -*- 2.from flask import Flask 3. app = Flask(_name_) Flask类的构造函数只有一个必须指定的参数,即程序主模块或包的名字。在大多数程序中,Python的_name_变量就是所需的值。Flask用这个参数决定程序的根目录,以便稍后能够找到相对于程序根目录的资源文件位置路由 (route)和
4、视图函数 (view function):定义路由的最简便方式,是使用程序实例提供的app.route修饰器,把修饰的函数注册为路由python view plain copy1.app.route(/) 2.def index(): 3. return Hello World! 修饰器是Python语言的标准特性,可以使用不同的方式修改函数的行为。惯常用法是使用修饰器把函数注册为事件的处理程序。动态路由:地址中可以包含可变部分,Flask支持在路由中使用int、float和path类型。path类型也是字符串,但不把斜线视作分隔符python view plain copy1.app.rou
5、te(/user/) 2.def user(name): 3. return Hello, %s! %name 4.app.route(/user/) # 不能有空格! 5.def . 默认端口是5000,可以改成其它的(flask_script.Manager也有此功能)# 有些端口不能用,查询已占用的端口:netstat -ano;netstat -aon|findstr 6000;tasklist|findstr ;taskkill /f /t /im XXX.exepython view plain copy1.app.run(debug=True, port=7777) 1.公认端口
6、(Well Known Ports):从0到1023,紧密绑定(binding)于一些服务。通常这些端口的通讯明确表明了某种服务协议。80端口实际上总是HTTP通讯。2.注册端口(Registered Ports):从1024到49151。它们松散地绑定于一些服务。这些端口同样用于许多其它目的。例如:许多系统处理动态端口从1024左右开始。3.动态和/或私有端口(Dynamic and/or Private Ports):从49152到65535。理论上,不应为服务分配这些端口。实际上,机器通常从1024起分配动态端口。请求-响应循环Context 上下文全局变量:current_app 程序
7、上下文 当前激活程序的程序实例g 程序上下文 处理请求时用作临时存储的对象。每次请求都会重设这个变量request 请求上下文 请求对象,封装了客户端发出的HTTP请求中的内容session 请求上下文 用户会话,用于存储请求之间需要“记住”的值的词典URL映射是URL和视图函数之间的对应关系。Flask使用app.route修饰器或者非修饰器形式的app.add_url_rule()生成映射。python view plain copy1.app.url_map 2.Map( index, 3.Rule /static/ (HEAD, OPTIONS, GET) - static, 4.Ru
8、le /user/ (HEAD, OPTIONS, GET) - user) HEAD、Options、GET是请求方法,由路由进行处理。Flask为每个路由都指定了请求方法,这样不同的请求方法发送到相同的URL上时,会使用不同的视图函数进行处理。HEAD和OPTIONS方法由Flask自动处理请求 Hook: 在请求钩子函数和视图函数之间共享数据一般使用上下文全局变量g1.before_first_request :注册一个函数,在处理第一个请求之前运行。2.before_request :注册一个函数,在每次请求之前运行。3.after_request :注册一个函数,如果没有未处理的异常
9、抛出,在每次请求之后运行。4.teardown_request :注册一个函数,即使有未处理的异常抛出,也在每次请求之后运行响应(视图函数返回)make_response()函数可接受13个参数 (html, 状态码,header)python view plain copy1.response = make_response(This document carries a cookie!, 200) 2.response.set_cookie(answer, 42) 3.return response 重定向的特殊响应类型,302:return redirect()特殊的响应由abort函数
10、生成,用于处理错误:abort(404)Flask扩展原书更正: Importing flask.ext.script is deprecated, use flask_script instead.3 模板 template业务逻辑和表现逻辑 要分开按功能分(模板不需要重用时),或按Division分(大部分模板需要重用时)Jinja2模板引擎模板是一个包含响应文本的文件,其中包含用占位变量.表示的动态部分,其具体值只在请求的上下文中才能知道。使用真实值替换变量,再返回最终得到的响应字符串,这一过程称为渲染。python view plain copy1.app.route(/user/)
11、2.def user(name): 3. return render_template(user.html, name=name) 模板变量Jinja2能识别所有类型的变量,甚至是一些复杂的类型,例如列表、字典和对象html view plain copy1.A value from a dictionary: mydictkey . 2.A value from a list: mylist3 . 3.A value from a list, with a variable index: mylistmyintvar . 4.A value from an objects method: m
12、yobj.somemethod() . 可以使用过滤器修改变量。千万别在不可信的值上使用safe过滤器,例如用户在表单中输入的文本html view plain copy1.Hello, name|capitalize 完整的过滤器列表safe 渲染值时不转义。默认情况下,出于安全考虑,Jinja2会转义所有变量capitalize 把值的首字母转换成大写,其他字母转换成小写lower 把值转换成小写形式upper 把值转换成大写形式title 把值中每个单词的首字母都转换成大写trim 把值的首尾空格去掉striptags 渲染之前把值中所有的HTML标签都删掉控制结构%.%,可用来改变模板
13、的渲染流程 if, for, macro, import, include需要在多处重复使用的模板代码片段可以写入单独的文件,再包含 %include common.html % 在所有模板中另一种重复使用代码的强大方式是模板继承,block标签定义的元素可在衍生模板中修改html view plain copy1. 2. 3. %block head % 4. %block title %endblock % - My Application 5. %endblock % 6. 7. 8. %block body % 9. %endblock % 10. 11. extends指令声明这个模
14、板衍生自base.html。在extends指令之后,基模板中的3个块被重新定义,模板引擎会将其插入适当的位置。注意新定义的head块,在基模板中其内容不是空的,所以使用super()获取原来的内容(向已经有内容的块中添加新内容)。html view plain copy1.%extends base.html % 2.%block title %Index%endblock % 3.%block head % 4. super() 5. 6. 7.%endblock % 8.%block body % 9. Hello, World! 10.%endblock % 使用Flask-Boots
15、trapBootstrap是客户端框架,因此不会直接涉及服务器。服务器需要做的只是提供引用了Bootstrap层 叠样式表(CSS)和JavaScript文 件的HTML响 应,并在HTML、CSS和JavaScript代码中实例化所需组件。这些操作最理想的执行场所就是模板。Flask-Bootstrap基模板中定义的块:doc, head, title, styles, body, navbar, content, scriptsBootstrap官方文档CDN本地加速:修改 Base.html,引用本地的css 文件,里面元素跟Bootstrap 重名的,则会覆盖官方里相同元素html v
16、iew plain copy1.% block head % 2. super() 3. 4. 5. link rel=stylesheet href=/ 6. link rel=stylesheet href=/ 7.% endblock % 8.。 9.% block scripts % 10. super() 11. script src=/ 12. script src=/ 13. moment.include_moment() 14. moment.lang(zh-CN) 15.% endblock % 自定义错误页面python view plain copy1.app.error
17、handler(404) 2.def page_not_found(e): 3. return render_template(404.html), 404 url_for() 链接辅助函数使用url_for()生成动态地址时,将动态部分作为关键字参数传入。例如,url_for(user, name=john, _external=True)的返回结果是http:/localhost:5000/user/john使用Flask-Moment本地化日期和时间。查阅文档html view plain copy1.%block scripts % 2. super() 3. moment.inclu
18、de_moment() 4. 5. moment.lang(zh-CN) 6.%endblock % 4 Web Form表单app.config字典可用来存储框架、扩展和程序本身的配置变量。使用标准的字典句法就能把配置值添加到app.config对象中。这个对象还提供了一些方法,可以从文件或环境中导入配置值。Form基类由Flask-WTF扩展定义,所以从flask.ext.wtf中导入。字段和验证函数 可以直接从WTForms包中导入。python view plain copy1.from flask_wtf import Form 2.from wtforms import Strin
19、gField, SubmitField 3.from wtforms.validators import DataRequired 4.class NameForm(Form): 5. name = StringField(What is your name?, validators=DataRequired() 6. submit = SubmitField(Submit) WTForms支持的HTML标准字段:StringField,TextAreaField,PasswordField。WTForms内建的验证函数:Email,DataRequired.Placeholder提示:pyt
20、hon view plain copy1.password = PasswordField(Password, validators=DataRequired(), render_kw=placeholder: u密码) 重定向和用户会话刷新页面后会再次提交表单。大多数情况下,这并不是理想的处理方式。很多用户都不理解浏览器发出的这个警告。 基于这个原因,最好别让 Web 程序把 POST 请求作为浏览器发送的最后一个请求。这个技巧称为Post/重定向/Get模式。python view plain copy1.app.route(/, methods=GET, POST) 2.def inde
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Flask FlaskWeb 开发 基于 Python Web 应用 实战 学习 笔记
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【Fis****915】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【Fis****915】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。