flask开发规范
Hello_world
对于flask框架的开发,一般都是遵循着如下格式模版:
1 2 3 4 5 6 7 8 9 10
| import flask
app = flask.Flask(__name__)
@app.route('/hello') def hello_func(): return "hello world!"
if __name__ == '__main__': app.run()
|

路由规范
- 路由定义的路径名称应尽量与其绑定的函数名称应该尽量相同
项目目录
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| my_flask_app/ │ ├── app/ │ ├── __init__.py │ ├── routes/ │ │ ├── __init__.py │ │ ├── main.py │ │ └── auth.py │ ├── models/ │ │ ├── __init__.py │ │ └── user.py │ ├── templates/ │ │ ├── layout.html │ │ └── home.html │ └── static/ │ ├── css/ │ └── js/ │ ├── config.py ├── requirements.txt ├── migrations/ │ └── ... └── run.py
|
flask路由
- 在flask中路由并不是指网络层的那些东西,而是web应用将
URL映射
到python
函数的机制。flask路由是flask应用的核心部分,用于处理不同的URL
的请求,并将请求的处理委托给相应的视图函数。
- 下面是关于Flask路由的详细说明:
- 定义路由:
@app.route("/path")
装饰器定义URL和视图函数的映射。
- 路由参数:通过动态部分在
URL
中传递参数
- 路由规则:使用类型转换器指定URL参数传递的类型,字符串、整数、浮点数、路径。
- 请求方法:指定允许的HTTP请求方法。
- 路由函数返回:视图函数可以返回不同的类型响应。
- 静态文件和模版:管理静态文件和动态渲染HTML模版。
- 路由优先级:确保路由顺序正确,以避免意外匹配结果。
定义路由
路由的定义其实就是如下两步:
- 第一步先在一行中写上
@app.route("/path")
。
- 第二步紧接着定义一个函数,这个函数被称为视图函数,例子就用
hello_world
的这个例子
1 2 3 4 5 6 7 8 9 10
| import flask
app = flask.Flask(__name__)
@app.route('/hello') def hello_func(): return "hello world!"
if __name__ == '__main__': app.run()
|
参数接收
- 在定义路由的时候定义这样的形式:
@app.route('/say/<name>')
,这就是表示将URL
请求的一些路径参数传递给函数,这个name
其实是一个变量名称。
- 当使用
URL
访问/say/xxx
,此时name=xxx
就会作为参数传递给其绑定的函数,所以路由绑定的函数就会存在name
这个参数,而这个xxx
是被用户决定的。
- 例子:对于如下代码,当我们访问
/say/aaa
,name='aaa'
,此时就会返回hello aaa
;如果访问/say/bbb
,此时就会返回hello bbb
1 2 3 4 5 6 7 8 9 10 11 12
| import flask
app = flask.Flask(__name__)
@app.route('/say/<name>') def say(name): return f"hello {name}"
if __name__ == '__main__': app.run()
|


路由规则
- 对于参数的接收可以指定一个规则,使得接收的参数为整型会绑定一个函数,接收的参数为字符串类型会绑定另一个函数。这个规则的定义如下:
1
| @app.route("/type/<int:number>")
|
1 2 3 4 5 6 7 8 9 10 11 12 13
| import flask
app = flask.Flask(__name__)
@app.route("/type/<int:number>") def type1(number): return f"int,{number}" @app.route("/type/<string:strs>") def type2(strs): return f"str,{strs}" if __name__ == '__main__': app.run()
|


请求方法
-
这里的请求方法指的是http
协议的请求方法,常见的http
协议的请求方法有:GET
、POST
、PUT
、DELETE
。这里指简单介绍GET
请求和POST
请求。
-
定义的形式如下:选定传入的参数为methods
,methods
为一个列表类型,它需要指定为接收的方法类型,比如只处理get请求,就只写['GET']
;如果需要处理get、post请求,就需要写['GET','POST']
1
| @app.route("/get",methods=["GET"])
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| import flask
app = flask.Flask(__name__)
@app.route("/get",methods=["GET"]) def get_func(): return "这是一个get请求"
@app.route("/post",methods=["POST"]) def post_func(): return "这是一个post请求"
if __name__ == '__main__': app.run()
|



视图函数返回
视图函数的返回可以返回字符串、html、标签、json文件、自定义请求响应
,这里直接从例子入手。
1 2 3 4 5 6 7 8 9 10 11 12
| import flask app = flask.Flask(__name__)
@app.route("/json") def json_func(): dicts=dict() dicts["name"] = "tome" dicts["age"] = 19 return flask.jsonify(dicts)
if __name__ == '__main__': app.run()
|

1 2 3 4 5 6 7 8 9 10
| import flask app = flask.Flask(__name__)
@app.route("/str") def str_func(): return "strs"
if __name__ == '__main__': app.run()
|

1 2 3 4 5 6 7 8 9
| import flask app = flask.Flask(__name__)
@app.route("/html") def html_func(): return "<h1>html</h1>"
if __name__ == '__main__': app.run()
|

1 2 3 4 5 6 7 8 9 10 11
| import flask app = flask.Flask(__name__)
@app.route("/response") def response_func(): response=flask.Response("defi response",status=200) response.headers['name'] = "definiresponse" return response
if __name__ == '__main__': app.run()
|

静态文件与模版

1 2 3 4 5 6 7 8 9 10
| import flask app = flask.Flask(__name__)
@app.route("/return_html") def return_html_func(): return flask.render_template('./example.html')
if __name__ == '__main__': app.run()
|

路由优先级
- 当存在两个相同的路由时,使用
URL
访问路由函数时,到底是先调用哪个路由函数,这个就需要使用路由优先级确定。
- 路由优先级原则:哪个路由函数先被定义,先被定义的路由函数优先级就会更高。访问该路径的时候,使用的路由函数始终是
func1
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| import flask app = flask.Flask(__name__)
@app.route("/my_route") def func1(): return "Func1"
@app.route("/my_route") def func2(): return "Func2"
if __name__ == '__main__': app.run()
|

flask视图函数
- 视图函数其实就是与
flask
路由绑定起来的函数,该函数被称为视图函数。视图函数一般最经常用来处理前端发送过来的请求,后端的逻辑一般都在flask
视图函数中编写。
- 对于
flask
视图函数,主要就是前后端交互的处理,一般就是接收和处理前端发送过来的数据,然后将处理结果返回给前端,从而达到前后端交互目的。
获取请求数据
返回响应
处理请求相应
处理错误
视图函数修饰器
flask模版渲染
- 在web开发中,模版一般是指带有占位符的
HTML
文件,这样其实就能根据一些用户信息或者用户的请求在前端显示不同的信息。
项目1—登录界面
阶段1
阶段2