Flask-环境-配置-简介

为什么需要虚拟环境:
到目前位置,我们所有的第三方包安装都是直接通过pip install xx的方式进行安装的,这样安装会将那个包安装到你的系统级的Python环境中。但是这样有一个问题,就是如果你现在用Django 1.10.x写了个网站,然后你的领导跟你说,之前有一个旧项目是用Django 0.9开发的,让你来维护,但是Django 1.10不再兼容Django 0.9的一些语法了。这时候就会碰到一个问题,我如何在我的电脑中同时拥有Django 1.10和Django 0.9两套环境呢?这时候我们就可以通过虚拟环境来解决这个问题。
pipenv
Windows安装pipenv
pip install pipenv
Mac安装
brew install pipenv
Linux安装
pip install pipenv
pipfile和pipfile.lock
Pipfile文件

在这里插入图片描述
在这里插入图片描述

pipfile.lock,详细记录环境依赖,并且利用了Hash算法保证了它完整对应关系
如果需要指定Python版本的话,前提是电脑中已经安装了python2和Python3

在这里插入图片描述
进入/退出/删除虚拟环境

在这里插入图片描述
管理开发环境
安装在开发环境下
在这里插入图片描述
在虚拟环境中运行命令,使用run参数
在这里插入图片描述

pipenv有个缺点,lock不稳定而且时间非常长,所以安装包的时候记得加上–skip-lock,最后开发完成要提价到仓库的时候在pipenv lock

在这里插入图片描述

Flask简介

flask是⼀款⾮常流⾏的Python Web框架,出⽣于2010年,作者是Armin Ronacher,本来这个项⽬只是作者在愚⼈节的⼀个玩笑,后来由于⾮常受欢迎, 进⽽成为⼀个正式的项⽬。
flask⾃2010年发布第⼀个版本以来,⼤受欢迎,深得开发者的喜爱,并且在多 个公司已经得到了应⽤,flask能如此流⾏的原因,可以分为以下⼏点:
微框架、简洁、只做他需要做的,给开发者提供了很⼤的扩展性。 Flask和相应的插件写得很好,⽤起来很爽。 开发效率⾮常⾼,⽐如使⽤SQLAlchemy的ORM操作数据库可以节省开发者 ⼤量书写sql的时间
Flask的灵活度⾮常之⾼,他不会帮你做太多的决策,⼀些你都可以按照⾃⼰的 意愿进⾏更改。
使⽤Flask开发数据库的时候,具体是使⽤SQLAlchemy还是MongoEngine, 选择权完全掌握在你⾃⼰的⼿中。区别于Django,Django内置了⾮常完善和 丰富的功能,并且如果你想替换成你⾃⼰想要的,要么不⽀持,要么⾮常麻烦。
把默认的Jinija2模板引擎替换成其他模板引擎都是⾮常容易的。

第一个flask程序
在这里插入图片描述

然后点击运⾏,在浏览器中输⼊http://127.0.0.1:9000就能看到hello world 了。需要说明⼀点的是,app.run这种⽅式只适合于开发,如果在⽣产环境中, 应该使⽤Gunicorn或者uWSGI来启动。如果是在终端运⾏的,可以按ctrl+c来 让服务停⽌。
在Pycharm 2018中,如果想要开启debug模式和更改端⼝号,则需要编辑项⽬ 配置。直接在app.run中更改是⽆效的。
第⼀个flask程序
pycharm开启debug模式和修改host
在这里插入图片描述
设置为DEBUG模式

默认情况下flask不会开启DEBUG模式,开启DEBUG模式后,flask会在每次保 存代码的时候⾃动的重新载⼊代码,并且如果代码有错误,会在终端进⾏提示
开启DEBUG模式有三种⽅式

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-044
4 * Running on http://0.0.0.0:9000/ (Press CTRL+C to quit)
需要注意的是,只能在开发环境下开启DEBUG模式,因为DEBUG模式会带来⾮ 常⼤的安全隐患。

另外,在开启了DEBUG模式后,当程序有异常⽽进⼊错误堆栈模式,你第⼀次 点击某个堆栈想查看变量值的时候,⻚⾯会弹出⼀个对话框,让你输⼊PIN值, 这个PIN值在你启动的时候就会出现,⽐如在刚刚启动的项⽬中的PIN值为294745-044,你输⼊这个值后,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_object()⽅法进⾏加载,并且该⽅法既可 以接收模块的的字符串名称,也可以模块对象

  1. 通过模块字符串
    app.config.from_object(‘settings’)
  2. 通过模块对象
    import settings
    app.config.from_object(settings)

4.也可以通过另外⼀个⽅法加载,该⽅法就是app.config.from_pyfile(),该⽅ 法传⼊⼀个⽂件名,通常是以.py结尾的⽂件,但也不限于只使⽤.py后缀的⽂件
app.config.from_pyfile(‘settings.py’,silent=True)

URL与函数的映射

从之前的helloworld.py⽂件中,我们已经看到,⼀个URL要与执⾏函数进⾏映 射,使⽤的是@app.route装饰器。@app.route装饰器中,可以指定URL的规则 来进⾏更加详细的映射,⽐如现在要映射⼀个⽂章详情的URL,⽂章详情的URL 是/article/id/,id有可能为1、2、3…,那么可以通过以下⽅式
在这里插入图片描述
其中,尖括号是固定写法,语法为,variable默认的数据类型是字符串。如果需 要指定类型,则要写成converter:variable,其中converter就是类型名称,可以 有以下⼏种

string: 默认的数据类型,接受没有任何斜杠/的字符串。
int: 整形
float: 浮点型。
path: 和string类似,但是可以传递斜杠/。
uuid: uuid类型的字符串。
any:可以指定多种路径
在这里插入图片描述
如果不想定制⼦路径来传递参数,也可以通过传统的?=的形式来传递参数,例 如:/article?id=xxx,这种情况下,可以通过request.args.get(‘id’)来获取id的 值。如果是post⽅法,则可以通过request.form.get(‘id’)来进⾏获取。

构造URL(url_for)

⼀般我们通过⼀个URL就可以执⾏到某⼀个函数。如果反过来,我们知道⼀个函 数,怎么去获得这个URL呢?url_for函数就可以帮我们实现这个功能。url_for() 函数接收两个及以上的参数,他接收函数名作为第⼀个参数,接收对应URL规则 的命名参数,如果还出现其他的参数,则会添加到URL的后⾯作为查询参数。
通过构建URL的⽅式⽽选择直接在代码中拼URL的原因有两点

  1. 将来如果修改了URL,但没有修改该URL对应的函数名,就不⽤到处去替换 URL了。
  2. url_for()函数会转义⼀些特殊字符和unicode字符串,这些事情url_for会⾃动 的帮我们搞定
    在这里插入图片描述
    指定URL末尾的斜杠
    有些URL的末尾是有斜杠的,有些URL末尾是没有斜杠的。这其实是两个不同的URL

在这里插入图片描述
上述例子中,当访问一个结尾不带斜线的URL:/article,会被重定向到带斜线的URL:/article/上去。但是当我们在定义article的url的时候,如果在末尾没有加上斜杠,但是在访问的时候又加上了斜杠,这时候就会抛出一个404错误页面了:
在这里插入图片描述
以上没有在末尾加斜杠,因此在访问/article/的时候,就会抛出一个404错误。

指定HTTP方法
在@app.route()中可以传入一个关键字参数methods来指定本方法支持的HTTP方法,默认情况下,只能使用GET请求
在这里插入图片描述
以上装饰器将让login的URL既能支持GET又能支持POST

页面跳转和重定向
重定向分为永久性重定向和暂时性重定向,在页面上体现的操作就是浏览器会从一个页面自动跳转到另外一个页面。比如用户访问了一个需要权限的页面,但是该用户当前并没有登录,因此我们应该给他重定向到登录页面。
• 永久性重定向:http的状态码是301,多用于旧网址被废弃了要转到一个新的网址确保用户的访问,最经典的就是京东网站,你输入www.jingdong.com的时候,会被重定向到www.jd.com,因为jingdong.com这个网址已经被废弃了,被改成jd.com,所以这种情况下应该用永久重定向。
• 暂时性重定向:http的状态码是302,表示页面的暂时性跳转。比如访问一个需要权限的网址,如果当前用户没有登录,应该重定向到登录页面,这种情况下,应该用暂时性重定向。

在flask中,重定向是通过flask.redirect(location,code=302)这个函数来实现的,location表示需要重定向到的URL,应该配合之前讲的url_for()函数来使用,code表示采用哪个重定向,默认是302也即暂时性重定向,可以修改成301来实现永久性重定向
在这里插入图片描述

关于响应(Response)
视图函数中可以返回以下类型的值:
• Response对象。
• 字符串。其实Flask是根据返回的字符串类型,重新创建一个werkzeug.wrappers.Response对象,Response将该字符串作为主体,状态码为200,MIME类型为text/html,然后返回该Response对象。
• 元组。元组中格式是(response,status,headers)。response为一个字符串,status值是状态码,headers是一些响应头。
• 如果不是以上三种类型。那么Flask会通过Response.force_type(rv,request.environ)转换为一个请求对象。
直接使用Response创建
在这里插入图片描述
可以使用make_response函数来创建Response对象,这个方法可以设置额外的数据,比如设置cookie,header信息
在这里插入图片描述
通过返回元组的形式
在这里插入图片描述

发布了118 篇原创文章 · 获赞 0 · 访问量 2670

猜你喜欢

转载自blog.csdn.net/weixin_45905671/article/details/105320341
今日推荐