Python开发-flask框架学习


站长推荐:程序员必备10TBJava大数据机器学习人工智能从入门到精通视频教程下载


最近闲来无事,帮别人一起看看python3与flask,据说他想搞个登录注册的小demo,然后就给看了下,顺便简单的跟他说明了下。本文只是记录我在给别人讲解怎么使用python3与flask还有mongdb的过程,由于时间紧张所以没有对其进行深入的原理等说明,其实也说明不了什么,毕竟我技术说实在的不是很好

python3.6

首先这边选择的是python3.6,虽然python3在网上好像名声不咋地,而且一度有文章说python3正在毁灭Python,但是反正是别人选的,也就将就了。这里就不讲解python3的语法了,大家可以参考菜鸟教程

flask

这次的web框架选择的是flask,别问我为啥,因为不是我选的。使用了flask微框架之后,觉得flask使用起来还是挺方便的,科普下,flask是由python实现的一个web微框架,而且有对应的python3及python2版本。

mongodb

这里数据库选择的是mongodb,我选择的python扩展是pymongo。对于mongodb还是停留在几年前我做毕业设计的时候,当时正刮起了一股nosql的风,然后老师帮我选择了mongodb这一款介于两者之间的分布式文档数据库,当初年少无知对这一块也没多了解就是学会了使用,现在倒好,还能使用上了。

开始

其实本来写了一段对于python一级flask的描述,但是想想还是删掉了,为什么呢,因为这里我发现我对这两者的理解不是非常的深,所以不想发表太多的评论或者看法,我觉得至少要等我在使用python与flask写点什么有更深入的理解之后才能有一点点资格进行评论或者表达我自己的看法。
我们直接开始说如何使用flask吧。先看一段很简单的代码,也是很经典的Hello World:

from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return 'Hello World'
if __name__ == '__main__':
app.run()

上述代码就是使用了flask框架制作的一个最小的应用。使用python运行之后访问localhost:5000就能看到页面上显示Hello World这句话。这里我想有一点后台基础的同学们可能就大概明白我写的是什么意思了。
首先我引入了Flask类,然后给这个类创建了一个实例,会python的同学知道我这里传入的__name__参数是什么,这里代表这个模块的名字,因为这个模块是直接被运行的所以此时__name__的值是__main__,随后我用route()这个修饰器定义了一个路由,告诉flask如何访问我的函数,最后使用我们使用run()函数使这个应用在服务器上运行起来,而if判断是为了使run函数只有在模块被直接执行时在执行。
如果你按照我说的直接写了个python文件可能运行的时候会直接报错,提示没有flask的个模块,因为没有安装flask,通过

sudo pip3 install flask

就可以在python3中安装flask这个模块了,而python2的用户可以直接将pip后头的3去掉就好了。

路由

ok,通过上述的描述,可能你对使用flask有一个初步的了解了,我们该了解下flask的组成部分了。首先要说说flask的路由部分了,flask通过route()装饰器将一个函数绑定到对应的URL上了。最简单的路由就像下面这几个:

@app.route('/')
def index():
return 'Hello World!'
@app.route('/home')
def index():
return 'This is home page!'

当然跟其他web框架一样,flask支持在路由上制定参数及参数类型,通过<variable_name>可以标记变量,这个部分将会作为命名参数传递到你的函数,也可以通过<converter:variable_name>指定一个可选的装饰器,参考如下:

@app.route('/user/<username>')
def show_user_profile(username):
return 'User %s' % username

@app.route('/post/<int:post_id>')
def show_post(post_id):
return 'Post %d' % post_id

装饰器有以下几种:
1. int 只接受整数
2. float 同 int ,但是接受浮点数
3. path 和默认的相似,但也接受斜线

唯一 URL / 重定向行为

Flask的URL规则是基于Werkzeug的路由模块。个模块背后的思想是基于 Apache 以及更早的 HTTP 服务器主张的先例,保证优雅且唯一的 URL。有兴趣的同学可以百度下。我们看两个例子:

@app.route('/projects/')
def projects():
return 'The project page'

@app.route('/about')
def about():
return 'The about page'

这里有两个路由,第一个看上去像是文件夹目录地址一般,而第二个更像访问文件,但是在Flask中,访问第一个路由不带/时,Flask会自动重定向到正确地址,而访问第二个路由时末尾带上/后Flask会直接报404 NOT FOUND错误。
这个行为使得在遗忘尾斜线时,允许关联的 URL 接任工作,与 Apache 和其它的服务器的行为并无二异。此外,也保证了 URL 的唯一,有助于避免搜索引擎索引同一个页面两次。

构造URL

在Web开发中我们不仅仅只是通过浏览器直接请求地址,在函数里面很多时候也需要跳转到相应的URL,那么这时候我们就需要构造我们的URL了,很多人会说可以直接写URL地址,但是这样做有一个很不好的点就是如果我这里URL变动了,换了个名字我是否还需要改多处使用了这个URL的地方呢,Flask中可以通过url_for函数来构造相应的URL。虽然这种方式如果URL关联的函数名称换了我们还是要改动多处url_for里面的函数名,但是我们很多时候变动URL的可能性比变动函数名称的可能性要大很多。具体代码如下:

from flask import Flask, url_for
app = Flask(__name__)
@app.route('/')
def index(): pass
@app.route('/login')
def login(): pass
@app.route('/user/<username>')
def profile(username): pass
@app.route('/test')
def test():
print url_for('index')
print url_for('login')
print url_for('login', next='/')
print url_for('profile', username='John Doe')
#/
#/login
#/login?next=/
#/user/John%20Doe

通过url_for函数还有两个好处就是能对特殊字符和Unicode数据进行转义以及对应应用不位于URL根路径(例如,在 /demo 下,而不是 /),url_for函数会帮你处理好这个情况。
未完待续。。。。

本站声明
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。


 
© 2014-2018 ITdaan.com 粤ICP备14056181号