1. 安装Python

如果您的计算机上没有安装Python,请现在开始安装。如果您的操作系统没有为您提供Python包,则可以从https://www.python.org/下载安装程序。安装过程参见http://inotemate.com/post/46或者我群里发布的《Python教程第一章相关部分》。

  1. 验证Python版本

为了验证Python能否正常运行,您可以打开一个终端窗口并输入python3,或者如果这不起作用,只需输入python以下是您应该看到的内容:

$ python

Python 3.10.5 (main, Jun  6 2022, 18:49:26) [GCC 12.1.0] on linux

Type "help", "copyright", "credits" or "license" for more information.

>>> 

看到这些信息就说明Python已经正确配置和安装了,注意,可能你们安装的版本和上面的提示不一样,请不要慌乱,正常能运行python就行了,记住,如果显示的是2.7.x,说明你安装有问题,请升级Python或者在命令行输入python3验证是不是3.0+版本安装,您可以在其中输入Python语句,处理正常的Python代码了。在以后的章节中,我们会逐步演示交互式环境的使用。但是现在,主要的目的是验证Python是否安装。要退出交互式提示,您可以键入exit()并按Enter键。在LinuxMac OS X版本的Python上,您也可以通过按Ctrl-D退出解释器。在Windows上,退出快捷方式是Ctrl-Z,然后是Enter

  1. 创建工程虚拟环境和安装Flask

为了解决不同应用程序维护不同版本的软件包可能冲突的问题,Python使用了虚拟环境的概念。虚拟环境会拷贝Python解释器的完整副本。在虚拟环境中安装软件包时,系统范围的Python解释器不受影响,影响的只是该虚拟环境和该环境下的应用。因此,为每个应用配置合适版本的软件包,可以通过使用不同的虚拟环境来实现先。虚拟环境另外的好处就是:虚拟环境的创建者完全拥有拥有该环境也就是谁创建的谁就是该环境的管理员,无需系统的超级用户权限

创建虚拟环境之前,我们要先决定给那个工程创建虚拟环境,在Python的开发环境中创建工程的本质上就是创建个目录存放工程文件,在命令行输入如下指令创建目录:

1)MacOSLinux创建步骤

$ mkdir mblog  #创建目录mblog 

$ ls #查看是否创建成功,windows下请输入dir

.....

drwxr-xr-x 10 oliver oliver      4096  2月15日 20:10 lib

drwxr-xr-x  2 oliver oliver      4096  6月27日 10:51 mblog

drwxr-xr-x  2 oliver oliver      4096  5月21日 10:27 Music

drwxr-xr-x  2 oliver oliver      4096  6月12日 21:40 Pictures

drwxr-xr-x  2 oliver oliver      4096  5月21日 10:27 Public

.....

$ cd mblog  #进入mblog目录

$ python3 -m venv env #为mblog工程创建虚拟环境env

$ ls -al

总计 12

drwxr-xr-x  3 oliver oliver 4096  6月27日 10:59 .

drwx------ 37 oliver oliver 4096  6月27日 10:51 ..

drwxr-xr-x  5 oliver oliver 4096  6月27日 10:59 env

$ source env/bin/activate #激活当前工程的虚拟环境,windows下运行env\bin\activate.bat或者env\bin\activate.ps1,激活成功将会在命令行看到如下提示

(env) [oliver@oliver-archlinux mblog]$

2)win10创建步骤

(1)、打开CMD窗口

C:\Users\Administrator>cd
C:\>
C:\>mkdir mblog
C:\>cd mblog
C:\mblog>python -m venv env

先创建一个文件夹mblog,在文件夹中创建一个env虚拟环境。执行后会生成一个名为env目录

    C:\mblog>dir

     驱动器 C 中的卷没有标签。

     卷的序列号是 0000-3156

    C:\mblog 的目录  

    2022/06/26  20:24    <DIR>          .

    2022/06/26  20:24    <DIR>          ..

    2022/06/26  20:24    <DIR>          env

                   0 个文件              0 字节

目录下面的结构

     C:\mblog\env 的目录

    2022/06/26  20:24    <DIR>          .

    2022/06/26  20:24    <DIR>          ..

    2022/06/26  20:24    <DIR>          Include

    2022/06/26  20:24    <DIR>          Lib

    2022/06/26  20:24                82 pyvenv.cfg

    2022/06/26  20:24    <DIR>          Scripts

                   1 个文件             82 字节

(2)、启用虚拟环境:

 

C:\mblog\env>Scripts\activate.bat

(env) C:\mblog\env>

执行那个Scripts目录下面的activate.bat文件,启用后,提示符前面会出现虚拟环境的名字(env)

3)、用pip给虚拟环境安装模块:

pip list查看已安装模块,目前看到只有两个Python自带的模块

$ pip list

Package    Version

---------- -------

pip        22.0.4

setuptools 58.1.0

WARNING: You are using pip version 22.0.4; however, version 22.1.2 is available.You should consider upgrading via the '/home/oliver/mblog/env/bin/python3 -m pip install --upgrade pip' command.

提示pip有新版本,按提示用'python3 -m pip install --upgrade pip'命令更新就好了。在虚拟环境里,千万别用'pip install --upgrade pip'更新pip,这会破坏pip

现在,给虚拟环境安装flask试试:win+r,调出cmd,运行命令:pip install flask,自动安装PyPi提供的最新版本。

如果要指定版本,可使用pip install flask==2.1.2这种形式。安装过程如下:

(env) [oliver@oliver-archlinux mblog]$ pip install flask

Looking in indexes: https://pypi.douban.com/simple

Collecting flask

......

Installing collected packages: Werkzeug, MarkupSafe, itsdangerous, click, Jinja2, flask

Successfully installed Jinja2-3.1.2 MarkupSafe-2.1.1 Werkzeug-2.1.2 click-8.1.3 flask-2.1.2 itsdangerous-2.1.2

安装完成后会提示成功安装。

   查看版本:进入python shell,运行如下代码

    import flask

    flask.__version()

(env) [oliver@oliver-archlinux mblog]$ python

Python 3.10.5 (main, Jun  6 2022, 18:49:26) [GCC 12.1.0] on linux

Type "help", "copyright", "credits" or "license" for more information.

>>> import flask

>>> flask.__version__

'2.1.2'

 

    说明:使用pip install flask命令进行安装时,会自动删除旧版本,再安装新版本

4)、退出虚拟环境:

(1)win10

(env) C:\mblog\env>Scripts\deactivate.bat

C:\mblog\env>

执行那个Scripts目录下面的deactivate.bat文件,退出后,提示符前面虚拟环境的名字(env)会消失。

(2)macOSLinux

(env) [oliver@oliver-archlinux mblog]$ deactivate

[oliver@oliver-archlinux mblog]$

执行deactivate,提示符前面虚拟环境的名字(env)会消失

  1. 第一个Flask程序

看到标题,很多人的第一反应就是去官网看教程,这通常是一个很好的习惯,任何开发工具的作者通常是最了解该工具的使用的。打开Flask的官网https://flask.palletsprojects.com/en/2.1.x/,映入眼帘的是满屏的英文,点开Quickstart. 你会看到一个非常简单的程序,五行代码基本上就演示了Flask的基本用法在点开Tutorial你会看到一个完整的Flaskr微型博客的实例,我这里不会重复那个简单的例子,会介绍一个功能更为齐全的微搏系统的开发过程只要你能认真跟下下来,最后能实现一个基本上还算实用的系统,结课之后,你可以做一定的扩充,比如视频、@功能、转发功能的扩充就可以实现一个简约版的新浪微搏

实际开发中,一个大型的项目往往需要使用成百上千的Python模块,如果将这些模块都堆放在一起,势必不好管理。而且,使用模块可以有效避免变量名或函数名重名引发的冲突,但是如果模块名重复怎么办呢?因此,Python提出了包(Package)的概念。什么是包呢?简单理解,Python中,包含__init__.py文件的子目录被视为包,并可以导入。导入包时,__ init__.py执行并定义包暴露给外部的定义。

为了更好的进行代码管理,我们借助Python包的机制,把这个应用主要逻辑放到一个名为app包中,后续的开发我会在这个包中实现原型微搏系统的所有功,确保您在mblog目录中,并且激活工程虚拟环境,然后运行以下命令:

(env) [oliver@oliver-archlinux mblog]$ mkdir app

或者直接使用pycharm打开mblog工程,如图-1

-1

定位到工程目录mblog,如图-2

2

点击OK打开工程,如图-3

-3

注意图三红色箭头指向为工程目录结构,蓝色箭头只想部分为本工程的虚拟环境。想改变虚拟环境,点击蓝色箭头指向的位置即可。

1)、创建应用程序包

在工程mblog目录上右键New->Python Package,弹出一个界面,要求包名称,输入:app。如图-4

-4

然后__init__.py中输入如下代码:

# app/__ init__.py:Flask应用程序实例#
from flask import Flask

app = Flask(__name__)

from app import routes

__init__.py代码从flask包导入类Flask,并通过Flask类创建以本包名的实例app,通过app实例处理工程的资源加载和路由处理,其中__name__变量意义是把本模块的名称作为参数传递给类Flask,然后,应用程序导入routes这里还没有创建,从字面的意思就能看出,是处理http路由的的。这里两个app可能会令人费解作为包的app是由app文件夹和__init__.py脚本组成,表示的整体应用对外的名称也就是对外名称,我们可以叫app,也可以叫其他名字,并可以通过标准的方式如:from app import routes语句引用其内部的资源

而在__init__.py脚本中app变量,则是Flask类的实例,这app变量app包的成员。如果您发现这一点令人困惑,您可以将包或变量重命名为其它值。

另一个特点是routes模块是在底部而不是在脚本顶部导入的底部导入是避免循环导入的变通方法,这是Flask应用程序的很容易碰到的问题。因此将一个交叉导入(import)放在底部可以避免由这两个文件之间的相互引用引起的错误。

那么routes模块中的内容是什么?routes模块是实现应用程序不同URL的业务逻辑的。在Flask中,应用程序路由的处理过程定义Python函数,称为视图函数。视图函数可以处理一个或多个路由URL,以便Flask知道如何响应客户端HTTP请求

下面我们编写第一个视图函数,我们首先需要在app包中创建routes.py,然后在该文件中编写如下内容

# app/routes.py: Home page route
from app import app

@app.route('/')
@app.route('/home')
def index():
    return "这是2022基于Python微博系统设计与实现的第一次带代码"

这个视图函数非常简单,仅仅处理两个路由,默认的根路由和home路由,处理的过程也非常简单就是返回一条信息:这是2022基于Python微博系统设计与实现的第一次带代码

看到这里,估计有人注意到了在函数index()上面有@app.route的奇怪字符,这个是装饰器,这是Python语言的一个高级特性,类似于Java的注解,装饰器用于表明紧跟其后的函数或者变量的作用,这里@app.route表示紧跟其后的函数是用于处理route指定的http请求的例子两个装饰器,它们将URL "/""/home"index()函数相关联。这意味着当Web浏览器请求这两个URL中的任何一个时,Flask将调用index()并将其返回值作为响应传递回浏览器。如果你看完全不理解,那么当你运行这个应用程序时,可能就有一点明白了。在这份代码中,装饰器也可以用于注册特定事件的回调函数,这个后面会讲解

2)、定义应用程序入口

要运行应用程序,您需要在顶层创建一个定义Flask应用程序实例的Python脚本。我们创建一个mblog.py文件创建方法是在工程目录上右键New->Python File,弹出一个窗口输入mlog即可,并录入如下代码

from app import app

保存

在这里你可以在同一个句子中看到两者。前一个appapp包,而后一个app则是包中被定义的Flask应用程序实例。from app import app是从app包导入app变量。下面图1-6就是是完成上面所有步骤的工程的目录结构,其中env就是本工程的环境,支撑整个应用的开发。

1-5 初步的工程目录结构

3)、运行程序

程序写完了,怎么运行呢?运行方式非常简单,点击图1-6红色箭头指向的Terminal,启动终端,启动后会自动激活配置完成开发环境,在Terminal输入如下指令,绿色箭头指向处:

(env) [oliver@oliver-archlinux mblog]$ flask run

然后在窗口能看到如下信息:
 

* 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)

1-6 启动Teminal

这个时候使用浏览器访问http://127.0.0.1:5000能得到如下画面图1-7访问Web服务器:


1-7访问Web服务器

服务器是可以服务了,上来就一个红色的warning,根据我们学习语言和之前写过代码的经验看,这个肯定有问题,但是程序跑起来了,说明问题不大,仔细看英文信息,我们知道,我们在开发环境下使用了生产环境的配置,但是回头想想,我们什么配置都没写啊,什么开发配置和生产配置的,一脸懵圈。下面我们就来稍微梳理一下Flask运行流程。

启动使用Flask构建的应用程序的时候,通常要和两个环境变量打交道:FLASK_APPFLASK_ENVFLASK_APP的默认值是app包或者app.py,如果没有指定FLASK_APP则默认去工程中找对应这两个东西,找不到,就报错,如果希望整个程序的入口不是这两个默认值之一,我们就需要指定FLASK_APP值,通知Flask第一时间是加载什么文件启动程序,本工程中应该通过Terminal指定FLASK_APP的值为mblog.pywindows 下用 set FLASK_APP=mblog.py

(env) [oliver@oliver-archlinux mblog]$ export FLASK_APP=mblog.py

FLASK_ENV用来设置程序运行的环境,默认为production

在开发时,我们需要开启调试模式(debug mode)。调试模式可以通过将系统环境变量 FLASK_ENV 设为development来开启。调试模式开启后,当程序出错,浏览器页面上会显示错误信息;代码出现变动后,程序会自动重载。设置环境变量FLASK_ENV的方法很简单,打开Terminal(Linux or Macos),(windows 下用 set FLASK_ENV=development)输入如下指令即可:

(env) [oliver@oliver-archlinux mblog]$ export FLASK_ENV=development

(env) [oliver@oliver-archlinux mblog]$ flask run

 * Environment: development

 * Debug mode: on

 * Running on http://127.0.0.1:5000 (Press CTRL+C to quit)

 * Restarting with stat

 * Debugger is active!

 * Debugger PIN: 124-174-213

既可打开发环境配置,程序运行的时候就会及时的对外输出调试相关信息。但是这么做需要每次启动程序的时候都要首先在命令行执行这两个操作

export FLASK_APP=mblog.py

export FLASK_ENV=development

才能正确的加载指定的启动文件和打开调试选先。显然每次都这么做很不方便。为了不用每次打开新的终端会话都要设置环境变量,我们安装用来管理系统环境变量的 python-dotenv

(env) [oliver@oliver-archlinux mblog]$ pip install python-dotenv

python-dotenv 安装后,Flask 会从项目根目录的 .flaskenv .env 文件读取环境变量并设置。我们可以使用文本编辑器(windows下的记事本)创建这两个文件,或在pycharm下在工程上右键New->File分别创建这两个文件,格式选择text格式,或是使用更方便的touchLinux  macos)命令创建:

$ touch .env .flaskenv

.flaskenv用来存储Flask命令行系统相关的公开环境变量;而.env则用来存储敏感数据在新创建的.flaskenv文件里,我们写入一行 FLASK_ENV=develo_pment和一行FLASK_APP=mblog.py将环境变量FLASK_ENV 的值设为 d_evelopment,以便开启调试模式和程序入口设置为mblog.py

FLASK_APP=mblog.py

FLASK_ENV=development

配置完成后整个工程的目录结构和.flaskenv的内容如图1-8

1-8 工程结构和环境配置文件内容

之后每次就可以直接在Terminal或者cmd直接运行flask run就可以启动应用程序了。

4)Pycharm下配置启动和调试配置

既然使用集成IDE,显然我们希望能像过去使用IDE一样,点run菜单下的对应像就可以运行或者调试程序,当手动创建工程的时候,pycharm不能自动帮助我们设置,这个时候就需要我们手动的设置相关参数,以达到让Pycharm可以帮我们管理启动或者调试程序的目的。手动打开工程的界面是如图1-10

1-10 相关运行项都处于不可用状态

为了使这些选项可以用,配置过程如下:

A、点击图1-11 红色箭头指向位置add Configuration,弹出图-12程序运行和调试参数配置界面

1-11 

-12程序运行和调试参数配置界面
  1. 点击图1-12箭头指向的任何一处,弹出一个菜单图1-13 选择Flask server,弹出图1-14参数配置界面:

1-13 选择Flask server

  1. 配置参数如图所示:

1-14参数配置界面

Target:指向工程目录下的主程序,也就是本工程的入口文件

FLASK_ENVdevelopment

Working Directory:指向工程目录

设置完成后,Pycharmrun菜单就可以用了。

运行和启动应用直接点击红色箭头指向的RunFlask’或者右边红色箭头指向的绿色三角号即可。运行结果如下:

结束应用点击绿色箭头指向红色方块即可。


0 条 查看最新 评论

没有评论
暂时无法发表评论