专栏名称: python
隔天更新python文章,我希望用我的努力换来劳动的成果帮助更多的人掌握一门技术,因此我要更加努力。
目录
相关文章推荐
Python初级入门到精通  ·  Python-finally语句与应用 ·  11 小时前  
Python爱好者社区  ·  北大“韦神”粉丝超千万,家属回应牙齿缺失 ·  2 天前  
Python爱好者社区  ·  全球首个满级QQ正式诞生!满级后长这样 ·  昨天  
Python开发者  ·  刚刚,OpenAI正式发布o3-pro!奥特 ... ·  2 天前  
51好读  ›  专栏  ›  python

框架-flaskの开发

python  · 公众号  · Python  · 2017-04-06 21:34

正文

请到「今天看啥」查看全文


需要注意的是,只能在开发环境下开启DEBUG模式,因为DEBUG模式会带来非常大的安全隐患。

另外,在开启了DEBUG模式后,当程序有异常而进入错误堆栈模式,你第一次点击某个堆栈想查看变量值的时候,页面会弹出一个对话框,让你输入PIN值,这个PIN值在你启动的时候就会出现,比如在刚刚启动的项目中的PIN值为294-745-044,你输入这个值后,Werkzeug会把这个PIN值作为cookie的一部分保存起来,并在8小时候过期,8小时以内不需要再输入PIN值。这样做的目的是为了更加的安全,让调试模式下的攻击者更难攻击到本站。
Python学习交流 330637182 群内每天更新相关资料

项目配置:

Flask项目的配置,都是通过app.config对象来进行配置的。比如要配置一个项目处于DEBUG模式下,那么可以使用app.config['DEBUG] = True来进行设置,那么Flask项目将以DEBUG模式运行。在Flask项目中,有四种方式进行项目的配置:

直接硬编码:

app = Flask(__name__)

app.config['DEBUG'] = True

因为app.config是flask.config.Config的实例,而Config类是继承自dict,因此可以通过update方法:

app.config.update(

DEBUG=True,

SECRET_KEY='...'

)

如果你的配置项特别多,你可以把所有的配置项都放在一个模块中,然后通过加载模块的方式进行配置,假设有一个settings.py模块,专门用来存储配置项的,此时你可以通过app.config.from_object()方法进行加载,并且该方法既可以接收模块的的字符串名称,也可以模块对象:

# 1. 通过模块字符串

app.config.from_object('settings')

# 2. 通过模块对象

import settings

app.config.from_object(settings)

也可以通过另外一个方法加载,该方法就是app.config.from_pyfile(),该方法传入一个文件名,通常是以.py结尾的文件,但也不限于只使用.py后缀的文件:

app.config.from_pyfile('settings.py',silent=True)

# silent=True表示如果配置文件不存在的时候不抛出异常,默认是为False,会抛出异常。

Flask项目内置了许多的配置项,所有的内置配置项,可以在这里查看。
Python学习交流 330637182 群内每天更新相关资料

URL与函数的映射:

从之前的helloworld.py文件中,我们已经看到,一个URL要与执行函数进行映射,使用的是@app.route装饰器。@app.route装饰器中,可以指定URL的规则来进行更加详细的映射,比如现在要映射一个文章详情的URL,文章详情的URL是/article/id/,id有可能为1、2、3...,那么可以通过以下方式: python @app.route('/article/ /') def article(id): return '%s article detail' % id 其中 ,尖括号是固定写法,语法为 ,variable_name默认的数据类型是字符串。如果需要指定类型,则要写成 ,其中converter就是类型名称,可以有以下几种:

string: 默认的数据类型,接受没有任何斜杠“/”的文本。

int: 接受整形。

float: 接受浮点类型。

path: 和string的类似,但是接受斜杠。

uuid: 只接受uuid字符串。

any:可以指定多种路径,这个通过一个例子来进行说明:

@app.route('/ /')

def item(url_path):

return url_path

以上例子中,item这个函数可以接受两个URL,一个是/article/,另一个是/blog/。并且,一定要传url_path参数,当然这个url_path的名称可以随便。

如果不想定制子路径来传递参数,也可以通过传统的?=的形式来传递参数,例如:/article?id=xxx,这种情况下,可以通过request.args.get('id')来获取id的值。如果是post方法,则可以通过request.form.get('id')来进行获取。

构造URL(url_for):

一般我们通过一个URL就可以执行到某一个函数。如果反过来,我们知道一个函数,怎么去获得这个URL呢?url_for函数就可以帮我们实现这个功能。url_for()函数接收两个及以上的参数,他接收函数名作为第一个参数,接收对应URL规则的命名参数,如果还出现其他的参数,则会添加到URL的后面作为查询参数。







请到「今天看啥」查看全文


推荐文章
Python初级入门到精通  ·  Python-finally语句与应用
11 小时前
Python爱好者社区  ·  北大“韦神”粉丝超千万,家属回应牙齿缺失
2 天前
Python爱好者社区  ·  全球首个满级QQ正式诞生!满级后长这样
昨天
管理智慧AI+  ·  自律让你自由
8 年前
地球知识局  ·  现代社会和岛国食人族,谁更野蛮些?
8 年前
销售与市场  ·  【开讲】裁员潮来了,该怎么办?
8 年前