1.创建工程
如果pycharm是专业版,直接NewProject—>Flask
填写工程name和location后,点击右下角【create】,就会新建一个flask工程,工程里默认会建好一个templates文件夹、static文件夹、一个app.py文件
templates:存放html模板
static:存放不动态更改的文件,比如图片
app.py:启动入口
其中app.py中自动生成下面的代码
from flask import Flask
'''
创建一个名为app的Flask实列,参数为当前模块名或者当前包名。表示使用当前模块名或者包名来确定应用程序的根目录
'''
app = Flask(__name__)
'''
路由函数
'''
@app.route('/')
def hello_world(): # put application's code here
return 'Hello World!'
'''
main函数,启动入口
'''
if __name__ == '__main__':
app.run()
如果Pycharm是非专业版,可以建普通工程后,手动新建templates文件夹、static文件夹、app.py文件。
2.启动工程
- 方法一:右上角启动工程
- 方法二:直接运行app.py文件
当出现 http://127.0.0.1:5000,工程就启动成功了
工程启动后就会一直监听5000端口,监听到HTTP 请求后封装为 Request
对象,然后匹配路由接口,如匹配到执行视图函数,匹配不到返回404。
3.@app.route视图函数开发
3.1 静态url
- url路径是固定字符串
- 必须参数:rule
- 非必须参数:methods:http请求类型,默认为get,也可以是post,或者get和post同时支持
举例:
测试:

3.2 动态url
- url路径是一个动态值
- 必须参数:rule
- 非必须参数:methods
举例:
测试:
3.3.请求参数处理
- 导入模块:from flask import request
flask框架的request是用来存储http请求带过来的协议信息和参数的
- 查询参数:以字典的形式存储在args里面
- K=V的表单参数:以字典的形式存储在form中
- 参数为Json:以字典的形式存储在Json里
- JSON里包含json:以字典的形式存储在Json里
- request里的其他信息
files:记录了请求上传的文件,返回类似于字典的数据
method:记录了请求使用的HTTP方法
url:记录了请求中的URL地址
host:记录了请求的域名
headers:记录了请求的请求头信息,返回类似于字典的数据
3.4 返回
- 返回普通字符、数值
@app.route视图函数:
web调用测试:
- 返回html页面:一般用于前后端不分离的场景
第一步:先创建html页面:在工程的templates文件夹下新建html页面
Flask框架里面支持前端模板语言jinja2模板,这个模板支持读取python变量
第二步:编写html
语法:
变量用:{{}}
分支判断:
循环支持:
注释:
举例:
html:
@app.route视图函数:
from flask import Flask, render_template
@app.route('/login/with/html')
def login_with_html():
tuple=(1,2,3,4,5,6)
dict={
"name":"testtesttest003",
"id":2987654
}
return render_template('demo.html',name='测试测试测试测试测试',age=19,tuple=tuple,dict=dict)
web调用测试:
- 返回json:一般用于前后端分离的场景,前端用vue,nodejs
@app.route视图函数:
from flask import Flask, jsonify
@app.route('/login/test/json')
def login_getjson():
return jsonify({"code":"200",
"data":{"message":"Request successful"}})
web调用测试:
4.Flask和Django的比较
维度 | Flask | Django |
路由系统 | 由装饰器 @app.route 显式定义 |
在urls.py 中管理,通过正则表达式匹配 |
项目结构 | 结构单一,轻量灵活 | 结构严格约定 |
灵活性 | 高,可自由组合扩展 | 低,需遵循框架设计 |
性能 | 轻量,适合高并发微服务 | 较重,但优化后性能足够应对多数场景 |
开发速度 | 前期快,需求越复杂后期自行集成扩展慢 | 有很多内置工具,减少重复开发,前期慢后期快 |
ORM | 无内置,需自行扩展 | 内置 ORM,支持数据库迁移和关系映射 |
学习难度 | 简单易上手 | 需要学习的内容较多,需学习整套约定 |
适用场景 | 适合小型应用、微服务 | 适合大型企业级应用、多人协作,快速原型开发 |