well,well,well......看到这个博客开到现在发出来的文章两只手都数得过来,悲凉的感觉就不禁蔓延来开,不想让这个博客过于荒凉又想满足自己的创作欲,写点什么的想法就自然而然地漫延出来,思来想去到底写什么题材呢?有了!——教程!分享点什么东西又能有一点儿价值(颇有点好为人师的意味hh),最重要的是有很多内容可以写;还有一种说法,教别人知识的同时也在无形中巩固了自己的知识,这种双赢的做法怎么能错过呢?所以《Python Web开发基于flask的博客系统教程》就自然而然地出来了!基于最新Python3 Flask1版本!不定期填坑!
Flask是一个基于python实现的轻量web框架,这是Flask1.1.1中文文档的地址,为什么说Flask是轻量级的,这是因为你只写一个py文件也能完成web服务,而且Flask没有固定的大型项目结构,所以只要文件之间引入正常,Flask都是可以正常运行的。还有一点就是Flask只提供一般的功能,需要添加功能就可以引入第三方的库,按需添加。还有一点,这个图标是不是很像辣椒,其实这是个烧瓶!好啦光说还是无法理解,那么接下来我们就在实战中一点一点进步吧!
首先,一个伟大的项目需要一个伟大的名字,我们先为我们的项目取一个名字吧!那么叫什么好呢? em.......
叫Frog
如何,本来是想把Flask和Blog拼起来叫Flog的,不过这词意思不太好...就没用。那么正式命名我们的项目叫做Frog
啦!呱~呱~呱~
OK,名字完成了,现在我们创建一个名为Frog
的文件夹并进入该文件夹($表示命令行环境,下文都是如此)
$ mkdir Frog
$ cd Frog
接下来我们需要在此目录中创建一个python3的虚拟环境,因为第三方的库经常会更新,有可能某个功能在上一个版本或下一个版本中用不了,所以我们需要为我们的项目生成一个虚拟环境,不让虚拟环境内的第三方库的版本受到影响。
windows版本的python3自带了生成虚拟环境的venv的库,而ubuntu没有,如果你用的是ubuntu,需要安装一下。
$ sudo apt-get install python3-venv
安装完成之后,我们就需要生成一个环境,请确保自己现在正处于Frog
文件夹中。
$ python3 -m venv venv
上面的第二个venv
为虚拟环境的名称,不一定要叫venv
,可以写别的名称,不过一般都是用venv
。
运行之后我们会发现Frog
目录下又多了一个目录venv
Frog/
|
|-venv/
接下来我们要进入到虚拟环境,windows环境下的同学执行以下命令
$ venv\Scripts\activate
linux的同学执行以下命令
$ source venv/bin/activate
执行完命令之后,会发现命令变成下面这样子就说明成功进入虚拟环境。
(venv)$
以后再开始开发工作前都一定要记得进入虚化环境!
在虚拟环境中安装Flask
,如果下载很慢的话可以切换成国内源,直接在pip安装命令后面添加-i
和源的地址。
(venv)$ pip3 install flask -i https://pypi.tuna.tsinghua.edu.cn/simple/
安装flask
的过程中会自动安装它的依赖包 click
, MarkupSafe
, Jinja2
, Werkzeug
, itsdangerous
。
好啦,准备工作基本完成,接下来我们就开始入门Flask吧!
在Frog目录下创建一个文件frog.py
。
Frog/
|
|-venv/
|
|-frog.py
在frog.py
中写如下代码初始化一个web应用
frog.py
from flask import Flask
app=Flask(__name__)
引入__name__
的原因是为了让app确定所在位置、后续引入模板和资源时就可以找到对应的位置
在frog.py
文件中插入以下代码
frog.py
@app.route('/')
def index():
return '<h1>hello world!</h1>'
Flask非常有创意地利用了装饰器实现了路由系统,上面代码中的app.route('/')
表示监听根URL,index()
为视图函数,而return '<h1>hello world!</h1>'
表示响应给客户端的内容,现在我们来测试一下吧!
回到命令行虚拟环境,输入以下命令
(venv)$ set FLASK_APP=frog.py
(venv)$ flask run
如果你使用的是linux,请将set
改为export
即可正常运行,下文皆默认为set
,请用linux的同学自行转换。
然后会出现以下内容
* Serving Flask app "frog.py"
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
说明正常运行了,这是Flask自带的一个web开发服务器,一般不会用到生产环境中,但是我们在开发,所以就无所谓了。我们之前设置的环境变量FLASK_APP
是告诉开发服务器应用实例在哪里。而flask run
是启动开发服务器,它会根据我们之前设置的环境变量FLASK_APP
找到应用实例,默认监听地址为127.0.0.1:5000
如果你需要修改监听地址,请参照以下命令,-h
后面跟需要监听的ip地址,-p
后面跟需要监听的端口。
(venv)$ flask run -h 0.0.0.0 -p 80
好啦,我们打开浏览器输入127.0.0.1:5000
,出现了我们之前设置的内容!
我们经常能看到有些URL是有一些规律性的比如www.felixlee.cn/post/1
、www.felixlee.cn/post/2
前面都相同,就是后面的数字不同,是可变的,我们就称之为动态路由,那么我们现在用Flask来实现动态路由吧!在frog.py
插入以下内容并保存。
frog.py
@app.route('/hello/<name>')
def hello(name):
return '<h1>hello '+name+'!</h1>'
我们来测试一下吧!先Ctrl+C
将正在运行的app停止,然后重新输入flask run
运行。什么?你觉得这样很麻烦?我也觉得,应该是有更简单的方法!没错,其实我们可以在flask run
之前设置一下下面的环境变量
(venv)$ set FLASK_DEBUG=1
设置FLASK_DEBUG
表示开启调试模式,这样设置之后,一旦我们的文件有变化的时候,开发服务器会自动重启,不需要我们再自行重启,还有一点就是一旦出现服务错误,可以将错误信息显示在浏览器,样式更加地优美,方便检查错误。
好啦,设置完环境变量并重新开启服务后,在浏览器输入下面的URL,成功!
通过观察上面的代码,我们可以发现在两个尖括号间的内容就是URL里面可变的部分,然后我们将可变的部分作为参数传入视图函数,这样我们就能通过动态的URL变化出许多可能。Flask支持的动态片段一共有4种类型,分别是string
、int
、float
、path
,默认类型为string
。path类型是一种特殊的类型,不过你可以将它看做是一种string类型,但它支持带正斜线。它们在路由中的写法分别为
frog.py
@app.route('/book/<string:name>')
def book(name):
return '<h1>I like book 《%s》!</h1>'% name
@app.route('/<int:num1>/plus/<int:num2>')
def plus(num1,num2):
return '<h1>%s+%s=%s</h1>'%(num1,num2,num1+num2)
@app.route('/height/<float:num>/m')
def height(num):
cm=num*100
return 'My height is %s cm!' % cm
@app.route('/location/<path:location>')
def whereami(location):
return 'Your location is %s .' % location
尖括号内冒号左边的为动态片段的类型,冒号右边的为对应视图函数的参数名,动态路由支持多个动态片段
我们来测试看看吧!
好啦,以上就是关于Flask的简单入门,在下一章节中,我们开始讲一下Flask的请求与响应。如果你发现了错误或有任何疑问,欢迎在下面留言评论。点击这里进入下一章节!
当前Frog项目仓库地址:http://codemole.cn/felix/Frog/src/frog1