• 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

  • 相关阅读:
    滚动到Table的某个位置
    前端导出可修改样式的Excel表格
    在vue中绑定weui的class
    html5的消息通知
    在nginx上部署页面,使用ip访问页面,实现跨设备访问本地静态页面
    用原生javascript实现get请求,及具体数据的获取
    vue中如何实现图片不存在时显示一个默认的图片
    css选择器
    javascript 类型及类型判断
    CSS
  • 原文地址:https://www.cnblogs.com/nanhuaqiushui/p/14881383.html
Copyright © 2020-2023  润新知