• [问题求助] 请问L实例上websocket服务协议是不是默认关闭的?
    前端通过const ws = new WebSocket('ws://websocket'); 访问后端,返回失败,直接进入onerrorusted: truebubbles: falsecancelBubble: falsecancelable: falsecomposed: falsecurrentTarget: WebSocket {url: 'ws://websocket', readyState: 3, bufferedAmount: 0, onopen: ƒ, onerror: ƒ, …}defaultPrevented: falseeventPhase: 0returnValue: truesrcElement: WebSocket {url: 'ws://websocket', readyState: 3, bufferedAmount: 0, onopen: ƒ, onerror: ƒ, …}target: WebSocket {url: 'ws://websocket', readyState: 3, bufferedAmount: 0, onopen: ƒ, onerror: ƒ, …}timeStamp: 203.5type: "error"
  • [问题求助] 请教前端fetch后端报ERR_CONNECTION_REFUSED,但在服务器直接curl后端api成功
    会是什么问题导致的?会不会是安全组设置错误导致的?非常感谢!
  • [问题求助] Flask能否返回一个html带上一个参数呢?
    @app.route('/uploader',methods=['GET','POST'])def uploader(): if request.method == 'POST': f = request.files['file'] print(request.files) f.save(os.path.join(app.config['UPLOAD_FOLDER'], secure_filename(f.filename))) return 'file uploaded successfully' else: return render_template('upload.html')像这样的Flask代码,它返回一个字符串或者返回一个html(都会打开一个新页面)那我如何返回html的同时,也带一个字符串参数呢?然后在新的html页面里,如何在新的请求中加上这个字符串参数呢?感谢!
  • [技术干货] Python的flask常用函数route()【转】
    目录一、route()路由概述二、静态路由和动态路径方式1:静态路由方式2:动态路由三、route()其它参数1.methods=[‘GET’,‘POST’]一、route()路由概述功能:将URL绑定到函数路由函数route()的调用有两种方式:静态路由和动态路由二、静态路由和动态路径方式1:静态路由@app.route(“/xxx”) xxx为静态路径 如::/index / /base等,可以返回一个值、字符串、页面等12345678910111213from flask import Flaskapp = Flask(__name__) @app.route('/hello')def hello_world():    return 'Hello World!!!'     @app.route('/pro')def index():    return render_template('login.html') if __name__ == '__main__':    app.run(debug = True)方式2:动态路由采用<>进行动态url的传递@app.route(“/”),这里xxx为不确定的路径。123456789from flask import Flaskapp = Flask(__name__) @app.route('/hello/<name>')def hello_name(name):   return 'Hello %s!' % name if __name__ == '__main__':   app.run(debug = True)如果浏览器地址栏输入:http:// localhost:5000/hello/w3cschool则会在页面显示:Hello w3cschool!三、route()其它参数1.methods=[‘GET’,‘POST’]当前视图函数支持的请求方式,不设置默认为GET请求方式不区分大小写methods=[‘GET’] 支持的请求方法为GETmethods=[‘POST’] 支持的请求方法为POSTmethods=[‘GET’,‘POST’] 支持的请求方法为POST GET123456789101112@app.route('/login', methods=['GET', 'POST'])  # 请求参数设置不区分大小写,源码中自动进行了upperdef login():    if request.method == 'GET':        return render_template('login.html')    elif request.method == 'POST':        username = request.form.get('username')        pwd = request.form.get('pwd')        if username == 'yang' and pwd == '123456':            session['username'] = username            return 'login successed 200  ok!'        else:            return 'login failed!!!'
  • [技术干货] Python使用Flask Migrate模块迁移数据库【转】
    前言安装初始化项目结构三大命令前言本篇文章,阐述一下Flask中数据库的迁移为什么要说数据库迁移呢?比如我们以前有一个数据库,里面的信息有 id, name现在我想再加一个gender属性,应该怎么办呢?不可能直接把数据库删除掉吧。然后重新创建一个,因此本文介绍一种,通过数据库迁移的方法,可以保留原始的数据,并完成添加新的一列的方法。安装直接使用pip install flask-migrate即可初始化项目结构123# exts.pyfrom flask_sqlalchemy import SQLAlchemydb = SQLAlchemy()老样子,我们还是在exts.py中,初始我们的数据库,这里时放Flask扩展的地方。1234567# models.pyfrom exts import dbclass User(db.Model):    id = db.Column(db.Integer,primary_key=True)    username = db.Column(db.String(80),unique=True)    def __repr__(self):        return '<User %s>' % self.usernamemodels.py是放模型的地方。1234567891011# app.pyfrom flask import Flaskfrom exts import dbfrom flask_migrate import Migrateapp = Flask(__name__)app.config['SQLALCHEMY_DATABASE_URI'] = "sqlite:///foo.db"# !!!绑定app和数据库db.init_app(app)migrate = Migrate(app,db)if __name__ == '__main__':    app.run()主程序,我们在!!!进行初始化数据库迁移的migrate 对象。初始化之后我们可以执行下面的三大命令去创建我们的数据库。就不需要db.create_all()命令啦。三大命令# (1)初始化flask db init# 把当前的模型添加到迁移文件flask db migrate# 将映射文件真正的映射到数据库中flask db upgrade(1)新建一个名字为migrations的文件夹,并且记录一个数据库版本号其他问题:如果报错[flask_migrate] Error: Can‘t locate revision identified by '409392ed6301'答:db revision --rev-id 409392ed6301 409392ed6301是问题的版本号Error: While importing ‘app’, an ImportError was raised.答:请先去运行一下app.py,确保app.py可以运行Error: Could not locate a Flask application. You did not provide the “FLASK_APP” environment variable, and a “wsgi.py” or “app.py” module was not found in the current directory. 答:请确保执行命令时的文件夹中有app.py文件
  • [技术干货] Python Flask中Cookie和Session区别详解【转】
    目录前言安装创建虚拟环境进入虚拟环境安装 flaskCookie的使用Session的使用前言本篇文章,阐述一下Flask中Cookie和Session为什么要说Cookie和Session呢?答:因为http请求是无状态的,怎么理解呢?当你访问B站时,如果你没有Cookie或者Session,B站就认为你是一个没有登录的用户。如果你有Cookie或Session,那么B站就知道你登录了,并且知道你是谁。所以可以把跟你相关的资料返回给你两者的区别:答:Cookie是明文,Session是加密的Cookie。安装创建虚拟环境123mkdir myprojectcd myprojectpython3 -m venv venv进入虚拟环境1. venv/bin/activate安装 flask1pip install FlaskCookie的使用12345678910111213141516from flask import Flask, Response, requestapp = Flask(__name__)@app.route("/set_cookie")def set_cookie():    response = Response("set cookie success")    response.set_cookie("user_id","123")    return response@app.route("/get_cookie")def get_cookie():    cookies = request.cookies    if cookies.get("user_id") == "123":        return "尊敬的用户你好,你的cookies是" + str(cookies)    else:        return "你不是VIP,请先获取身份"if __name__ == "__main__":    app.run(debug=True,port=5000)第一次首先访问/home地址,会发现你没有Cookie给你返回一个你不是VIP,请先获取身份但是当我们首先访问/set_cookie,我们就会获得一个cookie,然后我们在访问/home地址,就可以成功的显示尊敬的用户您好了Session的使用12345678910111213141516from flask import Flask, sessionapp = Flask(__name__)# !!!你需要设置一个SECRET_KEY用来加密Cookieapp.config["SECRET_KEY"] = "123"@app.route("/set_session")def set_session():    session["user_name"] = "zhuxiaoxiao"    return "设置session成功" + session["user_name"]@app.route("/home")def home():    if session.get("user_name") == "zhuxiaoxiao":        return "尊敬的用户,登录成功"    else:        return "请先登录好吗?"if __name__ == "__main__":    app.run(debug=True,port=5000)Session的使用方式整体和Cookie是一样的。需要注意的是使用Session前,必须要进行设置SECRET_KEY,用来加密Cookie
  • [技术干货] 首发】flask 实现ajax 数据入库,并掌握文件上传[转载]
    lask 实现ajax 数据入库在正式编写前需要了解一下如何在 python 函数中去判断,一个请求是 get 还是 post。python 文件代码如此所示:# route()方法用于设定路由; @app.route('/hello.html', methods=['GET', 'POST']) def hello_world(): if request.method == 'GET': # args = request.args return render_template('hello.html') if request.method == "POST": print("POST请求")上述代码通过 requests.method 属性判断当前请求类型,然后实现相应的逻辑。注意上述内容中的 @app.route('/hello.html', methods=['GET', 'POST']) ,绑定的方法由参数 methods 决定。HTML 页面代码如下所示:<!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="UTF-8"> <title>这是第一个HTML页面</title> <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script> </head> <body> {{name}} <input type="button" value="点击发送请求" id="btn" /> <script> $(function() { $('#btn').on('click', function() { alert($(this).val()); }); }) </script> </body> </html>在 HTML 页面中提前导入 jquery 的 CDN 配置,便于后续实现模拟请求操作。再次完善一些 POST 请求的相关参数判断,通过 requests.form 获取表单参数。# route()方法用于设定路由; @app.route('/hello.html', methods=['GET', 'POST']) def hello_world(): if request.method == 'GET': args = request.args name = args.get('name') return render_template('hello.html',name=name) if request.method == "POST": print("POST请求") arges = request.form print(arges) return "PPP"同步修改一下前端请求部分,这里改造主要需要的是前端知识。<body> {{name}} <input type="button" value="点击发送请求" id="btn" /> <script> $(function() { $('#btn').on('click', function() { //alert($(this).val()); $.post('./hello.html', function(result) { console.log(result); }) }); }) </script> </body>测试的时候同步开启浏览器的开发者工具,并且切换到网络请求视图,查看请求与返回数据。数据传递到后台之后,只需要使用上一篇博客涉及的内容即可将数据存储到 MySQL 中。实现文件上传了解了POST请求之后,就可以通过该模式实现文件上传操作了。优先修改 HTML 页面,实现一个文件选择按钮。<input type="file" id="file" /> <script type="text/javascript"> $(function() { $('#btn').on('click', function() { //alert($(this).val()); $.post('./hello.html', function(result) { console.log(result); }) }); var get_file = document.getElementById("file"); get_file.onchange = function(e) { file = e.currentTarget.files[0]; //所有文件,返回一个数组 var form_data = new FormData(); form_data.append("file", file); console.log(form_data); form_data.append("file_name", e.currentTarget.files[0].name); $.ajax({ url: '/upload', type: 'post', data: form_data, contentType: false, processData: false, success: function(res) { console.log(res.data); } }); } }) </script>服务端处理文件的代码如下所示@app.route('/upload', methods=['POST'], strict_slashes=False) def upload(): if request.method == "POST": print("POST请求") file = request.files.get('file') name = request.form.get('file_name') print(name) file.save("./"+name) # print(name) return "PPP"这里需要注意的是如果 Python 端存在BUG,前端的AJAX请求会出现 400或者500错误。文件名通过前端传递 file_name 参数获取。本案例可以扩展上传成功之后,返回JSON数据到前端进行后续处理。项目在实测的过程中发现一个问题,在读取前台传递的文件流时,需要使用 request.files.get() 方法实现,而不能用 request.form['参数名'] 。原文链接:https://bbs.huaweicloud.com/blogs/334929
  • [问题求助] 【atlas 200dk】【flask服务功能】初始化模型成功,第一次调用成功,但是第二次继续调用报错
    【功能模块】atlas 200dk flask服务【操作步骤&问题现象】1、采用flask在atlas 200 dk 上面搭建一个人脸录入算法功能,目的是可以连续多次录入人脸2、问题:模型初始化成功,采用postman进行第一次算法调用,录入人脸成功,但是想继续第二次调用算法时,报错【截图信息】图1:第一次调用算法成功图二,第二次调用算法报错,根据打印信息,推测是第二次调用算法时,初始化有问题【其他信息】(可选,上传日志内容或者附件)图3,模型初始化代码,只初始化一次图4,引发报错的相关代码,初步分析是第二次调用算法时,acl.rt.memcpy()方法有问题
  • [问题求助] 【Atlas 200DK】【调用模型】flask内接收到请求时初始化模型不成功
    【功能模块】【操作步骤&问题现象】1、我把model里面的__del__()做了名为destroy()的封装我通过图一的方式想在每次接收到请求后调用模型推理返回结果,在@app.route外部是可以反复加载成功执行的,但是在内部接收到请求时调用就会产生acl.mdl.load_from_file failed ret=500002的错误,如图二图三所示2、请问这是为什么呢,从根本上就无法在每次收到请求时初始化模型吗?如果没有办法的话有没有只初始化模型一次然后传入app.route内部每次调用的方法呢?【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [技术干货] python+flask编写一个简单的登录接口
    在学习接口测试的时候往往会因为没有实际操作的接口进行测试而烦恼,这里教大家自己编写两个接口用于学习接口测试1、编写一个登录的接口2、在pycharm运行3、使用apipost进行登录接口测试输入url和参数值进行访问,访问成功。4、在pycharm查看是否正常进行访问5、在编写一个需要登录返回的token直接访问的查询接口6、运行登录和查询两个接口7、使用apipost进行登录和查询的接口测试首先进行登录的接口测试获取返回的token使用登录返回的token值进行查询的接口测试8、使用的工具接口编写工具:python、pycharm、flask框架接口测试工具:apipost接口测试工具下载地址:https://www.apipost.cn