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)

大家都在看

  • 2020年12月-第02阶段-前端基础-CSS Day05

    CSS Day05 学成在线页面制作 理解 能够说写单页面我们基本的流程能说出常见的css初始化语句能说出我们CSS属性书写顺序 应用 能利用ps切图能引入外部样式表能把psd文件…

    Linux 2023年6月8日
    0116
  • 4个实验,彻底搞懂TCP连接的断开

    前言 看到这个标题你可能会说,TCP 连接的建立与断开,这个我熟,不就是三次握手与四次挥手嘛。且慢,脑海中可以先尝试回答这几个问题: 四次挥手是谁发起的? 如果断电/断网了连接会断…

    Linux 2023年5月27日
    096
  • Linux指令

    Linux 目录简介/bin Binary的缩写,存放最经常使用的命令/sbin s代表Super user,存放系统管理员使用的系统管理程序/home 存放普通用户的主目录,每个…

    Linux 2023年5月27日
    096
  • 虚拟机无法联网

    状态:虚拟机使用NAT模式的VMnet8网卡, ping baidu.com 无法联通 解决: ipconfig查看物理机网络: ip配置:把网关 GATEWAY 改为 192.1…

    Linux 2023年6月8日
    088
  • Windows Server 新增磁盘处于脱机状态解决办法

    解决方案: Cmd命令行操作如下: 1,进入diskpart模式 2、列出磁盘情况 3、选择脱机的磁盘 4、联机磁盘 5、清除磁盘属性 6、进入磁盘管理,提示初始化 每天记录一点,…

    Linux 2023年6月8日
    0107
  • STP 指定端口 根端口 区别和理解

    不多说,先上图,A为指定端口,B为非指定端口。 看本文的网友应该知道根端口和指定端口的选举,但是对指定端口和根端口的理解不清楚。这里我就略过选举过程,直接描述这两者的区别和存在的意…

    Linux 2023年6月6日
    0141
  • MS17-010永恒之蓝漏洞利用

    MS17-010永恒之蓝漏洞利用 原理 永恒之蓝漏洞是方程式组织在其漏洞利用框架中一个针对SMB服务进行攻击的漏洞,该漏洞导致攻击者在目标系统上可以执行任意代码。SMB服务在Win…

    Linux 2023年6月14日
    088
  • Ubuntu2004使用dnsmasq+Clash+Iptables+Ipset

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Linux 2023年6月13日
    086
  • Scipy

    1.Scipy简介 使用python做科学计算,详情参考官方文档 scipy软件包包含专用于科学计算中常见问题的各种工具箱,他的不同子模块对应于不同的应用程序,例如插值,积分,优化…

    Linux 2023年6月6日
    083
  • 数据库简单查询

    简单查询 语法句式如下: SELECT filed1,filed2 … filedn FROM tablename [WHERE CONDITION11] [GROUP BY …

    Linux 2023年6月7日
    0134
  • 线程池如何保证核心线程一直存活

    转载请注明出处: 查看 ThreadPoolExecutor 类中的 getTask 方法,这个方法可以保持核心线程在没有任务的时候也可以一直处于存活状态 核心在于 workQue…

    Linux 2023年6月14日
    0158
  • 003Linux查看文件内容的5个命令姿势

    Linux 中查看文件内容常用的有如下 5 个命令: cat cat 命令常用格式示例: cat [文件名] # 输出文件所有内容到屏幕上。 cat [文件1] [文件2] # 输…

    Linux 2023年5月27日
    095
  • netstat 命令查看端口状态详解

    转载请注明出处: netstat 可以查看服务器当前端口列表及指定端口的连接状态等; -t : 指明显示TCP端口,t是TCP的首字母。 -u : 指明显示UDP端口,u是UDP的…

    Linux 2023年6月14日
    081
  • 学习一下 JVM (二) — 学习一下 JVM 中对象、String 相关知识

    一、JDK 8 版本下 JVM 对象的分配、布局、访问(简单了解下) 1、对象的创建过程 (1)前言Java 是一门面向对象的编程语言,程序运行过程中在任意时刻都可能有对象被创建。…

    Linux 2023年6月11日
    0110
  • ubuntu 20.04.1 安装 PHP+Nginx

    ubuntu 20.04.1 安装 PHP+Nginx 全流程 ubuntu 20.04.1 安装 PHP+Nginx 更新源 sudo apt-get update 安装环境包 …

    Linux 2023年6月7日
    0132
  • 记一次PowerShell配合Metersploit的艰难提权

    0x01 环境准备 kali(模拟公网攻击机) Windows2008(靶机,装有360、火绒、安全狗、D盾) Powersploit(PowerShell攻击框架) https:…

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