Flask框架(一)flak视图和URL
1.虚拟环境:
1.1 为什么需要虚拟环境
为了方便实现多套不同开发版本的维护。
到目前位置,我们所有的第三方包安装都是直接通过pip install xx的方式进行安装的,这样安装会将那个包安装到你的系统级的Python环境中。但是这样有一个问题,就是如果你现在用Django 1.10.x写了个网站,然后你的领导跟你说,之前有一个旧项目 是用Django
0.9开发的,让你来维护,但是Django 1.10不再兼容Django 0.9的–些语法了。这时候就会碰到一个问题,我如何在我的电脑中同时拥有Django 1.10和Django 0.9两套环境呢?这时候我们就可以通过虚拟环境来解决这个问题。
1.2 pipenv的安装
- 第一步:
在指定盘符创建一个文件夹 或者 在Pycharm里面创建一个项目。如在d盘创建一个文件夹名称(或者项目名称):“flask框架” - 第二步:
CMD打开windows命令行---- d: ----cd flask框架 —pip install pipenv
其他系统安装
Mac安装
brew install pipenv
Linux安装
pip install pipenv
1.3创建或开启虚拟环境
- 可以直接安装,一般安装在python安装文件里面,不方便管理
- 安装在指定目录里面(推荐):
第一步:
创建环境变量 WORKON_HOME 对应盘符和文件夹,如图:
第二步:
创建虚拟环境 在D盘存放文件夹“envs”
接着1.2里面的操作,在“flask框架” 文件夹路径下 输入 pip shell,见红色框柱部分表示创建成功。
- 在flask框架 文件夹下会生成文件:
[[source]]
name = "pypi"
url = "https://pypi.org/simple" # 指定国内pip源,不然下载库会很慢
verify_ssl = true[dev-packages] # 开发环境[packages] # 生产环境[requires] # Python版本
python_version = "3.6"
- 在盘符下面有创建与项目名称有关系的文件夹:
1.4 配置pycharm 项目的虚拟环境
-file-settings -Project:flask框架-Project Interpreter-Add:
在envs里面找到python.exe,如图:
把版本下载到记事本:
D:\flask框架>pip freeze >C:\Users\lenovo\Desktop\1.txt
1.5 pipfile和pipfile.lock
- pipfile.lock,详细记录环境依赖,并且利用了Hash算法保证了它完整对应关系
如果需要指定Python版本的话,前提是电脑中已经安装了python2和Python3
pipenv --three # 泛指Python3的版本
pipenv --two # 泛指Python2的版本
pipenv --python 3.7 # 指定Python版本
进入/退出/删除虚拟环境
pipenv shell # 进入虚拟环境
exit # 退出虚拟环境
pipenv --rm # 删除整个环境 不会删除pipfile
管理开发环境 - 安装在开发环境下
pipenv install --dev itchat - 在虚拟环境中运行命令,使用run参数
pipenv run python manage.py runserver
pipenv有个缺点,lock不稳定而且时间非常长,所以安装包的时候记得加上–skip-lock,最后开发完成要提价到仓库的时候在pipenv lock
pipenv install django --skip-lock
2 Flask简介
- Flask简介
flask是一款非常流行的Python Web框架,出生于2010年,作者是Armin Ronacher,本来这个项目只是作者在愚人节的一个玩笑,后来由于非常受欢迎,进而成为一个正式的项目。
flask自2010年发布第一个版本以来,大受欢迎,深得开发者的喜爱,并且在多个公司已经得到了应用,flask能如此流行的原因,可以分为以下几点:
• 微框架、简洁、只做他需要做的,给开发者提供了很大的扩展性。
• Flask和相应的插件写得很好,用起来很爽。
• 开发效率非常高,比如使用SQLAlchemy的ORM操作数据库可以节省开发者大量书写sql的时间
Flask的灵活度非常之高,他不会帮你做太多的决策,一些你都可以按照自己的意愿进行更改。
• 使用Flask开发数据库的时候,具体是使用SQLAlchemy还是MongoEngine,选择权完全掌握在你自己的手中。区别于Django,Django内置了非常完善和丰富的功能,并且如果你想替换成你自己想要的,要么不支持,要么非常麻烦。
• 把默认的Jinija2模板引擎替换成其他模板引擎都是非常容易的。 - 第一个flask程序
选择 项目 右键 创建Directory,在创建python file文件
#coding: utf8
# 从flask框架中导 入Flask类
from flask import Flask#Flask类,实例化,__name__是主程序名称 传入_name_初始化一 个Flask实例 按住ctrl点相应关键字可以看源码
app = Flask(__name__) #装饰器映射URL和执行的函数。这个设置将根URL映射到了hello_world函数上
@app.route('/') #里面的参数必须有,必须是字符串
def hello_word():return 'hello word!'if __name__ == '__main__': #主程序,运行的入口
#运行本项目,host=0.0.0.o可以让其他电脑也能访问到该网站,port 指定访问的端口。默认的host是127.0.0.1,port为5000app.run(host='0.0.0.0',port=90)
pycharm开启debug模式和修改
host在Pycharm 2018中,如果想要开启debug模式和更改端口号,则需要编辑项目配置。直接在app.run中更改是无效的。
3 项目配置
设置为DEBUG模式
默认情况下flask不会开启DEBUG模式,开启DEBUG模式后,flask会 在每次保存代码的时候自动的重新载入代码,并且如果代码有错误,会在终端进行提示
开启DEBUG模式有三种方式g国然
- 1.直接在应用对象上设置
1 app.debug = True
2 app.run()
- 2.在执行run方法的时候,传递参数进去
1 app.run(debug=True)
- 3.在config属性中设置
1 app.config.update(DEBUG=True)
如果-切正常,会在终端打印以下信息:
1*Restarting with stat
2*Debugger is active!
3*Debugger pin code:294-745-0444*Running on http://0.0.0.0:9000/(Press CTRL+C to quit)
需要注意的是,只能在开发环境下开启DEBUG模式,因为DEBUG模式会带来非常大的安全隐患。
另外,在开启了DEBUG模式后,当程序有异常而进入错误堆栈模式,你第一次点击某个堆栈想查看变量值的时候,页面会弹出一个对话框,让你输入PIN值,这个PIN值在你启动的时候就会出现,比如在刚刚启动的项目中的PIN值为294-745-044,你输入这个值a同然后,Werkzeug会把这个PIN值作为cookie的一部分保存起来,并在8小时候过期,8小时以内不需要再输入PIN值。这样做的目的是为了更加的安全,让调试模式下的攻击者更难攻击到本站。
配置文件
Flask项目的配置,都是通过app.config对象来进行配置的。比如要配置一个项目处于DEBUG模式下,那么可以使用app.config['DEBUG]= True来进行设置,那么Flask项目将以DEBUG模式运行。在Flask项目中,有四种方式进行项目的配置
- 1.直接硬编码
1 app = Flask(_name_)
2 app.config['DEBUG']= True
- 2.因为app.config是flask.config.Config的实例,而Config类 是继承自dict,因此可以通过update方法
app.config.update(
DEBUG=True,SECRET_KEY='...'
)
- 3.如果你的配置项特别多,你可以把所有的配置项都放在一个模块中,然后通过加载模块的方式进行配置,假设有一个settings.py模块,专门用来存储配置项的,此时你可以通过app.config.from._object0方法进行加载,并且该方法既可以接收模块的的字符串名称,也可以模块对象
#1.通过模块字符串app.config.from object('settings')
#2.通过模块对象import settingsapp.config.from object(settings)
- 4.也可以通过另外-个方法加载,该方法就是app.config.from_pyile0),该访法传入一个文件名,通常是以.py结尾的文件,但也不限于只使用py后缀的文件
app. config. from pyfile(' settings. py', silent=True)
4.URL与视图
4.1 URL宇函数的映射
从之前的hellowor.py文件中,我们已经看到,一个URL要与执行函数就行映射,使用的是@app.route装饰器。@app.route装饰器中,可以指定URL的跪着来进行更加详细的映射,比如现在要映射一个文章详情的URL,文章详情的URL是/article/id,id有可能就是1、2、3…那么可以通过以下方式
@app.route('/article/<id>/')
def article(id):return 's% article detail'%d
其中,尖括号是固定写法,语法为,variable默认的数据类型是字符串。如果需要制定数据类型,则要写成converter.variable,其中converter就是类型名称,可以有以下几种:
- string:默认的数据类型,接受没有任何斜杠/的字符串;
- int:整形
- float:浮点型
- path:和string类似,但是可以传递斜杠/
- uuid:uuid类型的字符串
- any:可以制定多重路径
@app.route('/any(article,blog):url_path')
def item(url_path):return eul_path
如果不想定制子路径来传递参数,也可以通过传统的?=的形式来传递参数,例如:/article?id=xxx,这种情况下,可以通过request.args.get(‘id’)来获取id的值。如果是post方法,则可以通过request.form.get('id)来进行获取。
4.2 构造URL(url_for)
- 一般我们通过一个URL就可以执行到某一个函数。如果反过来,我们知道一个函数,怎么去获得这个URL呢?url_for函数就可以帮我们实现这个功能。
url_for()函数接收两个及以上的参数,他接收函数名作为第一个参数,接收对应URL规则的命名参数,如果还出现其他的参数,则会添加到URL的后面作为查询参数。 - 通过构建URL的方式而选择直接在代码中拼URL的原因有两点:
1.将来如果修改了URL,但没有修改该URL对应的函数名,就不用到处去替换URL了。
2.url.for()函数会转义–些特殊字符和unicode字符串,这些事情url._for会自动的帮我们搞定
1 from flask import Flask,url_for2 app = Flask(_name__)4 @app.route('/article/<id>/')
5 def article(id):return'%s article detail'%id7
8 @app.route('/')
9 def index():
10 print(ur1_for("article",id=1))
11 return“首页"
Flask框架(一)flak视图和URL相关推荐
- Flask框架——路由和视图
目录 创建一个简单flask框架程序 路由视图函数 参数加载方式 创建一个简单flask框架程序 #1.导入Flask类 from flask import Flask#2.创建Flask对象接收一个 ...
- Flask框架——路由:URL规则与视图函数
1. 概述 路由 是MVC架构的Web框架中相当重要的一个概念,也是本节课程的重点.顾名思意,路由就是在迷茫中找出一条路的意思.在Flask框架中,路由 就表示为用户请求的URL找出其对应的处理函数之 ...
- flask html 模板继承,Flask框架模板继承实现方法分析
Flask框架模板继承实现方法分析 本文实例讲述了Flask框架模板继承实现方法.分享给大家供大家参考,具体如下: 在模板中,可能会遇到以下情况: 多个模板具有完全相同的顶部和底部内容 多个模板中具有 ...
- 我爱Flask框架之Flask简介与URL和视图介绍
一:虚拟环境介绍 黄色部分重点注意 虚拟环境与全局环境: 我们通过pip安装了一个python库,可能在编辑器中不能使用(如:pycharm,vscode-)这是因为: 通过pip安装的库默认一般安装 ...
- Flask框架(1.flask概述,Windows配置 virtualenv虚拟环境步骤和路由以及视图函数的定义)
框架: 软件框架,指的是为了实现某个业界标准或者完成特别基本任务的软件组件规范,也指为了实现某个软件组建规范时,提供规范所要求之基础功能的软件产品. 框架的功能类似于基础设施,提 ...
- flask框架视图和路由_角度视图,路由和NgModule的解释
flask框架视图和路由 Angular vs AngularJS (Angular vs AngularJS) AngularJS (versions 1.x) is a JavaScript-ba ...
- Flask学习之旅——1.3 URL与视图(二)
Flask学习之旅--1.3 URL与视图(二) 前言 由于本小节内容较多,故分成几篇文章来记录. 本文为<知了传课--URL与视图>的学习笔记. 原文地址:第三节:URL与视图 - Py ...
- Flask学习之旅——1.3 URL与视图(一)
Flask学习之旅--1.3 URL与视图(一) 前言 由于本小节内容较多,故分成几篇文章来记录. 本文为<知了传课--URL与函数的映射>的学习笔记. 原文地址:第三节:URL与视图 - ...
- Flask学习之旅——1.3 URL与视图(三)
Flask学习之旅--1.3 URL与视图(三) 前言 由于本小节内容较多,故分成几篇文章来记录. 本文为<知了传课--URL与视图>的学习笔记. 原文地址:第三节:URL与视图 - Py ...
最新文章
- Form表单提交前进行JS验证的3种方式
- 《实现模式(修订版)》—第1章1.2节那么,现在……
- JUC多线程:synchronized锁机制原理 与 Lock锁机制
- 使用java.util.concurrent包处理多线程
- 死磕算法!精选35篇算法设计实例+6本必读书打包送你
- 甲骨文员工谈被裁原因;《绝地求生》停机维护;谷歌正研发折叠屏样机 | 极客头条...
- node.js入门及安装
- Java修饰符public,private,protected及默认的区别
- Mac 安装 python brew
- atitit js 开发工具 ide的代码结构显示(func list) outline总结
- paip.提升效率--gui 的选择--swing最佳实践swt awt
- 【Python】用pip安装python库下载超时的解决办法
- 深圳腾讯地图地铁站经纬度
- HyperLynx仿真(一)LineSim简单介绍
- A leaf Variable that requires grad is being used in an in-place operation
- 【均衡器】LS均衡器,DEF均衡器以及LMMSE均衡器的误码率性能对比仿真
- E. Vowels(SOSdp的简单转化)
- 关于 Spfile文件误删除 或者 优化错误 恢复
- 终止Jenkins某Job的排队任务
- kali入门到入狱之Nmap扫描端口
热门文章
- P1567 统计天数 python代码
- 微信支付服务商,![CDATA[sub_mch_id与sub_appid不匹配],微信小程序支付,签名错误,CDATA[签名错误]解决方法,支付签名验证失败
- Word设置多套页码奇偶跨章节页眉【毕业论文格式记录】
- B站【1espresso】NLP - transform、bert、HMM、NER课件
- 图像分割算法实现(matlab/python)
- docker默认ip地址修改
- 菜孔孔学python--字典
- javaweb JSP JAVA 电影院在线订票系统(电影购票系统 电影售票 电影票预订系统)(支持在线选座)
- 【nacos】springboot @Value @NacosValue 使用时可能无效
- Html网页远程控制电脑,如何从Web浏览器远程控制您的计算机 | MOS86