- flask框架概述
- 虚拟环境的创建
- pycharm创建flask项目
- HelloWorld运行
- (___name____)详解
- 路由的使用
- 终端(Terminal)的使用
- 项目资源文件的配置
- 程序加载配置
- postman的使用
flask框架概述
Flask为Python属下的web框架之一,具有比Django更大的灵活性,而由于建立时间较晚,因此相较于Django在实际应用上略逊。但是Flask的强大在于其灵活性以及强可扩展性,这是Django所望尘莫及的。作为一个微框架,Flask的体量也相对于Django小,其在大型网站的应用暂时没有实际示例,而小型app则有很多,因此学好flask框架有利于接下来学习数据挖掘、TensorFlow、PyTorch等工具后将其落地。
Flask诞生于2010年,是Armin ronacher(人名)用Python语言基于Werkzeug工具箱编写的轻量级Web开发框架。它主要面向需求简单的小应用。
Flask本身相当于一个内核,其他几乎所有的功能都要用到扩展(邮件扩展Flask-Mail,用户认证Flask-Login),都需要用第三方的扩展来实现。比如可以用Flask-extension加入ORM、窗体验证工具,文件上传、身份验证等。Flask没有默认使用的数据库,你可以选择MySQL,也可以用NoSQL。其 WSGI 工具箱采用 Werkzeug(路由模块) ,模板引擎则使用 Jinja2 。
可以说Flask框架的核心就是Werkzeug和Jinja2。
Python最出名的框架要数Django,此外还有Flask、Tornado等框架。虽然Flask不是最出名的框架,但是Flask应该算是最灵活的框架之一,这也是Flask受到广大开发者喜爱的原因。
Flask的Github地址:https://github.com/pallets/flask
Flask中文文档地址:http://docs.jinkan.org/docs/flask/
创建虚拟环境
与Django一样,flask也是可以在虚拟环境下进行创建的(这样的好处就是当项目的python版本不同时可以同时使用)
因为在之前的django中已经在该python版本(3.7.7)安装了虚拟环境以及管理包,也就是:
pip install virtualenv
pip install virtualenvwrapper-win
所以直接创建虚拟环境即可:
mkvirtualenv -p python3 py_flask
或
mkvirtualenv flask_vir1 #在python下创建虚拟环境
workon flask_vir1 #进入虚拟环境
pip install flask 安装flask
deactivate (虚拟环境名) #退出当前的虚拟环境
在cmd:
pycharm创建项目
在pycharm专业版中可以直接创建flask项目,并且省略大部分的配置。
但是当使用pycharm社区版时,只能创建pure python项目。
在这里使用pycharm创建pure python项目搭建flask项目:
打开pycharm,创建pure python项目,选择已有的虚拟环境(刚在创建的虚拟环境):
点击create
HelloWorld
创建成功后,就是一个空项目,什么都没有。
如果使用pycharm专业版创建flask项目,那么会有好几个文件以及文件夹。
在项目下创建python文件---HelloWorld.py
要使用flask,就首先要导入flask框架中的Flask模块。
HelloWorld.py:
from flask import Flask
#Flask接受一个参数__name__,他会指向程序所在的包
app = Flask(__name__)
#路由和函数
@app.route('/')
def index():
return '头像真帅'
#main函数
if __name__ == '__main__':
app.run()
到这里就可以运行了:
(___name____)详解
main函数:
if __name__ == '__main__':
类似c或者Java中的mian函数,--程序的入口文件
test1.py:
def test_func():
print(__name__)
def test1_func(name):
print(type(name), name)
test_func() #__main__
test1_func(__name__) #<class 'str'> __main__
#在当前模块下运行,在test_func函数中打印__name__,这个__name__就是当前文件的__name__,所以打印__main__
#在test1_func函数中,传入参数__name__,也是但当前文件的__name__,所以还是打印__main__
name.py:
# __name__是类属性,也就是静态属性
from test1 import test1_func,test_func
'''
在当前模块运行时,__name__ 为__main__
使用import导入时, __name__ 为 所在的模块的文件名(去掉.py)
'''
test_func() #test1
test1_func(__name__) #<class 'str'> __main__
#import方式使用,test_func()打印的__name__,是test1文件下的__name__,所以打印test1。
#test1_func()中,参数传递的是当前模块的__name__,所以打印__main__。
到这里就知道了flask中
app = Flask(__name__)
和
if __name__ == '__main__':
app.run()
#给Flask传递的参数__name__是当前模块的__name__,
#那么__name__就是__main__,那么程序自然就运行到app.run()了。
路由的使用
在flask中也有类似于django的url路由,但是比django的简单很多,直接在相应的视图函数上加上一个装饰器即可:
#装饰器的作用就是讲路由映射到相应的视图函数上
@app.route('/')
def index():
return '头像真帅'
终端(Terminal)的使用
在flask中要进入python shell:
flask shell
但是前提是项目中必须有有app.py文件,并且要在app.py中写最基本的组成部分。
项目资源文件的配置
在Flask类中有许多的初始化参数:
'''
static_url_path:静态访问路径(可不传,默认为static)
static_folder:静态文件夹(可不传,默认为static)
template_folder:模板访问路径(可不传,默认为templates)
'''
static_url_path的设置:
- 如果static_folder未被指定(也就是默认值static),那么static_url_path取为static
- 如果static_folder被指定了,那么static_url_path等于static_folder的最后一级文件夹名称。
- 手动指定static_url_path时,如果static_url_path不为空串,url的路径必须以/开头,如/static。
- 手动指定static_url_path时,如果static_url_path为空串,url路径不必以/开头,否则相当于static_url_path=None的情况,也就是使用static_folder的目录名字。
- static_url_path是前端访问资源文件的前缀目录。默认是/static,就是前端必须这样访问:<img src="/static/img/mylogo.jpg" />
我们改成 ''",就可以这样访问了:<img src="/img/mylogo.jpg" />。就达到前端从根目录访问的目的了。 - static_folder:
static_folder表示静态文件所在路径,默认为总项目下的static文件夹
后端存储资源文件的目录。默认是/static,就是指明你后端的资源文件,是放在<your project>/static/目录下,一般不需要改动。
也就是说flask框架默认总项目下的static文件静态文件目录(static_folder),templates为 模板目录(template_folder)。以及前端访问静态资源时的url根路径(static_url_path)。
实例:
在项目中新建文件夹--static文件夹,在文件夹中新建index.html,然后运行项目:
在url中访问:
127.0.0.1:5000/static/index.html
这就是因为static_url_path默认为static,所以可以访问到。
程序加载配置
在使用web框架时通常要配置很多的配置项,在flask中常用的有两种方式进行加载配置
1.从配置对象中加载(常用)
也就是通过对象进行配置,那么一定要创建类
在app.py中,创建了app实例后,进行编写配置类:
from flask import Flask
#Flask接受一个参数__name__,他会指向程序所在的包
app = Flask(__name__,static_folder='statics')
#1. 配置对象,里边定义需要给APP添加的一系列配置
class Config(object):
DEBUG = True #在修改代码之后直接保存,会自动重启服务器
# 程序加载配置
#1.从配置对象中加载,把类名传给参数
app.config.from_object(Config)
#装饰器的作用就是讲路由映射到相应的视图函数上
@app.route('/')
def index():
return '头像真帅'
#main函数
if __name__ == '__main__':
app.run()
添加的DEBUG=True,在修改代码之后直接保存,会自动重启服务器,不需要像django重启服务器,还可以设置数据库等配置。
运行:
修改index函数的返回值:
直接运行:
2.配置文件中加载
顾名思义:就是创建一个文件,用于写一些配置项。
使用:
在项目下新建文件config.ini,在该文件中写:
#在此文件添加一些配置,一行一个
DEBUG = True
然后在app.py中使用:
#2.配置文件中加载,把文件名传进去
app.config.from_pyfile('config.ini')
再次运行上一步中的结果,也是可以的。
3.从环境变量中加载(不常用)
app.run(参数)
app.run(port=8000,debug=True) #port:指定端口号,debug :自动保存,并重启服务
- port:指定端口号
-
debug :自动保存,并重启服务
运行:
postman
Postman是chrome的一款插件,也可以下载app使用,用于做接口请求测试,无论是前端,后台还是测试人员,都可以用postman来测试接口,用起来非常方便。
就是模拟像后端服务器url发送请求,测试请求是否正常的。
模拟项向
[http://127.0.0.1:5001/](http://127.0.0.1:5001/)
发送请求:
上边的是请求方没有进行传参,当进行web开发时,要对后端不断地传递参数也就是位置参数。
有参方式
在app.py中编写服务器代码:
@app.route('/user/<user_id>')
def user_info(user_id):
return f'hello{user_id}'
使用postman进行测试:
网友评论