Flask入门
flask笔记
1、MVT 和MVC区别?
解耦合
页面展示、数据操作、逻辑处理进行拆分
2、pip安装与使用
3、虚拟环境
4、python全局锁,所以需要引入多线程,一般为核数
5、debug模式下,服务会自动重启(热启动)
6、Flask简介
基于python的web 微 框架
微 并不是功能弱的意思,而是尽量保持核心代码的简洁,不为用户做过多的选择
给开发者更多的选择空间
请求流程分析:
浏览器 ---> 路由器(route) ----> 视图函数(views) ----> 模型(models)----> 视图函数 ----> 模板 ----> 浏览器
7、flask-script
-- 实现命令行参数接收
-- pip install flask-script
-- 使用app构建manager对象
-- 实现manager启动项目
from flask import Flask
from flask_script import Manager
app = Flask(__name__)
manager = Manager(app=app)
@app.route('/')
def hello_world():
return 'Hello World'
@app.route('/hello'):
def hello():
return render_template('hello.html')
if __name__ == '__main__':
# app.run(debug=True, port=8000, host='0.0.0.0')
manager.run()
启动命令
python manage.py runserver -r -d -p 9000 -h 0.0.0.0
8、代码结构
static 静态资源文件 127.0.0.0.1:8000/static/css/common.css 可以直接访问
templates 模板文件
默认两个都可以直接使用,直接使用相对路径就好
模板渲染:
render_template()
相当于:
template = Template('<h1>777</h1>')
template.render()
静态使用,相当于反向解析
url_for('static', filename='comon.css')
9、flask中的参数
- 都是关键字参数
- 默认标识是尖括号
- name需要和对应的视图函数参数名保持一致
- 参数允许有默认值
- 如果有,路由中允许不传参
- 如果没有,参数在路由中必须传递
- 默认参数类型是字符串
- 参数语法<converter: var>
- string/int/float/path/uuid/any
10、请求方法
@app.route('getStuList', methods=['GET','POST'])
11、请求工具:httpie
pip install httpie
12、url_for
url_for('函数名', 参数名=value)
@app.route('/url')
def url():
print(url_for('get_uuid'))
print(url_for('any', an='d'))
return '反向解析'
13、Request
args:
接收get请求参数 or 其他请求中路径参数(url中?之后的参数)
类字典结构,每一项都是一个元组;
元组中包含两个元素,左侧是key,右侧是value;
key是可以重复的,dict.get('name')只会拿到第一个key为name的元组
获取方式:dict['name']; dict.get('name'); dict.getlist('name')
from flask import Flask, render_template, request
@app.route('/request', methods=['GET', 'POST'])
def req():
print(request)
print(type(request))
print(request.method)
print(request.data)
# arguments 参数 get请求参数
print(request.args)
# post相关请求参数
print(request.form)
print(request.files)
print(request.cookies)
# 请求的远端地址
print(request.remote_addr)
# 浏览器身份
print(request.user_agent)
print(request.url)
return 'request请求相关'
14、Response
字符串
render_template
make_response
Response
from flask import Flask, render_template, request, url_for, Response
@app.route('/getList')
def get_list():
response = Response(response='<h2>德玛西亚</h2>', status=403, content-type='application/json')
print(response)
return response
15、响应类型
Response对象
redirect
abort
json
返回JSON
jsonify:将数据格式转化为json格式,同时设置返回值为“application/json”
json.dumps:将数据格式转化为json格式,没有设置返回的数据类型,默认类型为“text/html”
16、重定向&终止响应
from werkzeug.exceptions import abort
from werkzeug.utils import redirect
# 重定向
@app.route('/redirect')
def redir():
response = redirect(url_for('hello'))
return response
# 终止响应
@app.route('/abort/')
def ab():
abort(403)
return
17、问题
pip uninstall flask
pip install Flask==1.1.4
18、蓝图拆分
包和文件夹的区别?是否有'init'
# 安装插件
pip install flask-blueprint
# 初始化蓝图
blue = Blueprint('blue', __name__)
# 在app中注册
app.register_blueprint(blueprint=blue)
# 使用
@blue.route('/rule/')
def hello():
return 'Hello World'
19、插件
Flask-script:在终端动态接收命令行参数,传递到python代码中
flask-blueprint:解决循环引用问题,拆分views,代替了用app来注册路由的问题
20、客户端会话技术
- 跨越请求传递数据
- web开发中使用的短连接
- cookie
- 客户端会话技术
- 数据存储在浏览器中
- 支持过期
- 不能跨域
- frame标签
- 可以直接加载整个网站
- 不能跨浏览器
- cookies是通过Response进行操作
- flask中的cookie可以直接支持中文
- flask对内容做了编码处理
- session
- 服务端会话技术
- 对数据进行数据安全操作
- 默认在内存中
- 不容易管理
- 容易丢失
- 不能多台电脑写作
- flask-session
- 默认有效期31天
21、redis应用
22、结构标签
block
{% block **** %}
{% endblock %}
extends
{% extends *** %}
继承后保留块中的内容
{{ super() }}
include
{% include *** %}
包含,将其他html包含进来,体现的是由零到一的概念
marco
{% marco hello(name) %}
{{ name }}
{% endmarco %}
宏定义,可以在模板中定义函数,在其它地方调用
宏定义可导入
{% from *** import *** %}
23、反向解析(url_for)
- 使用在app中
- url_for('endpoint')
- endpoint默认是函数的名字
- 使用在blueprint中
- url_for('bluename.endpoint')
- 蓝图名字.函数名
- 获取静态资源路径
- url_for('static', filename='path')
- static 资源
- path 相对于资源的相对路径
24、模板
-
用来生成html页面
-
主要包括两部分
- 静态html
- 模板语法
-
模板语法
- {{ var }}
-
结构标签
-
block
- 规划型标签
- 首次出现挖坑
- 非首次填坑
- 多次填坑会出现覆盖,不想覆盖就用 {{ super() }}
-
extends
-
includes
- 包含
- 能用block + extends实现的,尽量别用include
-
macro
- 宏定义
- 可以在html中定义函数
- 还可以接收参数
- 通过调用函数生成html
- 支持导入操作
-
25、ORM
将对象的操作转换为原生SQL
优点:
- 易用性,可以有效减少重复SQL
- 性能损耗少
- 设计灵活,可以轻松实现复杂查询
- 移植性好
python的ORM(SQLAlchemy)
插件支持:flask-sqlachemy