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 <module>
exit called
a=1/0
ZeroDivisionError: integer division or modulo by zero
exc_type:<type ' exceptions. ZeroDivisionError'>
exc_val: integer division or modulo by zero
exc_tb:<traceback object at 0x1097bc440>
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("/<re(r'.*'):file_name>")
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()
Flask 易错点的更多相关文章
- JavaScript易错知识点整理
前言 本文是我学习JavaScript过程中收集与整理的一些易错知识点,将分别从变量作用域,类型比较,this指向,函数参数,闭包问题及对象拷贝与赋值这6个方面进行由浅入深的介绍和讲解,其中也涉及了一 ...
- JavaScript 易错知识点整理
本文是我学习JavaScript过程中收集与整理的一些易错知识点,将分别从变量作用域,类型比较,this指向,函数参数,闭包问题及对象拷贝与赋值这6个方面进行由浅入深的介绍和讲解,其中也涉及了一些ES ...
- Java五道输出易错题解析(避免小错误)
收集了几个易错的或好玩的Java输出题,分享给大家,以后在编程学习中稍微注意下就OK了. 1. 看不见的空格? 下面的输出会正常吗? package basic; public class Integ ...
- 细节!重点!易错点!--面试java基础篇(二)
今天来给大家分享一下java的重点易错点第二部分,也是各位同学面试需要准备的,欢迎大家交流指正. 1.字符串创建与存储机制:当创建一个字符串时,首先会在常量池中查找是否已经有相同的字符串被定义,其判断 ...
- 细节!重点!易错点!--面试java基础篇(一)
今天来给大家分享一下java的重点易错点部分,也是各位同学面试需要准备的,欢迎大家交流指正. 1.java中的main方法是静态方法,即方法中的代码是存储在静态存储区的. 2.任何静态代码块都会在ma ...
- [SQLXML]FOR XML语法导出XML的易错之处
原文:[SQLXML]FOR XML语法导出XML的易错之处 [SQLXML]FOR XML语法导出XML的易错之处 Version Date Creator Description 1.0.0.1 ...
- JavaScript易错点转载
前言 本文是我学习JavaScript过程中收集与整理的一些易错知识点,将分别从变量作用域,类型比较,this指向,函数参数,闭包问题及对象拷贝与赋值这6个方面进行由浅入深的介绍和讲解,其中也涉及了一 ...
- PHP数据访问易错点(20161030)
易错点: 1.造对象的时候括号里面的参数 写错了 $db = new MySQLi("localhost","root","789",&qu ...
- 关于Verilog HDL的一些技巧、易错、易忘点(不定期更新)
本文记录一些关于Verilog HDL的一些技巧.易错.易忘点等(主要是语法上),一方面是方便自己忘记语法时进行查阅翻看,另一方面是分享给大家,如果有错的话,希望大家能够评论指出. 关键词: ·技巧篇 ...
随机推荐
- 2021年哪个低代码平台更值得关注?T媒体盘点国内主流低代码厂商
2020年圣诞前夜,国内知名创投科技媒体T媒体旗下的T研究发布了2020中国低代码平台指数测评报告.报告除了对国内低代码行业现状进行总结外,还对主流低代码厂商的市场渗透和曝光进行测评. 报告认为,低代 ...
- Servlet监听器详解及举例
监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法将立即被执行. 监听器原理 监听原理 1.存在事件源 ...
- Tensorflow保存神经网络参数有妙招:Saver和Restore
摘要:这篇文章将讲解TensorFlow如何保存变量和神经网络参数,通过Saver保存神经网络,再通过Restore调用训练好的神经网络. 本文分享自华为云社区<[Python人工智能] 十一. ...
- log4J日志输出修改
1. log4j.rootLogger=DEBUG,INFO, console, log, error ###Console ### log4j.appender.console = org.apac ...
- 密码学系列之:海绵函数sponge function
目录 简介 海绵函数的结构 海绵函数的应用 简介 海绵函数sponge function是密码学中使用的一种函数,它接收一定长度的输入,然后输出一定长度的输出,中间包含了有限个内部状态. 因为海绵函数 ...
- ysoserial CommonsColletions7分析
CC7也是一条比较通用的链了,不过对于其原理的话,其实还是挺复杂的.文章如有错误,敬请大佬们斧正 CC7利用的是hashtable#readObject作为反序列化入口.AbstractMap的equ ...
- Lambda 表达式详解
目录 前言 预备知识,理解委托的构成 引用实例方法的委托 引用静态方法的委托 Lambda 表达式的实际编译结果 CASE 1 没有捕获任何外部变量的Lambda 表达式 CASE 2 捕获了外部方法 ...
- composer 忽略版本检测
今天安装插件的时候,直接不能安装,提示其他插件版本要求 tip:心细的朋友可能发现黄色部分提示了,提示我们升级composer,现在composer2.0已经发布了,赶快升级吧传送门 https:// ...
- input竖直的输入框,文字从上到下排列
有的时候可能会有这样的需求,一个竖直的输入框,输入信息,文字也是从上到下排列: (但是在移动端或用轮播swiper时不起作用,可以用textarea代替input) <!DOCTYPE html ...
- Java基础系列(26)- 打印三角形
package struct; public class TestDemo { public static void main(String[] args) { for (int i = 1; i & ...