Flask 易错点

1.With上下文管理器

常用:

with open("file_name","wb") as f:
    f.write("hello flask")

自定义:

class Foo(gbiect):
    def __enter__(self):
        """进入with语句的时候被with调用"""
        print("enter called")
    def __exit_(self, exc_type, exc_val, exc_tb):
        """离开with语句的时候被with调用"""
        print("exit called")
        print("exc_type:%s" % exc_type)
        print("exc_val:9%s" % exc_val)
        print("exc_tb:%s"%exc_tb)

with Foo() as foo:
    print("helto python")
    a=1/0
    print("hello end")

运行结果:

 enter called
  Traceback (most recent call last):
  hello python
    File"/Users/delron/Desktop/code/03 with. py", line 39, in
  exit called
       a=1/0
  ZeroDivisionError: integer division or modulo by zero
  exc_type:
  exc_val: integer division or modulo by zero
  exc_tb:
  Process finished with exit code 1

2. Json模块

dumps —> 可以将字典转换为字符串

    import json

    a = '{"city": "sz", "country": "china"}'

    b = json.loads(a)

    print(type(b), b)

  运行结果:

    dict {"city": "sz", "country": "china"}

3. xss攻击

当前段传送过来的数据默认进行转义,否则,则会默认执行前端传送的数据,则称为xss攻击

4. flask 和mysql

 Linux:

  flask使用mysql数据库需要:

    1、pymysql

    2、sqlalchemy

    3、flask_sqlalchemy

  windows:

    Flask利用pymysql出现Warning:1366的解决办法

    flask使用mysql数据库需要:

mysql-connector-python

sqlalchemy

flask_sqlalchemy

SQLALCHEMY_DATABASE_URI = "mysql+mysqlconnector://root:mysql@localhost/ihome01"

5. 装饰器

  @app.route("/")

  def index():

   return "index page"
  def index():
    return "index page"
  app.route("/)(index)
装饰器不仅仅是定义时可以用,还可以在定义完再使用

6. 自定义正则转换器及蓝图

from werkzeug.routing import BaseConverter

定义正则转换器

class ReConverter(BaseConverter):

def __init__(self, url_map, regex):
    # 调用父类初始化方法
    super(ReConverter, self).__init__(url_map)
    # 重新赋值
    self.regex = regex

添加自定义的转换器

 app.url_map.converters["re"] = ReConverter
  from flask import Blueprint, current_app

  html = Blueprint("web_html", __name__)

  @html.route("/")
  def web_html(file_name):
    if not file_name:
        file_name = "index.html"
    if file_name != "favicon.ico":
        file_name = "html/" + file_name
    return current_app.send_static_file(file_name)

注册蓝图

  • app.register_blueprint(html)

7. 登录装饰器

def login_required(view_func):
    # wraps函数的作用是将wrapper内层函数的属性设置为被装饰函数view_func的属性
    @functools.wraps(view_func)
    def wrapper(*args, **kwargs):
        # 判断用户登录状态
        user_id = session.get("user_id")
        # 如果用户是登录状态,则执行登录状态
        if user_id is not None:
            # 将user_id保存到g对象中,在视图函数中,可以通过g对象获取保存数据
            g.user_id = user_id
            return view_func(*args, **kwargs)
        # 如果未登录,则返回未登录信息
        else:
            return jsonify(errno=RET.SESSIONERR, errmsg="用户未登录")
    return wrapper

8. 视图函数

  • 路由匹配不能出现相同的地址,即同一地址,不能出现两个视图函数
  • 路由匹配不能出现不同的函数,即不同的地址,不能出现相同的函数名

9. 参数获取

  • 直接从request中获取json数据,并将其转换为字典

house_data = request.get_json()

  • 从request中获取文件

image_file = request.files.get(“house_image”)

  • 从request中的form表单中获取键值对

house_id = request.form.get(“house_id”)

10. 数据库操作

在同一视图函数中,可以对对象多次修改,只提交一次即可

 db.session.add(house_image)
  db.session.add(house)
  try:
      db.session.commit()
  except Exception as e:
      current_app.logger.error(e)
      db.session.rollback()

Original: https://www.cnblogs.com/gaogang/p/14843713.html
Author: 小高、
Title: Flask 易错点

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/586044/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • JavaScript this

    本博客所有文章仅用于学习、研究和交流目的,欢迎非商业性质转载。 博主的文章没有高度、深度和广度,只是凑字数。由于博主的水平不高,不足和错误之处在所难免,希望大家能够批评指出。 博主…

    Linux 2023年6月13日
    0111
  • 重新认识运维

    重新认识运维 背景 随着业务的发展,新技术的迭代,公司研发采用了微服务架构或是上云等等,这没有考虑运维成本和效率,带来运维极大的复杂性,让运维纯手工,苦不堪言,痛苦。从现象来看,运…

    Linux 2023年6月8日
    0112
  • 【XML】学习笔记第四章-schema

    Schema 概述 作用 与DTD相比Schema的优势 基础命名空间: 模式 引用方法 通过xsi:noNamespaceSchemaLocation引入 通过xsi:shema…

    Linux 2023年6月14日
    0100
  • RISC-V汇编指南

    The RISC-V Assembly Programmer’s Manual is I think it’s probably better to bee…

    Linux 2023年6月6日
    076
  • 【证券从业】金融基础知识-第六章 证券投资基金02

    注1:后续学习并整理到第八章,全书完结后再合并成一个笔记进行源文件分享 注2:本章内容巨多,大约分为三篇文章记录消化 posted @2022-06-11 23:55 陈景中 阅读…

    Linux 2023年6月13日
    0113
  • PyTorch 介绍 | LEARN THE BASICS

    大多数机器学习流程都包括数据、创建模型、优化模型参数,以及保存训练模型工作。该教程向你介绍一个在PyTorch上实现的完整的机器学习工作流,并提供了了解这些概念详细信息的链接。 我…

    Linux 2023年6月16日
    0152
  • Linux专项之Apache

    1.虚拟机上网 1.安装软件(httpd) yum search ht…

    Linux 2023年6月14日
    096
  • 扑克牌大小—牛客网

    扑克牌大小_牛客题霸_牛客网 (nowcoder.com) #include #include<string> #include using namespace std…

    Linux 2023年6月13日
    0126
  • bash 教程-2 shell 字符串 转义 模式扩展 特殊符号 [MD]

    我的GitHub 我的博客 我的微信 我的邮箱 bqt20094 baiqiantao@sina.com 字符串的表示 shell 中的字符串可以用 &#x5355;&am…

    Linux 2023年5月28日
    073
  • 【亲测有效】Tecnomatix PDPS 软件安装及常见问题!附授权文件

    据说,每个学习 Siemens PLM 仿真的同学,都要先被 TecnoMatix PDPS 软件的安装给折磨过! 经过几天的安装过程,果然,此话不虚~~~ 把自己的安装步骤贴出来…

    Linux 2023年6月7日
    0177
  • Linux CURL的安装和使用

    –获得安装包,从网上直接下载或者其他途径,这里直接wgetwget http://curl.haxx.se/download/curl-7.17.1.tar.gz&#8…

    Linux 2023年6月13日
    093
  • 数组常见操作

    8.19 day7 数组常见操作 获取数组最值 public static int maxElement(int[] arr) { // 假设第一个元素的值就是最大值 int ma…

    Linux 2023年6月7日
    095
  • shell join详解

    首先贴一个,join –help 然后来理解下。 join 【命令选项】 文件1 文件2 //命令选项可以很多, 但文件只能是两个 先从重要的开始说,join 的作用是…

    Linux 2023年5月28日
    081
  • 离线版centos8安装docker笔记

    嗨嗨哈哈,已经很久没有坐下来胡编乱造一点笔记了,平时云服务器搞惯了,一个命令就安装好了docker了的,但这次生不逢时的新机房就没那么幸运了,有多不逢时超乎想象,不仅仅服务器没有外…

    Linux 2023年6月14日
    0102
  • 【pycharm】Cannot find reference ‘XXX‘ in ‘__init__.py‘ 解决办法

    Cannot find reference ‘XXX’ in ‘init.py’ 解决办法 File -> Editor -&…

    Linux 2023年6月8日
    0119
  • 使用shell脚本连接钉钉机器人发送消息

    一、前言 服务器上有时 定时任务、重要接口 等出现异常,导致数据不正常,不能及时通知到服务负责人,及时处理问题。所以引入”钉钉”作为通知工具,当服务出现异常…

    Linux 2023年5月28日
    0124
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球