Flask框架的: 简介、虚拟环境、配置文件、URL 和视图
第一节//flask虚拟环境
题外话:创建Pycharm 虚拟环境
有没有考虑过一个问题,当我们pip install 加载模块时,这些模块究竟被下载到哪里了。这关系到使用和报错。
首先,打开pycharm – file – setting – project – project interpreter
点击右侧上方的add
我们可以看到一共有两个关键地点:1. 虚拟环境virtualenv Environment 2. System Interpreter
其实所有的都是加载到 System Interpreter,可以进入查看。
因此,很多人经常会遇到一些报错,那是因为他们没有勾选以下这处, Inherit global site-packages
当勾选后,这些模块会同时加载到上述谈及的两个环境中,那么就可以同时使用,不再报错。
否则只能在虚拟环境中,再次单独下载进去。
1. 在cmd中创建flask虚拟环境
为了防止盗用,我将flask目录建成 flash ,太厉害了。
-
pip install pipenv
-
pipenv shell
当说Sucessfully created virtual environment! 安装成功
也随之出现举例如(flash框架-xF0v0y9)
注意: 先要在pycharm中配置创建项目文件夹,然后 cmd中进入目录,如果我们的目录flash框架是在C盘下,那么必须要在目录前加c:/ 否则找不到目录,如下:
第一步 pip install pipenv , 且升级
第二步 pipenv shell 来生成虚拟环境,并会开启进入到虚拟环境的命令。
exit 是退出虚拟环境命令
在我们的文件夹“flash框架”中,会自动生成一个文件 “pipfile”,
在pycharm中,显示出该文件内容,我们来领略以下:
下面我把他们的含义注释进去:
url # 是 国内pip 源,不然下载库会很慢
2.进入pycharm 项目进行配置
注意一点:
新建一个 固定的变量名 “WORKON_HOME” ,以后不要更改,今后便于管理虚拟环境的包(安装包等)
创建好就可以了。
来到pycharm 中勾选现存环境
ok了
那么我们可以去CMD中,加载 flask了。
pip install flask 并且用 pip list 看一下
回到pycharm 中, 你可以看到的cmd中的包也已经存在了。
## 题外话, 一般公司都会有一个导出的 requirements.txt****
然后通过 freeze>c:/xxx/requirements.txt 来 一致性统一掉所有安装的包。***
第二节 flask简介和flask程序
1. flask 是什么
flask 是一款非常流行的python web 框架,出生于2010年,它的流行和备受喜爱原因如下:
- 微框架、简洁、制作他需要做的,给开发者提供了很大的扩展性。
- flask和相应的插件写得很好,用起来很爽。
- 开发效率非常高,比如使用SQLALchemy的ORM操作数据库可以节省开发者大量书写sql的时间。
- flask的灵活度非常高,他不会帮你做太多决策,一些你都可以按照自己的意愿进行更改。
- 使用flask开发数据库的时候,具体是使用SQLALchemy还是MongoEngine,选择权完全掌握在开发者手里。区别于Django, Django内置了非常完善和丰富的功能,并且如果你想替换成自己想要的,要么不支持,要么非常麻烦。
- 把默认的Jinijia2模板引擎替换成其他模板引擎都是非常容易的。
2. 第一个flask程序
首先导入flask
实例化 flask 类,今后就可以直接使用它了。
注意,回顾下, name=“main” 主程序,也叫main函数。
来来来,运行以下,简单的装饰器和函数之后,看看结果,给了我们链接和端口。
其中@app.route(‘/’)是指根路由, 它的名称是视图函数
这两三句关系是, 路由映射到函数中。即路由是调用函数,然后返回了结果值
不要犹豫了昂, 点击链接看看显示啥呗:
那么这个路由是哪里来的呢? 毫无疑问是本机啊,local host。
我们来查看一下
右键 通过pycharm 打开hosts 文件,看看:
端口默认是5000, 如果你皮,偏要改,那么如下做更改:
3.debug模式
在程序出错时可以进行调试。
以往的debug概念是什么,怎么用?
看下图:在第8行处单击 形成breakpoint 断点进行调试,配合右键debug程序指令。一步步看程序。
那么下面我们来真正了解flask中debug的背景和用法:
## debug作用 1
如果我在程序中写了 a=1/0,这个式子数学上没有意义,但看似不影响程序运行
你看没有报错
但当你点击路由链接进入后发现,这本来呈现给你的客户看的页面,不显示结果,而显示了服务器出现问题(因为不能让你客户体验到你的程序出现问题,所以一般都会发布成服务器问题,哈哈哈!)
那么,如果我们有成千上万的脚本语句,我们怎么去检查呢?
我们在原先app.run()中添加debug=True, 然后run 一下看到下图
Debug mode :on
(之前是off)
Debugger is active!
Debugger PIN:
debug的写法方式一 : app.run(debug=True)
这时候,我们再进入链接去看看显示了什么?
如下,界面已经完全不同,已经把除0的错误给指示出来了。
但是要注意,这个不能给客户看到如此界面,所以我们debug功能只能是开发时用,一旦上线,就必须关闭。
当你把鼠标放到具体行时,右边会出现一个打开python shell接口按钮
进入这个接口, 记住, console 时我们以前学习的交互窗口区
这样,就进入了console 调试区(console ready),如下。
那么既然我们直接定位到了问题,要么改掉,要么注释掉就可以了。
## debug作用 2
在更改过程序后,直接ctrl+s 可以自动保存程序并重启运行。
debug方法命令二 : app.debug=True
说明flask中封装了app的debug方式,不信,自己进入指令帮助详情中看看。
debug方法命令三: 通过字典运用方式,把debug打开
app.config.update()
注意,如同在字典和集合中用到过update,把b添加到a。
第一种字典写法注意,如果debug小写, 运行后, debug mode :off
所以,必须是大写DEBUG
大概方式4+1
app.config.update({‘DEBUG’:True}) 也是可以的,这也是字典思想,同样要注意DEBUG 大写
第三节 flask项目的配置文件
flask项目的配置,都是通过app.config对象来进行配置的。比如要配置一个项目处于DEBUG模式下,那么可以使用app.config[‘DEBUG’]=True来进行设置,那么flask项目将以DEBUG模式运行。在flask项目种,有四种方式进行项目的配置
其中,写死的方式,和字典update方式,都不建议用,很不灵活。
推荐的配置方式:
如果你的配置项特别多,可以把所有的配置项都放在一个模块种,然后通过加载模块的方式进行配置,假设有一个settings.py模块,专门用来存储配置项的,此时你可以通过app.config.from_object()方法进行加载,并且该方法既可以接收模块的字符串名称,也可以模块对象
比如,我们创建专门的config.py 里面编写了传递报错
于是,我们来利用它执行原来程序,该怎么写,就用app.config.from_object()呗。(注意,将xxxerror 这两行举例删除,不然认不出报错。)
‘config’字符串和直接config,都是可以的。debug mode:on
@@@ 但是我在尝试直接(config)这个时报错
app.config.from_object(config)
NameError: name ‘config’ is not defined
我后来尝试在开头import config 就成功了。如下:
以后我们再深入探索去做详细配置文件。
也可以以完整py文件方式配置:app.config.from_pyfile(‘config.py’, silent=True)
但是你下面发现一个什么问题?第二行 为什么config 是带有红线的,这可不是报错,而是识别级。
因为它默认导入加载config包 是从根目录去找, 比如我的是C:\flask框架。
当我们去做这个操作时,mark directory as 的source Root 时候
文件夹变蓝色,且,不再有识别级红线。
上述命令还有个第二个值,怎么用?
当silent=Ture ,如果前面的py文件名写错了,它是不会在运行结果中报错的,而是打开路由链接客户网页端又是报服务器错误,而 改成false的话,就报错提醒
第四节 URL 和 视图
先review一下一些基础的知识点:
函数和rul的映射关系
数据约束类型
其中,尖括号 是固定的写法,语法为,variable 默认的数据类型是字符串,variable 可以在满足类型的情况下,可以不同的值。
如果需要指定类型,则要写成converter:variable,其中converter就是类型名称,可以有以下几种:
string: 默认的数据类型,接受没有任何斜杠/的字符串。
int: 整形
float: 浮点型。
path: 和string类似,但是可以传递斜杠/。
uuid: uuid类型的字符串。
any:可以指定多种路径
/ 分隔符,如果URL 在
? 分隔符
如果不想定制子路径来传递参数,也可以通过传统的?=的形式传递参数,例如:/artical?id=xxx,这种情况下,可以通过request.args.get(‘id’)来获取id的值。如果是post方法,则可以通过request.form.get(‘id’)来进行获取。
注意1
只要符合int类型,vid取值什么都可以。
list后面怎么写都是可以的。
注意2
@ app.route(’/<any(dict, tuple):url_path>/’)
def item(url_path):
return url_path
这个方式下,在执行网页中,只限定了 dict 和tuple 两个子路径,其他写什么都访问不到,这就是这个指令用法和作用。
注意3
假设再定义一个route, 用到了request,一定会报错,因为你要么在代码中构造这个方法,要么就是顶部导入。
很显然,直接导入吧。
@app.route(’/ie’)
def baidu():
return request.args.get(‘name’)
运行后,在浏览器窗口中,输入http://127.0.0.1:5000/ie?name=bill
刷新就会显示bill
所以呢,注意路由ie 开始写,用?name= 跟值。 这个有点像百度网址后面的应用,请看https://www.baidu.com/?tn=62095104_26_oem_dg
好了,今天就写到这里,大约一个月没有更新了,真的时间不够用啊!
ps 我建了flash 子目录是故意的 !
本文地址:https://blog.csdn.net/Bill_82/article/details/109008107
上一篇: scrapy 爬虫