600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > python flask项目过程_Python 开发过程遇到的问题

python flask项目过程_Python 开发过程遇到的问题

时间:2023-04-28 11:49:38

相关推荐

python flask项目过程_Python 开发过程遇到的问题

另一方面,也是因为时间原因,没有事先系统了解 python 的具体内容,所以开发过程中基本都是拿 java 的东西往 python 里面套。

比如:

某个功能用 java 的 ArrayList 可以解决,那 python 中有没有类似的东西呢?

java 中定义整形用 int i = 0, 那 python 呢?

也正是因为如此,遇到了很多问题。下面就总结一遍。

列一下问题大纲

觉得没用的就不用往下看了,大概会涉及到 python 语法及 API,redis 模块,requests 模块,flask 框架

python 局部变量作用域问题

python 常量定义

python 通过占位符进行字符串替换

python redis 包,get 方法返回值是 byte

requests 库超时时间设置问题

flask 项目用 debug 模式运行会打印两遍启动日志。

flask 项目局域网内无法通过 ip 访问

具体问题

1. python 函数中变量在 try-catch 块的作用域问题

先来看 python 中,在 try 里面定义的变量,在 except 仍然可以访问

try:

i = 1

# 模拟异常

j = 1 / 0

except:

print(i) # 打印结果为 1

而 java 中,直接就编译不通过

public static void main(String[] args) {

try{

int i = 0;

j = 1/0;

}catch (Exception e) {

System.out.println(i); # 编译报错

}

}

2. python 常量定义

python 中没有明确定义常量的方式,也就是你认为是他就是,不过仍然推荐用大写方式命名,当然,这种定义方式仍然可以随时修改‘常量’的值

RETRY_TIMES = 3.14

而 java 中使用 final 关键字修饰

final int RETRY_TIMES = 0

3. redis hash 数据类型无法给 field 设置过期时间

这个问题跟 python 没有关系。

第一次使用 redis hash 数据结构。

首先 redis hash 数据类型 是通过一下方式存储数据的。

set key fieldname fieldvalue

并且无法通过给 fieldname 设置过期时间,只能给 key 设置过期时间。

4. python 字符串替换

java 中进行字符串替换是通过如下方式:

String s = "hello world";

s.replace("world", "dog");

python 中除了这种方式,还有一种:

str = "hello, {}".format("world")

python redis 模块,get 方法返回值是 byte

value = my_redis.get("key")

print(value) # b"1234"

5. requests 库设置超时时间

首先 requests 库是通过如下方式设置超时时间

# 超时时间是通过元祖的方式传入的

requests.post(url, data, timeout=(connect_timeout, read_timeout))

# 会自动转为

如果传入 timeout=1.0, 会自动转为下面的形式

requests.post(url, data, timeout=(1.0, 1.0))

6. flask 项目局域网内无法通过 ip 访问

解决方式: 传入参数 host="0.0.0.0"

app.run(host="0.0.0.0", port=5001, debug=True, threaded=True)

7. flask项目用 debug 模式启动会打印两遍日志

首先来看启动入口代码

if __name__ == "__main__":

# 初始化 redis

# 省略部分代码

app.run(host="0.0.0.0", port=5001, debug=True, threaded=True)

然后以 debug 模式启动项目, 控制台输出以下日志(删减了部分)

pydev debugger: process 72880 is connecting

Connected to pydev debugger (build 193.6494.30)

-03-13 19:27:06 INFO (config.py:60) MainThread - port = 5001

-03-13 19:27:06 INFO (config.py:64) MainThread - redis_host = localhost

-03-13 19:27:06 INFO (config.py:65) MainThread - redis_port = 6379

-03-13 19:27:06 INFO (config.py:66) MainThread - redis_db = 15

-03-13 19:27:06 INFO (config.py:67) MainThread - redis_password =

* Serving Flask app "anti-fraud" (lazy loading)

* Environment: production

WARNING: This is a development server. Do not use it in a production deployment.

Use a production WSGI server instead.

* Debug mode: on

* Running on http://127.0.0.1:5001/ (Press CTRL+C to quit)

* Restarting with stat

pydev debugger: process 72882 is connecting

-03-13 19:27:07 INFO (config.py:60) MainThread - port = 5001

-03-13 19:27:07 INFO (config.py:64) MainThread - redis_host = localhost

-03-13 19:27:07 INFO (config.py:65) MainThread - redis_port = 6379

-03-13 19:27:07 INFO (config.py:66) MainThread - redis_db = 15

-03-13 19:27:07 INFO (config.py:67) MainThread - redis_password =

可以看到 redis 启动日志打印了两遍, 解决方式如下:

# 多加了 use_reloader=False 参数

app.run(host="0.0.0.0", port=5001, debug=True, use_reloader=False, threaded=True)

总结

以上就是对 python 开发过程遇到的问题,没有难度,纯粹是简单记录一下。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。