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

评论

  • 最新随笔

  • 尝试让DALLE生成一些连续的精灵图,让gpt帮忙生成一些提示词,如果能稳定输出的话就很强大了。
    让gpt帮忙生成的DALLE提示词
    "Generate a pixel art sprite sheet of a character walking in four directions (north, south, east, west) in a retro video game style."
    "Create a series of pixel art frames showing a character performing different actions like walking, running, jumping, and attacking in a classic 2D game aesthetic."
  • 路过别人山庄的门口,被一条大黑狗边叫边追过来,幸好骑电动车,不然还不一定跑得过,哈哈哈哈哈哈哈哈哈哈。
  • 最近两周也没咋出去玩,主要也是觉得没啥好玩的(笑哭)。看完布莱恩阿瑟的《复杂经济学》后,里面那个酒吧问题勾起我的兴趣,最近空了就花了些时间实现个python版本,顺便搞了篇博文,很享受这种新知识能和已有知识碰撞的感觉。(配张前段时间拍的图片,梧桐山门口前面那条路,挺漂亮的)
  • 盐田港夜景
  • 为啥这猫总喜欢喝杯子里的水
  • 确实开始冷了,在树林里至少要比人类聚集区低个几度,进出入口就能很明显感觉到。看看深圳水库的风景,貌似后面的视野更开阔。
  • 给随笔加了多图的功能,传一传周末拍的风景图,漫无目的的逛也挺好玩的。
  • 逻辑自洽是一套体系的根基,最根本的因素,最吸引人的地方