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 }}
    • {% tag %}
  • 结构标签

    • block

      • 规划型标签
      • 首次出现挖坑
      • 非首次填坑
      • 多次填坑会出现覆盖,不想覆盖就用 {{ super() }}
    • extends

    • includes

      • 包含
      • 能用block + extends实现的,尽量别用include
    • macro

      • 宏定义
      • 可以在html中定义函数
      • 还可以接收参数
      • 通过调用函数生成html
      • 支持导入操作
        • {% from *** import *** %}

25、ORM

将对象的操作转换为原生SQL

优点:

  • 易用性,可以有效减少重复SQL
  • 性能损耗少
  • 设计灵活,可以轻松实现复杂查询
  • 移植性好

python的ORM(SQLAlchemy)

插件支持:flask-sqlachemy

原文地址:https://www.cnblogs.com/nanhuaqiushui/p/14881383.html