well,well,well......看到这个博客开到现在发出来的文章两只手都数得过来,悲凉的感觉就不禁蔓延来开,不想让这个博客过于荒凉又想满足自己的创作欲,写点什么的想法就自然而然地漫延出来,思来想去到底写什么题材呢?有了!——教程!分享点什么东西又能有一点儿价值(颇有点好为人师的意味hh),最重要的是有很多内容可以写;还有一种说法,教别人知识的同时也在无形中巩固了自己的知识,这种双赢的做法怎么能错过呢?所以《Python Web开发基于flask的博客系统教程》就自然而然地出来了!基于最新Python3 Flask1版本!不定期填坑!
  
  
  

一、简单了解

Flask是一个基于python实现的轻量web框架,这是Flask1.1.1中文文档的地址,为什么说Flask是轻量级的,这是因为你只写一个py文件也能完成web服务,而且Flask没有固定的大型项目结构,所以只要文件之间引入正常,Flask都是可以正常运行的。还有一点就是Flask只提供一般的功能,需要添加功能就可以引入第三方的库,按需添加。还有一点,这个图标是不是很像辣椒,其实这是个烧瓶!好啦光说还是无法理解,那么接下来我们就在实战中一点一点进步吧!
  
  
  

二、准备工作

  

1、一个名字

首先,一个伟大的项目需要一个伟大的名字,我们先为我们的项目取一个名字吧!那么叫什么好呢? em.......

Frog如何,本来是想把Flask和Blog拼起来叫Flog的,不过这词意思不太好...就没用。那么正式命名我们的项目叫做Frog啦!呱~呱~呱~

OK,名字完成了,现在我们创建一个名为Frog的文件夹并进入该文件夹($表示命令行环境,下文都是如此)

$ mkdir Frog
$ cd Frog

  

2、虚拟环境

接下来我们需要在此目录中创建一个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)$

以后再开始开发工作前都一定要记得进入虚化环境!

  

3、安装Flask

在虚拟环境中安装Flask,如果下载很慢的话可以切换成国内源,直接在pip安装命令后面添加-i和源的地址。

(venv)$ pip3 install flask -i https://pypi.tuna.tsinghua.edu.cn/simple/

安装flask的过程中会自动安装它的依赖包 click, MarkupSafe, Jinja2, Werkzeug, itsdangerous

好啦,准备工作基本完成,接下来我们就开始入门Flask吧!

  
  
  

三、Flask基础

在Frog目录下创建一个文件frog.py

Frog/
 |
 |-venv/
 |
 |-frog.py

  

1、初始化应用

frog.py中写如下代码初始化一个web应用

frog.py

from flask import Flask
app=Flask(__name__)

引入__name__的原因是为了让app确定所在位置、后续引入模板和资源时就可以找到对应的位置

  

2、路由与flask开发服务器

(1)路由与视图函数

frog.py文件中插入以下代码

frog.py

@app.route('/')
def index():
    return '<h1>hello world!</h1>'

Flask非常有创意地利用了装饰器实现了路由系统,上面代码中的app.route('/')表示监听根URL,index()为视图函数,而return '<h1>hello world!</h1>'表示响应给客户端的内容,现在我们来测试一下吧!

  

(2)flask自带的web开发服务器

回到命令行虚拟环境,输入以下命令

(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,出现了我们之前设置的内容!

  

(3)动态路由与调试模式

我们经常能看到有些URL是有一些规律性的比如www.felixlee.cn/post/1www.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种类型,分别是stringintfloatpath,默认类型为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

评论

  • 最新随笔

  • 对我来说,写东西很好的一点是,自己写的东西,后面基本都会再看,一遍或者很多遍。这样就可以很好地发现自己之前的漏洞,并看看现在有什么变化。
  • 前段时间应该是百度更新了页面结构,那个黑帽泛目录网站我也没有去更新代码,就导致了文章页没有相关推荐,没想到这时候谷歌开始收录了,而且效果还不错。其实之前在谷歌一直不收录的时候就有怀疑过没有尽头的相关推荐很可能是导致不收录的原因,不过也一直没有去管它,而这次误打误撞的收录也恰恰证实了这个想法。(btw,其实这个网站从出现固定链接开始叫泛目录应该不太准确)
  • 最近吉他谱网站iloveguitar上线了,这几天在填充一些内容花了一些时间,这个网站也是使用flask作为后端框架的,前端UI框架使用的是bootstrap4,喜欢吉他的小伙伴欢迎来这里逛一逛哟,有什么建议欢迎在留言板提一下哟。
  • 那个泛目录网站发布了几个星期了,百度没怎么来爬,收了一个首页,谷歌直接就不收了,倒是一个查外链的网站天天来爬(笑哭),还有建议一点就是泛目录还是用在有建站历史的域名比较好(因为已经过了审核期),新域名就尽量不要用了。
  • 刚刚又发了一篇,最近文章百度都不太收录,orz,哈哈
  • 之前那个用python做的静态资源服务器,我又发现了一大用处,现在我都用来在局域网里的不同电脑之间传输文件,真的好用哈哈
  • 今天交换到了博客有史以来第一条友情链接
  • 刚刚更新了一下博客,修复了一些bug,添加了一个项目页